From c6023122fc1397fa9f37f4647987c134f15fc3b7 Mon Sep 17 00:00:00 2001 From: L-diy Date: Sun, 5 Nov 2023 19:52:31 +0100 Subject: [PATCH] Add the BSP for the STM32F746G-DISCO board --- project/.cproject | 10 +- project/.mxproject | 50 +- project/Core/Inc/stm32f7xx_hal_conf.h | 2 +- project/Core/Src/main.c | 39 + project/Core/Src/stm32f7xx_hal_msp.c | 100 + .../BSP/Components/Common/Release_Notes.html | 759 +++++ .../Drivers/BSP/Components/Common/accelero.h | 143 + project/Drivers/BSP/Components/Common/audio.h | 122 + .../Drivers/BSP/Components/Common/camera.h | 141 + project/Drivers/BSP/Components/Common/epd.h | 115 + project/Drivers/BSP/Components/Common/gyro.h | 145 + project/Drivers/BSP/Components/Common/idd.h | 168 + project/Drivers/BSP/Components/Common/io.h | 150 + project/Drivers/BSP/Components/Common/lcd.h | 114 + .../Drivers/BSP/Components/Common/magneto.h | 125 + project/Drivers/BSP/Components/Common/ts.h | 107 + .../Drivers/BSP/Components/Common/tsensor.h | 118 + .../BSP/Components/ft5336/Release_Notes.html | 215 ++ .../Drivers/BSP/Components/ft5336/ft5336.c | 623 ++++ .../Drivers/BSP/Components/ft5336/ft5336.h | 538 ++++ .../Components/n25q128a/Release_Notes.html | 172 + .../BSP/Components/n25q128a/n25q128a.h | 217 ++ .../Components/rk043fn48h/Release_Notes.html | 246 ++ .../BSP/Components/rk043fn48h/rk043fn48h.h | 119 + .../BSP/STM32746G-Discovery/LICENSE.txt | 6 + .../Drivers/BSP/STM32746G-Discovery/README.md | 41 + .../STM32746G-Discovery/Release_Notes.html | 887 +++++ .../STM32746G-Discovery_BSP_User_Manual.chm | Bin 0 -> 923114 bytes .../STM32746G-Discovery/_htmresc/mini-st.css | 1700 ++++++++++ .../STM32746G-Discovery/_htmresc/st_logo.png | Bin 0 -> 18616 bytes .../STM32746G-Discovery/stm32746g_discovery.c | 884 +++++ .../STM32746G-Discovery/stm32746g_discovery.h | 321 ++ .../stm32746g_discovery_lcd.c | 1647 ++++++++++ .../stm32746g_discovery_lcd.h | 249 ++ .../stm32746g_discovery_qspi.c | 782 +++++ .../stm32746g_discovery_qspi.h | 152 + .../stm32746g_discovery_sdram.c | 481 +++ .../stm32746g_discovery_sdram.h | 144 + .../stm32746g_discovery_ts.c | 434 +++ .../stm32746g_discovery_ts.h | 194 ++ .../Inc/stm32f7xx_hal_qspi.h | 750 +++++ .../Src/stm32f7xx_hal_qspi.c | 2840 +++++++++++++++++ project/Utilities/Fonts/Release_Notes.html | 163 + project/Utilities/Fonts/font12.c | 1464 +++++++++ project/Utilities/Fonts/font16.c | 1844 +++++++++++ project/Utilities/Fonts/font20.c | 2223 +++++++++++++ project/Utilities/Fonts/font24.c | 2600 +++++++++++++++ project/Utilities/Fonts/font8.c | 1084 +++++++ project/Utilities/Fonts/fonts.h | 134 + project/project.ioc | 213 +- 50 files changed, 25655 insertions(+), 120 deletions(-) create mode 100644 project/Drivers/BSP/Components/Common/Release_Notes.html create mode 100644 project/Drivers/BSP/Components/Common/accelero.h create mode 100644 project/Drivers/BSP/Components/Common/audio.h create mode 100644 project/Drivers/BSP/Components/Common/camera.h create mode 100644 project/Drivers/BSP/Components/Common/epd.h create mode 100644 project/Drivers/BSP/Components/Common/gyro.h create mode 100644 project/Drivers/BSP/Components/Common/idd.h create mode 100644 project/Drivers/BSP/Components/Common/io.h create mode 100644 project/Drivers/BSP/Components/Common/lcd.h create mode 100644 project/Drivers/BSP/Components/Common/magneto.h create mode 100644 project/Drivers/BSP/Components/Common/ts.h create mode 100644 project/Drivers/BSP/Components/Common/tsensor.h create mode 100644 project/Drivers/BSP/Components/ft5336/Release_Notes.html create mode 100644 project/Drivers/BSP/Components/ft5336/ft5336.c create mode 100644 project/Drivers/BSP/Components/ft5336/ft5336.h create mode 100644 project/Drivers/BSP/Components/n25q128a/Release_Notes.html create mode 100644 project/Drivers/BSP/Components/n25q128a/n25q128a.h create mode 100644 project/Drivers/BSP/Components/rk043fn48h/Release_Notes.html create mode 100644 project/Drivers/BSP/Components/rk043fn48h/rk043fn48h.h create mode 100644 project/Drivers/BSP/STM32746G-Discovery/LICENSE.txt create mode 100644 project/Drivers/BSP/STM32746G-Discovery/README.md create mode 100644 project/Drivers/BSP/STM32746G-Discovery/Release_Notes.html create mode 100644 project/Drivers/BSP/STM32746G-Discovery/STM32746G-Discovery_BSP_User_Manual.chm create mode 100644 project/Drivers/BSP/STM32746G-Discovery/_htmresc/mini-st.css create mode 100644 project/Drivers/BSP/STM32746G-Discovery/_htmresc/st_logo.png create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c create mode 100644 project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h create mode 100644 project/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h create mode 100644 project/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c create mode 100644 project/Utilities/Fonts/Release_Notes.html create mode 100644 project/Utilities/Fonts/font12.c create mode 100644 project/Utilities/Fonts/font16.c create mode 100644 project/Utilities/Fonts/font20.c create mode 100644 project/Utilities/Fonts/font24.c create mode 100644 project/Utilities/Fonts/font8.c create mode 100644 project/Utilities/Fonts/fonts.h diff --git a/project/.cproject b/project/.cproject index 5606c1f..5a36f3b 100644 --- a/project/.cproject +++ b/project/.cproject @@ -92,7 +92,7 @@ - + @@ -213,4 +213,12 @@ + + + + + + + + \ No newline at end of file diff --git a/project/.mxproject b/project/.mxproject index 9f7982d..433d0c1 100644 --- a/project/.mxproject +++ b/project/.mxproject @@ -1,34 +1,34 @@ +[PreviousLibFiles] +LibFiles=Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_eth.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Middlewares\Third_Party\LwIP\src\apps\http\fsdata.h;Middlewares\Third_Party\LwIP\src\apps\http\httpd_structs.h;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Middlewares\Third_Party\LwIP\src\apps\http\httpd.c;Middlewares\Third_Party\LwIP\src\apps\http\fs.c;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dmamux.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_cortex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_eth.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma2d.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_fmc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_sdram.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_ltdc_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dsi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_qspi.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_tim_ex.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usart.h;Drivers\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h;Drivers\BSP\Components\lan8742\lan8742.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ccp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap_ms.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-md5.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\chap-new.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\eui64.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\fsm.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ipv6cp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\lcp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\magic.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\mppe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_impl.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ppp_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppapi.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppcrypt.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppdebug.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppoe.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppol2tp.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\pppos.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\upap.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\vj.h;Middlewares\Third_Party\LwIP\src\include\netif\ppp\ecp.h;Middlewares\Third_Party\LwIP\src\apps\http\fsdata.h;Middlewares\Third_Party\LwIP\src\apps\http\httpd_structs.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Middlewares\Third_Party\LwIP\src\include\lwip\altcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\altcp_tls.h;Middlewares\Third_Party\LwIP\src\include\lwip\api.h;Middlewares\Third_Party\LwIP\src\include\lwip\arch.h;Middlewares\Third_Party\LwIP\src\include\lwip\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\debug.h;Middlewares\Third_Party\LwIP\src\include\lwip\def.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\err.h;Middlewares\Third_Party\LwIP\src\include\lwip\errno.h;Middlewares\Third_Party\LwIP\src\include\lwip\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\ethip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\if_api.h;Middlewares\Third_Party\LwIP\src\include\lwip\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet.h;Middlewares\Third_Party\LwIP\src\include\lwip\inet_chksum.h;Middlewares\Third_Party\LwIP\src\include\lwip\init.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip4_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_frag.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip6_zone.h;Middlewares\Third_Party\LwIP\src\include\lwip\ip_addr.h;Middlewares\Third_Party\LwIP\src\include\lwip\mem.h;Middlewares\Third_Party\LwIP\src\include\lwip\memp.h;Middlewares\Third_Party\LwIP\src\include\lwip\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\netbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\netdb.h;Middlewares\Third_Party\LwIP\src\include\lwip\netif.h;Middlewares\Third_Party\LwIP\src\include\lwip\netifapi.h;Middlewares\Third_Party\LwIP\src\include\lwip\opt.h;Middlewares\Third_Party\LwIP\src\include\lwip\pbuf.h;Middlewares\Third_Party\LwIP\src\include\lwip\raw.h;Middlewares\Third_Party\LwIP\src\include\lwip\sio.h;Middlewares\Third_Party\LwIP\src\include\lwip\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\sockets.h;Middlewares\Third_Party\LwIP\src\include\lwip\stats.h;Middlewares\Third_Party\LwIP\src\include\lwip\sys.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpbase.h;Middlewares\Third_Party\LwIP\src\include\lwip\tcpip.h;Middlewares\Third_Party\LwIP\src\include\lwip\timeouts.h;Middlewares\Third_Party\LwIP\src\include\lwip\udp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_proxyconnect.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\altcp_tls_mbedtls_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\fs.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\httpd_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\http_client.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\lwiperf.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mdns_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\mqtt_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\netbiosns_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\smtp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmpv3.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_core.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_mib2.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_scalar.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_framework.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_snmpv2_usm.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_table.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\snmp_threadsync.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\sntp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_opts.h;Middlewares\Third_Party\LwIP\src\include\lwip\apps\tftp_server.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\altcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\api_msg.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\memp_std.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\mem_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\nd6_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\raw_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\sockets_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcpip_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\priv\tcp_priv.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\autoip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dhcp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\dns.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\etharp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ethernet.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\iana.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\icmp6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ieee.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\igmp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip4.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\ip6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\mld6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\nd6.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\tcp.h;Middlewares\Third_Party\LwIP\src\include\lwip\prot\udp.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif.h;Middlewares\Third_Party\LwIP\src\include\netif\bridgeif_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\etharp.h;Middlewares\Third_Party\LwIP\src\include\netif\ethernet.h;Middlewares\Third_Party\LwIP\src\include\netif\ieee802154.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_ble.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_common.h;Middlewares\Third_Party\LwIP\src\include\netif\lowpan6_opts.h;Middlewares\Third_Party\LwIP\src\include\netif\slipif.h;Middlewares\Third_Party\LwIP\src\include\netif\zepif.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\netdb.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa\inet.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\net\if.h;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys\socket.h;Middlewares\Third_Party\LwIP\src\include\compat\stdc\errno.h;Middlewares\Third_Party\LwIP\system\arch\bpstruct.h;Middlewares\Third_Party\LwIP\system\arch\cc.h;Middlewares\Third_Party\LwIP\system\arch\cpu.h;Middlewares\Third_Party\LwIP\system\arch\epstruct.h;Middlewares\Third_Party\LwIP\system\arch\init.h;Middlewares\Third_Party\LwIP\system\arch\lib.h;Middlewares\Third_Party\LwIP\system\arch\perf.h;Middlewares\Third_Party\LwIP\system\arch\sys_arch.h;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; + +[PreviousUsedCubeIDEFiles] +SourceFiles=Core\Src\main.c;LWIP\App\lwip.c;LWIP\Target\ethernetif.c;Core\Src\stm32f7xx_it.c;Core\Src\stm32f7xx_hal_msp.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Middlewares\Third_Party\LwIP\src\apps\http\httpd.c;Middlewares\Third_Party\LwIP\src\apps\http\fs.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Core\Src\system_stm32f7xx.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c;Drivers\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c;Drivers\BSP\Components\lan8742\lan8742.c;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Middlewares\Third_Party\LwIP\src\apps\http\httpd.c;Middlewares\Third_Party\LwIP\src\apps\http\fs.c;Drivers\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c;Core\Src\system_stm32f7xx.c;;;Middlewares\Third_Party\LwIP\src\netif\ppp\auth.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ccp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap_ms.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-md5.c;Middlewares\Third_Party\LwIP\src\netif\ppp\chap-new.c;Middlewares\Third_Party\LwIP\src\netif\ppp\demand.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\eui64.c;Middlewares\Third_Party\LwIP\src\netif\ppp\fsm.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ipv6cp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\lcp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\magic.c;Middlewares\Third_Party\LwIP\src\netif\ppp\mppe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\multilink.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ppp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppapi.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppcrypt.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppoe.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppol2tp.c;Middlewares\Third_Party\LwIP\src\netif\ppp\pppos.c;Middlewares\Third_Party\LwIP\src\netif\ppp\upap.c;Middlewares\Third_Party\LwIP\src\netif\ppp\utils.c;Middlewares\Third_Party\LwIP\src\netif\ppp\vj.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif.c;Middlewares\Third_Party\LwIP\src\netif\bridgeif_fdb.c;Middlewares\Third_Party\LwIP\src\netif\ethernet.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_ble.c;Middlewares\Third_Party\LwIP\src\netif\lowpan6_common.c;Middlewares\Third_Party\LwIP\src\netif\slipif.c;Middlewares\Third_Party\LwIP\src\netif\zepif.c;Middlewares\Third_Party\LwIP\src\netif\ppp\ecp.c;Middlewares\Third_Party\LwIP\src\apps\http\httpd.c;Middlewares\Third_Party\LwIP\src\apps\http\fs.c;Middlewares\Third_Party\LwIP\src\api\api_lib.c;Middlewares\Third_Party\LwIP\src\api\api_msg.c;Middlewares\Third_Party\LwIP\src\api\err.c;Middlewares\Third_Party\LwIP\src\api\if_api.c;Middlewares\Third_Party\LwIP\src\api\netbuf.c;Middlewares\Third_Party\LwIP\src\api\netdb.c;Middlewares\Third_Party\LwIP\src\api\netifapi.c;Middlewares\Third_Party\LwIP\src\api\sockets.c;Middlewares\Third_Party\LwIP\src\api\tcpip.c;Middlewares\Third_Party\LwIP\src\core\altcp.c;Middlewares\Third_Party\LwIP\src\core\altcp_alloc.c;Middlewares\Third_Party\LwIP\src\core\altcp_tcp.c;Middlewares\Third_Party\LwIP\src\core\def.c;Middlewares\Third_Party\LwIP\src\core\dns.c;Middlewares\Third_Party\LwIP\src\core\inet_chksum.c;Middlewares\Third_Party\LwIP\src\core\init.c;Middlewares\Third_Party\LwIP\src\core\ip.c;Middlewares\Third_Party\LwIP\src\core\mem.c;Middlewares\Third_Party\LwIP\src\core\memp.c;Middlewares\Third_Party\LwIP\src\core\netif.c;Middlewares\Third_Party\LwIP\src\core\pbuf.c;Middlewares\Third_Party\LwIP\src\core\raw.c;Middlewares\Third_Party\LwIP\src\core\stats.c;Middlewares\Third_Party\LwIP\src\core\sys.c;Middlewares\Third_Party\LwIP\src\core\tcp.c;Middlewares\Third_Party\LwIP\src\core\tcp_in.c;Middlewares\Third_Party\LwIP\src\core\tcp_out.c;Middlewares\Third_Party\LwIP\src\core\timeouts.c;Middlewares\Third_Party\LwIP\src\core\udp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\autoip.c;Middlewares\Third_Party\LwIP\src\core\ipv4\dhcp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\etharp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\icmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\igmp.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv4\ip4_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\dhcp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ethip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\icmp6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\inet6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_addr.c;Middlewares\Third_Party\LwIP\src\core\ipv6\ip6_frag.c;Middlewares\Third_Party\LwIP\src\core\ipv6\mld6.c;Middlewares\Third_Party\LwIP\src\core\ipv6\nd6.c;Middlewares\Third_Party\LwIP\src\apps\mqtt\mqtt.c; +HeaderPath=Middlewares\Third_Party\LwIP\src\include;Middlewares\Third_Party\LwIP\system;Middlewares\Third_Party\LwIP\src\include;Middlewares\Third_Party\LwIP\system;Drivers\STM32F7xx_HAL_Driver\Inc;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;Drivers\BSP\Components\lan8742;Middlewares\Third_Party\LwIP\src\include\netif\ppp;Middlewares\Third_Party\LwIP\src\apps\http;Drivers\CMSIS\Device\ST\STM32F7xx\Include;Middlewares\Third_Party\LwIP\src\include\lwip;Middlewares\Third_Party\LwIP\src\include\lwip\apps;Middlewares\Third_Party\LwIP\src\include\lwip\priv;Middlewares\Third_Party\LwIP\src\include\lwip\prot;Middlewares\Third_Party\LwIP\src\include\netif;Middlewares\Third_Party\LwIP\src\include\compat\posix;Middlewares\Third_Party\LwIP\src\include\compat\posix\arpa;Middlewares\Third_Party\LwIP\src\include\compat\posix\net;Middlewares\Third_Party\LwIP\src\include\compat\posix\sys;Middlewares\Third_Party\LwIP\src\include\compat\stdc;Middlewares\Third_Party\LwIP\system\arch;Drivers\CMSIS\Include;LWIP\App;LWIP\Target;Core\Inc; +CDefines=USE_HAL_DRIVER;STM32F746xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + [PreviousGenFiles] AdvancedFolderStructure=true HeaderFileListSize=6 -HeaderFiles#0=../LWIP/App/lwip.h -HeaderFiles#1=../LWIP/Target/lwipopts.h -HeaderFiles#2=../LWIP/Target/ethernetif.h -HeaderFiles#3=../Core/Inc/stm32f7xx_it.h -HeaderFiles#4=../Core/Inc/stm32f7xx_hal_conf.h -HeaderFiles#5=../Core/Inc/main.h +HeaderFiles#0=..\LWIP\App\lwip.h +HeaderFiles#1=..\LWIP\Target\lwipopts.h +HeaderFiles#2=..\LWIP\Target\ethernetif.h +HeaderFiles#3=..\Core\Inc\stm32f7xx_it.h +HeaderFiles#4=..\Core\Inc\stm32f7xx_hal_conf.h +HeaderFiles#5=..\Core\Inc\main.h HeaderFolderListSize=3 -HeaderPath#0=../LWIP/App -HeaderPath#1=../LWIP/Target -HeaderPath#2=../Core/Inc +HeaderPath#0=..\LWIP\App +HeaderPath#1=..\LWIP\Target +HeaderPath#2=..\Core\Inc HeaderFiles=; SourceFileListSize=5 -SourceFiles#0=../LWIP/App/lwip.c -SourceFiles#1=../LWIP/Target/ethernetif.c -SourceFiles#2=../Core/Src/stm32f7xx_it.c -SourceFiles#3=../Core/Src/stm32f7xx_hal_msp.c -SourceFiles#4=../Core/Src/main.c +SourceFiles#0=..\LWIP\App\lwip.c +SourceFiles#1=..\LWIP\Target\ethernetif.c +SourceFiles#2=..\Core\Src\stm32f7xx_it.c +SourceFiles#3=..\Core\Src\stm32f7xx_hal_msp.c +SourceFiles#4=..\Core\Src\main.c SourceFolderListSize=3 -SourcePath#0=../LWIP/App -SourcePath#1=../LWIP/Target -SourcePath#2=../Core/Src +SourcePath#0=..\LWIP\App +SourcePath#1=..\LWIP\Target +SourcePath#2=..\Core\Src SourceFiles=; -[PreviousLibFiles] -LibFiles=Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_bus.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_system.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_utils.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dmamux.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_fmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sdram.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dsi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/BSP/Components/lan8742/lan8742.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ccp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap_ms.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-md5.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-new.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/eap.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/eui64.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/fsm.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipcp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipv6cp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/lcp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/magic.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/mppe.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_impl.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppapi.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppcrypt.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppdebug.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppoe.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppol2tp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppos.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/upap.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/vj.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ecp.h;Middlewares/Third_Party/LwIP/src/apps/http/fsdata.h;Middlewares/Third_Party/LwIP/src/apps/http/httpd_structs.h;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Drivers/BSP/Components/lan8742/lan8742.c;Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c;Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c;Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c;Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c;Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c;Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c;Middlewares/Third_Party/LwIP/src/netif/ethernet.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c;Middlewares/Third_Party/LwIP/src/netif/slipif.c;Middlewares/Third_Party/LwIP/src/netif/zepif.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c;Middlewares/Third_Party/LwIP/src/apps/http/httpd.c;Middlewares/Third_Party/LwIP/src/apps/http/fs.c;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_bus.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_system.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_utils.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dmamux.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_dma2d.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_fmc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_sdram.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_ltdc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dsi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/BSP/Components/lan8742/lan8742.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ccp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap_ms.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-md5.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/chap-new.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/eap.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/eui64.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/fsm.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipcp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ipv6cp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/lcp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/magic.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/mppe.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_impl.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ppp_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppapi.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppcrypt.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppdebug.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppoe.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppol2tp.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/pppos.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/upap.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/vj.h;Middlewares/Third_Party/LwIP/src/include/netif/ppp/ecp.h;Middlewares/Third_Party/LwIP/src/apps/http/fsdata.h;Middlewares/Third_Party/LwIP/src/apps/http/httpd_structs.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/system_stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Middlewares/Third_Party/LwIP/src/include/lwip/altcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tls.h;Middlewares/Third_Party/LwIP/src/include/lwip/api.h;Middlewares/Third_Party/LwIP/src/include/lwip/arch.h;Middlewares/Third_Party/LwIP/src/include/lwip/autoip.h;Middlewares/Third_Party/LwIP/src/include/lwip/debug.h;Middlewares/Third_Party/LwIP/src/include/lwip/def.h;Middlewares/Third_Party/LwIP/src/include/lwip/dhcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/dhcp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/dns.h;Middlewares/Third_Party/LwIP/src/include/lwip/err.h;Middlewares/Third_Party/LwIP/src/include/lwip/errno.h;Middlewares/Third_Party/LwIP/src/include/lwip/etharp.h;Middlewares/Third_Party/LwIP/src/include/lwip/ethip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/icmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/icmp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/if_api.h;Middlewares/Third_Party/LwIP/src/include/lwip/igmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/inet.h;Middlewares/Third_Party/LwIP/src/include/lwip/inet_chksum.h;Middlewares/Third_Party/LwIP/src/include/lwip/init.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4_frag.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_frag.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_zone.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/mem.h;Middlewares/Third_Party/LwIP/src/include/lwip/memp.h;Middlewares/Third_Party/LwIP/src/include/lwip/mld6.h;Middlewares/Third_Party/LwIP/src/include/lwip/nd6.h;Middlewares/Third_Party/LwIP/src/include/lwip/netbuf.h;Middlewares/Third_Party/LwIP/src/include/lwip/netdb.h;Middlewares/Third_Party/LwIP/src/include/lwip/netif.h;Middlewares/Third_Party/LwIP/src/include/lwip/netifapi.h;Middlewares/Third_Party/LwIP/src/include/lwip/opt.h;Middlewares/Third_Party/LwIP/src/include/lwip/pbuf.h;Middlewares/Third_Party/LwIP/src/include/lwip/raw.h;Middlewares/Third_Party/LwIP/src/include/lwip/sio.h;Middlewares/Third_Party/LwIP/src/include/lwip/snmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h;Middlewares/Third_Party/LwIP/src/include/lwip/stats.h;Middlewares/Third_Party/LwIP/src/include/lwip/sys.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcpbase.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcpip.h;Middlewares/Third_Party/LwIP/src/include/lwip/timeouts.h;Middlewares/Third_Party/LwIP/src/include/lwip/udp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_proxyconnect.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_tls_mbedtls_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/fs.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/http_client.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/lwiperf.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmpv3.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_core.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_mib2.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_scalar.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_framework.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_usm.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_table.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_threadsync.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_server.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/altcp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/api_msg.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_std.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/mem_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/nd6_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/raw_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/sockets_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcpip_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/autoip.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dns.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/etharp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ethernet.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/iana.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ieee.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/igmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip4.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/mld6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/nd6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/udp.h;Middlewares/Third_Party/LwIP/src/include/netif/bridgeif.h;Middlewares/Third_Party/LwIP/src/include/netif/bridgeif_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/etharp.h;Middlewares/Third_Party/LwIP/src/include/netif/ethernet.h;Middlewares/Third_Party/LwIP/src/include/netif/ieee802154.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_ble.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_common.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/slipif.h;Middlewares/Third_Party/LwIP/src/include/netif/zepif.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/netdb.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa/inet.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/net/if.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/sys/socket.h;Middlewares/Third_Party/LwIP/src/include/compat/stdc/errno.h;Middlewares/Third_Party/LwIP/system/arch/bpstruct.h;Middlewares/Third_Party/LwIP/system/arch/cc.h;Middlewares/Third_Party/LwIP/system/arch/cpu.h;Middlewares/Third_Party/LwIP/system/arch/epstruct.h;Middlewares/Third_Party/LwIP/system/arch/init.h;Middlewares/Third_Party/LwIP/system/arch/lib.h;Middlewares/Third_Party/LwIP/system/arch/perf.h;Middlewares/Third_Party/LwIP/system/arch/sys_arch.h;Middlewares/Third_Party/LwIP/src/api/api_lib.c;Middlewares/Third_Party/LwIP/src/api/api_msg.c;Middlewares/Third_Party/LwIP/src/api/err.c;Middlewares/Third_Party/LwIP/src/api/if_api.c;Middlewares/Third_Party/LwIP/src/api/netbuf.c;Middlewares/Third_Party/LwIP/src/api/netdb.c;Middlewares/Third_Party/LwIP/src/api/netifapi.c;Middlewares/Third_Party/LwIP/src/api/sockets.c;Middlewares/Third_Party/LwIP/src/api/tcpip.c;Middlewares/Third_Party/LwIP/src/core/altcp.c;Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c;Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c;Middlewares/Third_Party/LwIP/src/core/def.c;Middlewares/Third_Party/LwIP/src/core/dns.c;Middlewares/Third_Party/LwIP/src/core/inet_chksum.c;Middlewares/Third_Party/LwIP/src/core/init.c;Middlewares/Third_Party/LwIP/src/core/ip.c;Middlewares/Third_Party/LwIP/src/core/mem.c;Middlewares/Third_Party/LwIP/src/core/memp.c;Middlewares/Third_Party/LwIP/src/core/netif.c;Middlewares/Third_Party/LwIP/src/core/pbuf.c;Middlewares/Third_Party/LwIP/src/core/raw.c;Middlewares/Third_Party/LwIP/src/core/stats.c;Middlewares/Third_Party/LwIP/src/core/sys.c;Middlewares/Third_Party/LwIP/src/core/tcp.c;Middlewares/Third_Party/LwIP/src/core/tcp_in.c;Middlewares/Third_Party/LwIP/src/core/tcp_out.c;Middlewares/Third_Party/LwIP/src/core/timeouts.c;Middlewares/Third_Party/LwIP/src/core/udp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c;Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c;Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c;Middlewares/Third_Party/LwIP/src/include/lwip/altcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/altcp_tls.h;Middlewares/Third_Party/LwIP/src/include/lwip/api.h;Middlewares/Third_Party/LwIP/src/include/lwip/arch.h;Middlewares/Third_Party/LwIP/src/include/lwip/autoip.h;Middlewares/Third_Party/LwIP/src/include/lwip/debug.h;Middlewares/Third_Party/LwIP/src/include/lwip/def.h;Middlewares/Third_Party/LwIP/src/include/lwip/dhcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/dhcp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/dns.h;Middlewares/Third_Party/LwIP/src/include/lwip/err.h;Middlewares/Third_Party/LwIP/src/include/lwip/errno.h;Middlewares/Third_Party/LwIP/src/include/lwip/etharp.h;Middlewares/Third_Party/LwIP/src/include/lwip/ethip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/icmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/icmp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/if_api.h;Middlewares/Third_Party/LwIP/src/include/lwip/igmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/inet.h;Middlewares/Third_Party/LwIP/src/include/lwip/inet_chksum.h;Middlewares/Third_Party/LwIP/src/include/lwip/init.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip4_frag.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_frag.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip6_zone.h;Middlewares/Third_Party/LwIP/src/include/lwip/ip_addr.h;Middlewares/Third_Party/LwIP/src/include/lwip/mem.h;Middlewares/Third_Party/LwIP/src/include/lwip/memp.h;Middlewares/Third_Party/LwIP/src/include/lwip/mld6.h;Middlewares/Third_Party/LwIP/src/include/lwip/nd6.h;Middlewares/Third_Party/LwIP/src/include/lwip/netbuf.h;Middlewares/Third_Party/LwIP/src/include/lwip/netdb.h;Middlewares/Third_Party/LwIP/src/include/lwip/netif.h;Middlewares/Third_Party/LwIP/src/include/lwip/netifapi.h;Middlewares/Third_Party/LwIP/src/include/lwip/opt.h;Middlewares/Third_Party/LwIP/src/include/lwip/pbuf.h;Middlewares/Third_Party/LwIP/src/include/lwip/raw.h;Middlewares/Third_Party/LwIP/src/include/lwip/sio.h;Middlewares/Third_Party/LwIP/src/include/lwip/snmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/sockets.h;Middlewares/Third_Party/LwIP/src/include/lwip/stats.h;Middlewares/Third_Party/LwIP/src/include/lwip/sys.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcpbase.h;Middlewares/Third_Party/LwIP/src/include/lwip/tcpip.h;Middlewares/Third_Party/LwIP/src/include/lwip/timeouts.h;Middlewares/Third_Party/LwIP/src/include/lwip/udp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_proxyconnect.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/altcp_tls_mbedtls_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/fs.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/httpd_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/http_client.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/lwiperf.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mdns_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/mqtt_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/netbiosns_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/smtp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmpv3.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_core.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_mib2.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_scalar.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_framework.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_snmpv2_usm.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_table.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/snmp_threadsync.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/sntp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_opts.h;Middlewares/Third_Party/LwIP/src/include/lwip/apps/tftp_server.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/altcp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/api_msg.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/memp_std.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/mem_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/nd6_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/raw_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/sockets_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcpip_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/priv/tcp_priv.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/autoip.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dhcp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/dns.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/etharp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ethernet.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/iana.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/icmp6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ieee.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/igmp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip4.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/ip6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/mld6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/nd6.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/tcp.h;Middlewares/Third_Party/LwIP/src/include/lwip/prot/udp.h;Middlewares/Third_Party/LwIP/src/include/netif/bridgeif.h;Middlewares/Third_Party/LwIP/src/include/netif/bridgeif_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/etharp.h;Middlewares/Third_Party/LwIP/src/include/netif/ethernet.h;Middlewares/Third_Party/LwIP/src/include/netif/ieee802154.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_ble.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_common.h;Middlewares/Third_Party/LwIP/src/include/netif/lowpan6_opts.h;Middlewares/Third_Party/LwIP/src/include/netif/slipif.h;Middlewares/Third_Party/LwIP/src/include/netif/zepif.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/netdb.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa/inet.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/net/if.h;Middlewares/Third_Party/LwIP/src/include/compat/posix/sys/socket.h;Middlewares/Third_Party/LwIP/src/include/compat/stdc/errno.h;Middlewares/Third_Party/LwIP/system/arch/bpstruct.h;Middlewares/Third_Party/LwIP/system/arch/cc.h;Middlewares/Third_Party/LwIP/system/arch/cpu.h;Middlewares/Third_Party/LwIP/system/arch/epstruct.h;Middlewares/Third_Party/LwIP/system/arch/init.h;Middlewares/Third_Party/LwIP/system/arch/lib.h;Middlewares/Third_Party/LwIP/system/arch/perf.h;Middlewares/Third_Party/LwIP/system/arch/sys_arch.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; - -[PreviousUsedCubeIDEFiles] -SourceFiles=Core/Src/main.c;LWIP/App/lwip.c;LWIP/Target/ethernetif.c;Core/Src/stm32f7xx_it.c;Core/Src/stm32f7xx_hal_msp.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Drivers/BSP/Components/lan8742/lan8742.c;Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c;Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c;Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c;Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c;Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c;Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c;Middlewares/Third_Party/LwIP/src/netif/ethernet.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c;Middlewares/Third_Party/LwIP/src/netif/slipif.c;Middlewares/Third_Party/LwIP/src/netif/zepif.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c;Middlewares/Third_Party/LwIP/src/apps/http/httpd.c;Middlewares/Third_Party/LwIP/src/apps/http/fs.c;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Middlewares/Third_Party/LwIP/src/api/api_lib.c;Middlewares/Third_Party/LwIP/src/api/api_msg.c;Middlewares/Third_Party/LwIP/src/api/err.c;Middlewares/Third_Party/LwIP/src/api/if_api.c;Middlewares/Third_Party/LwIP/src/api/netbuf.c;Middlewares/Third_Party/LwIP/src/api/netdb.c;Middlewares/Third_Party/LwIP/src/api/netifapi.c;Middlewares/Third_Party/LwIP/src/api/sockets.c;Middlewares/Third_Party/LwIP/src/api/tcpip.c;Middlewares/Third_Party/LwIP/src/core/altcp.c;Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c;Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c;Middlewares/Third_Party/LwIP/src/core/def.c;Middlewares/Third_Party/LwIP/src/core/dns.c;Middlewares/Third_Party/LwIP/src/core/inet_chksum.c;Middlewares/Third_Party/LwIP/src/core/init.c;Middlewares/Third_Party/LwIP/src/core/ip.c;Middlewares/Third_Party/LwIP/src/core/mem.c;Middlewares/Third_Party/LwIP/src/core/memp.c;Middlewares/Third_Party/LwIP/src/core/netif.c;Middlewares/Third_Party/LwIP/src/core/pbuf.c;Middlewares/Third_Party/LwIP/src/core/raw.c;Middlewares/Third_Party/LwIP/src/core/stats.c;Middlewares/Third_Party/LwIP/src/core/sys.c;Middlewares/Third_Party/LwIP/src/core/tcp.c;Middlewares/Third_Party/LwIP/src/core/tcp_in.c;Middlewares/Third_Party/LwIP/src/core/tcp_out.c;Middlewares/Third_Party/LwIP/src/core/timeouts.c;Middlewares/Third_Party/LwIP/src/core/udp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c;Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c;Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c;Core/Src/system_stm32f7xx.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma2d.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_fmc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_sdram.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_ltdc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dsi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Drivers/BSP/Components/lan8742/lan8742.c;Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c;Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c;Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c;Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c;Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c;Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c;Middlewares/Third_Party/LwIP/src/netif/ethernet.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c;Middlewares/Third_Party/LwIP/src/netif/slipif.c;Middlewares/Third_Party/LwIP/src/netif/zepif.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c;Middlewares/Third_Party/LwIP/src/apps/http/httpd.c;Middlewares/Third_Party/LwIP/src/apps/http/fs.c;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Middlewares/Third_Party/LwIP/src/api/api_lib.c;Middlewares/Third_Party/LwIP/src/api/api_msg.c;Middlewares/Third_Party/LwIP/src/api/err.c;Middlewares/Third_Party/LwIP/src/api/if_api.c;Middlewares/Third_Party/LwIP/src/api/netbuf.c;Middlewares/Third_Party/LwIP/src/api/netdb.c;Middlewares/Third_Party/LwIP/src/api/netifapi.c;Middlewares/Third_Party/LwIP/src/api/sockets.c;Middlewares/Third_Party/LwIP/src/api/tcpip.c;Middlewares/Third_Party/LwIP/src/core/altcp.c;Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c;Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c;Middlewares/Third_Party/LwIP/src/core/def.c;Middlewares/Third_Party/LwIP/src/core/dns.c;Middlewares/Third_Party/LwIP/src/core/inet_chksum.c;Middlewares/Third_Party/LwIP/src/core/init.c;Middlewares/Third_Party/LwIP/src/core/ip.c;Middlewares/Third_Party/LwIP/src/core/mem.c;Middlewares/Third_Party/LwIP/src/core/memp.c;Middlewares/Third_Party/LwIP/src/core/netif.c;Middlewares/Third_Party/LwIP/src/core/pbuf.c;Middlewares/Third_Party/LwIP/src/core/raw.c;Middlewares/Third_Party/LwIP/src/core/stats.c;Middlewares/Third_Party/LwIP/src/core/sys.c;Middlewares/Third_Party/LwIP/src/core/tcp.c;Middlewares/Third_Party/LwIP/src/core/tcp_in.c;Middlewares/Third_Party/LwIP/src/core/tcp_out.c;Middlewares/Third_Party/LwIP/src/core/timeouts.c;Middlewares/Third_Party/LwIP/src/core/udp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c;Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c;Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c;Core/Src/system_stm32f7xx.c;;;Middlewares/Third_Party/LwIP/src/netif/ppp/auth.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ccp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap_ms.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-md5.c;Middlewares/Third_Party/LwIP/src/netif/ppp/chap-new.c;Middlewares/Third_Party/LwIP/src/netif/ppp/demand.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/eui64.c;Middlewares/Third_Party/LwIP/src/netif/ppp/fsm.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ipv6cp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/lcp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/magic.c;Middlewares/Third_Party/LwIP/src/netif/ppp/mppe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/multilink.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ppp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppapi.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppcrypt.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppoe.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppol2tp.c;Middlewares/Third_Party/LwIP/src/netif/ppp/pppos.c;Middlewares/Third_Party/LwIP/src/netif/ppp/upap.c;Middlewares/Third_Party/LwIP/src/netif/ppp/utils.c;Middlewares/Third_Party/LwIP/src/netif/ppp/vj.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif.c;Middlewares/Third_Party/LwIP/src/netif/bridgeif_fdb.c;Middlewares/Third_Party/LwIP/src/netif/ethernet.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_ble.c;Middlewares/Third_Party/LwIP/src/netif/lowpan6_common.c;Middlewares/Third_Party/LwIP/src/netif/slipif.c;Middlewares/Third_Party/LwIP/src/netif/zepif.c;Middlewares/Third_Party/LwIP/src/netif/ppp/ecp.c;Middlewares/Third_Party/LwIP/src/apps/http/httpd.c;Middlewares/Third_Party/LwIP/src/apps/http/fs.c;Middlewares/Third_Party/LwIP/src/api/api_lib.c;Middlewares/Third_Party/LwIP/src/api/api_msg.c;Middlewares/Third_Party/LwIP/src/api/err.c;Middlewares/Third_Party/LwIP/src/api/if_api.c;Middlewares/Third_Party/LwIP/src/api/netbuf.c;Middlewares/Third_Party/LwIP/src/api/netdb.c;Middlewares/Third_Party/LwIP/src/api/netifapi.c;Middlewares/Third_Party/LwIP/src/api/sockets.c;Middlewares/Third_Party/LwIP/src/api/tcpip.c;Middlewares/Third_Party/LwIP/src/core/altcp.c;Middlewares/Third_Party/LwIP/src/core/altcp_alloc.c;Middlewares/Third_Party/LwIP/src/core/altcp_tcp.c;Middlewares/Third_Party/LwIP/src/core/def.c;Middlewares/Third_Party/LwIP/src/core/dns.c;Middlewares/Third_Party/LwIP/src/core/inet_chksum.c;Middlewares/Third_Party/LwIP/src/core/init.c;Middlewares/Third_Party/LwIP/src/core/ip.c;Middlewares/Third_Party/LwIP/src/core/mem.c;Middlewares/Third_Party/LwIP/src/core/memp.c;Middlewares/Third_Party/LwIP/src/core/netif.c;Middlewares/Third_Party/LwIP/src/core/pbuf.c;Middlewares/Third_Party/LwIP/src/core/raw.c;Middlewares/Third_Party/LwIP/src/core/stats.c;Middlewares/Third_Party/LwIP/src/core/sys.c;Middlewares/Third_Party/LwIP/src/core/tcp.c;Middlewares/Third_Party/LwIP/src/core/tcp_in.c;Middlewares/Third_Party/LwIP/src/core/tcp_out.c;Middlewares/Third_Party/LwIP/src/core/timeouts.c;Middlewares/Third_Party/LwIP/src/core/udp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/autoip.c;Middlewares/Third_Party/LwIP/src/core/ipv4/dhcp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/etharp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/icmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/igmp.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv4/ip4_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/dhcp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ethip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/icmp6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/inet6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_addr.c;Middlewares/Third_Party/LwIP/src/core/ipv6/ip6_frag.c;Middlewares/Third_Party/LwIP/src/core/ipv6/mld6.c;Middlewares/Third_Party/LwIP/src/core/ipv6/nd6.c;Middlewares/Third_Party/LwIP/src/apps/mqtt/mqtt.c; -HeaderPath=Middlewares/Third_Party/LwIP/src/include;Middlewares/Third_Party/LwIP/system;Middlewares/Third_Party/LwIP/src/include;Middlewares/Third_Party/LwIP/system;Drivers/STM32F7xx_HAL_Driver/Inc;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy;Drivers/BSP/Components/lan8742;Middlewares/Third_Party/LwIP/src/include/netif/ppp;Middlewares/Third_Party/LwIP/src/apps/http;Drivers/CMSIS/Device/ST/STM32F7xx/Include;Middlewares/Third_Party/LwIP/src/include/lwip;Middlewares/Third_Party/LwIP/src/include/lwip/apps;Middlewares/Third_Party/LwIP/src/include/lwip/priv;Middlewares/Third_Party/LwIP/src/include/lwip/prot;Middlewares/Third_Party/LwIP/src/include/netif;Middlewares/Third_Party/LwIP/src/include/compat/posix;Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa;Middlewares/Third_Party/LwIP/src/include/compat/posix/net;Middlewares/Third_Party/LwIP/src/include/compat/posix/sys;Middlewares/Third_Party/LwIP/src/include/compat/stdc;Middlewares/Third_Party/LwIP/system/arch;Drivers/CMSIS/Include;LWIP/App;LWIP/Target;Core/Inc; -CDefines=USE_HAL_DRIVER;STM32F746xx;USE_HAL_DRIVER;USE_HAL_DRIVER; - diff --git a/project/Core/Inc/stm32f7xx_hal_conf.h b/project/Core/Inc/stm32f7xx_hal_conf.h index b7359dd..089c722 100644 --- a/project/Core/Inc/stm32f7xx_hal_conf.h +++ b/project/Core/Inc/stm32f7xx_hal_conf.h @@ -56,7 +56,7 @@ /* #define HAL_IWDG_MODULE_ENABLED */ /* #define HAL_LPTIM_MODULE_ENABLED */ #define HAL_LTDC_MODULE_ENABLED -/* #define HAL_QSPI_MODULE_ENABLED */ +#define HAL_QSPI_MODULE_ENABLED /* #define HAL_RNG_MODULE_ENABLED */ /* #define HAL_RTC_MODULE_ENABLED */ /* #define HAL_SAI_MODULE_ENABLED */ diff --git a/project/Core/Src/main.c b/project/Core/Src/main.c index e48dc63..898334c 100644 --- a/project/Core/Src/main.c +++ b/project/Core/Src/main.c @@ -46,6 +46,8 @@ DMA2D_HandleTypeDef hdma2d; LTDC_HandleTypeDef hltdc; +QSPI_HandleTypeDef hqspi; + UART_HandleTypeDef huart1; SDRAM_HandleTypeDef hsdram1; @@ -61,6 +63,7 @@ static void MX_LTDC_Init(void); static void MX_USART1_UART_Init(void); static void MX_DMA2D_Init(void); static void MX_FMC_Init(void); +static void MX_QUADSPI_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -103,6 +106,7 @@ int main(void) MX_DMA2D_Init(); MX_FMC_Init(); MX_LWIP_Init(); + MX_QUADSPI_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -293,6 +297,41 @@ static void MX_LTDC_Init(void) } +/** + * @brief QUADSPI Initialization Function + * @param None + * @retval None + */ +static void MX_QUADSPI_Init(void) +{ + + /* USER CODE BEGIN QUADSPI_Init 0 */ + + /* USER CODE END QUADSPI_Init 0 */ + + /* USER CODE BEGIN QUADSPI_Init 1 */ + + /* USER CODE END QUADSPI_Init 1 */ + /* QUADSPI parameter configuration*/ + hqspi.Instance = QUADSPI; + hqspi.Init.ClockPrescaler = 1; + hqspi.Init.FifoThreshold = 4; + hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE; + hqspi.Init.FlashSize = 16; + hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; + hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0; + hqspi.Init.FlashID = QSPI_FLASH_ID_1; + hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE; + if (HAL_QSPI_Init(&hqspi) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN QUADSPI_Init 2 */ + + /* USER CODE END QUADSPI_Init 2 */ + +} + /** * @brief USART1 Initialization Function * @param None diff --git a/project/Core/Src/stm32f7xx_hal_msp.c b/project/Core/Src/stm32f7xx_hal_msp.c index f4c0a89..d28d04f 100644 --- a/project/Core/Src/stm32f7xx_hal_msp.c +++ b/project/Core/Src/stm32f7xx_hal_msp.c @@ -301,6 +301,106 @@ void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc) } +/** +* @brief QSPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hqspi: QSPI handle pointer +* @retval None +*/ +void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hqspi->Instance==QUADSPI) + { + /* USER CODE BEGIN QUADSPI_MspInit 0 */ + + /* USER CODE END QUADSPI_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_QSPI_CLK_ENABLE(); + + __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**QUADSPI GPIO Configuration + PE2 ------> QUADSPI_BK1_IO2 + PB6 ------> QUADSPI_BK1_NCS + PB2 ------> QUADSPI_CLK + PD12 ------> QUADSPI_BK1_IO1 + PD13 ------> QUADSPI_BK1_IO3 + PD11 ------> QUADSPI_BK1_IO0 + */ + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN QUADSPI_MspInit 1 */ + + /* USER CODE END QUADSPI_MspInit 1 */ + } + +} + +/** +* @brief QSPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hqspi: QSPI handle pointer +* @retval None +*/ +void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef* hqspi) +{ + if(hqspi->Instance==QUADSPI) + { + /* USER CODE BEGIN QUADSPI_MspDeInit 0 */ + + /* USER CODE END QUADSPI_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_QSPI_CLK_DISABLE(); + + /**QUADSPI GPIO Configuration + PE2 ------> QUADSPI_BK1_IO2 + PB6 ------> QUADSPI_BK1_NCS + PB2 ------> QUADSPI_CLK + PD12 ------> QUADSPI_BK1_IO1 + PD13 ------> QUADSPI_BK1_IO3 + PD11 ------> QUADSPI_BK1_IO0 + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_2); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_2); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_11); + + /* USER CODE BEGIN QUADSPI_MspDeInit 1 */ + + /* USER CODE END QUADSPI_MspDeInit 1 */ + } + +} + /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example diff --git a/project/Drivers/BSP/Components/Common/Release_Notes.html b/project/Drivers/BSP/Components/Common/Release_Notes.html new file mode 100644 index 0000000..e173ae5 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/Release_Notes.html @@ -0,0 +1,759 @@ + + + + + + + + + + + + + + + + + + + + + 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/project/Drivers/BSP/Components/Common/accelero.h b/project/Drivers/BSP/Components/Common/accelero.h new file mode 100644 index 0000000..0de8232 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/accelero.h @@ -0,0 +1,143 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/audio.h b/project/Drivers/BSP/Components/Common/audio.h new file mode 100644 index 0000000..8b93673 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/audio.h @@ -0,0 +1,122 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/camera.h b/project/Drivers/BSP/Components/Common/camera.h new file mode 100644 index 0000000..c64f32f --- /dev/null +++ b/project/Drivers/BSP/Components/Common/camera.h @@ -0,0 +1,141 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/epd.h b/project/Drivers/BSP/Components/Common/epd.h new file mode 100644 index 0000000..a06be10 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/epd.h @@ -0,0 +1,115 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/gyro.h b/project/Drivers/BSP/Components/Common/gyro.h new file mode 100644 index 0000000..462928c --- /dev/null +++ b/project/Drivers/BSP/Components/Common/gyro.h @@ -0,0 +1,145 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/idd.h b/project/Drivers/BSP/Components/Common/idd.h new file mode 100644 index 0000000..1b8a762 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/idd.h @@ -0,0 +1,168 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/io.h b/project/Drivers/BSP/Components/Common/io.h new file mode 100644 index 0000000..b33c00e --- /dev/null +++ b/project/Drivers/BSP/Components/Common/io.h @@ -0,0 +1,150 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/lcd.h b/project/Drivers/BSP/Components/Common/lcd.h new file mode 100644 index 0000000..9ff398b --- /dev/null +++ b/project/Drivers/BSP/Components/Common/lcd.h @@ -0,0 +1,114 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/magneto.h b/project/Drivers/BSP/Components/Common/magneto.h new file mode 100644 index 0000000..dc27dd0 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/magneto.h @@ -0,0 +1,125 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/ts.h b/project/Drivers/BSP/Components/Common/ts.h new file mode 100644 index 0000000..7370596 --- /dev/null +++ b/project/Drivers/BSP/Components/Common/ts.h @@ -0,0 +1,107 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/Common/tsensor.h b/project/Drivers/BSP/Components/Common/tsensor.h new file mode 100644 index 0000000..4ea0ffc --- /dev/null +++ b/project/Drivers/BSP/Components/Common/tsensor.h @@ -0,0 +1,118 @@ +/** + ****************************************************************************** + * @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/project/Drivers/BSP/Components/ft5336/Release_Notes.html b/project/Drivers/BSP/Components/ft5336/Release_Notes.html new file mode 100644 index 0000000..46e33a5 --- /dev/null +++ b/project/Drivers/BSP/Components/ft5336/Release_Notes.html @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + Release Notes for FT5336GQQ Component Driver + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for FT5336GQQ Component Driver

+

Copyright +2015 STMicroelectronics

+

+
+

 

+ + + + + + +
+ + +

Update History

V1.0.1 / 07-April-2017

Main Changes

  • Update comments to be used for PDSC generation

V1.0.0 / 25-June-2015

+ + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • First official release of FT5336 TS driver
  • +

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/project/Drivers/BSP/Components/ft5336/ft5336.c b/project/Drivers/BSP/Components/ft5336/ft5336.c new file mode 100644 index 0000000..1cd7034 --- /dev/null +++ b/project/Drivers/BSP/Components/ft5336/ft5336.c @@ -0,0 +1,623 @@ +/** + ****************************************************************************** + * @file ft5336.c + * @author MCD Application Team + * @brief This file provides a set of functions needed to manage the FT5336 + * touch screen devices. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "ft5336.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup Component + * @{ + */ + +/** @defgroup FT5336 + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ + +/** @defgroup FT5336_Private_Types_Definitions + * @{ + */ + +/* Private define ------------------------------------------------------------*/ + +/** @defgroup FT5336_Private_Defines + * @{ + */ + +/* Private macro -------------------------------------------------------------*/ + +/** @defgroup FT5336_Private_Macros + * @{ + */ + +/* Private variables ---------------------------------------------------------*/ + +/** @defgroup FT5336_Private_Variables + * @{ + */ + +/* Touch screen driver structure initialization */ +TS_DrvTypeDef ft5336_ts_drv = +{ + ft5336_Init, + ft5336_ReadID, + ft5336_Reset, + + ft5336_TS_Start, + ft5336_TS_DetectTouch, + ft5336_TS_GetXY, + + ft5336_TS_EnableIT, + ft5336_TS_ClearIT, + ft5336_TS_ITStatus, + ft5336_TS_DisableIT + +}; + +/* Global ft5336 handle */ +static ft5336_handle_TypeDef ft5336_handle = { FT5336_I2C_NOT_INITIALIZED, 0, 0}; + +/** + * @} + */ + +/** @defgroup ft5336_Private_Function_Prototypes + * @{ + */ + +/* Private functions prototypes-----------------------------------------------*/ + +/** + * @brief Return the status of I2C was initialized or not. + * @param None. + * @retval : I2C initialization status. + */ +static uint8_t ft5336_Get_I2C_InitializedStatus(void); + +/** + * @brief I2C initialize if needed. + * @param None. + * @retval : None. + */ +static void ft5336_I2C_InitializeIfRequired(void); + +/** + * @brief Basic static configuration of TouchScreen + * @param DeviceAddr: FT5336 Device address for communication on I2C Bus. + * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK. + */ +static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr); + +/** @defgroup ft5336_Private_Functions + * @{ + */ + +/** @defgroup ft5336_Public_Function_Body + * @{ + */ + +/* Public functions bodies-----------------------------------------------*/ + + +/** + * @brief Initialize the ft5336 communication bus + * from MCU to FT5336 : ie I2C channel initialization (if required). + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval None + */ +void ft5336_Init(uint16_t DeviceAddr) +{ + /* Wait at least 200ms after power up before accessing registers + * Trsi timing (Time of starting to report point after resetting) from FT5336GQQ datasheet */ + TS_IO_Delay(200); + + /* Initialize I2C link if needed */ + ft5336_I2C_InitializeIfRequired(); +} + +/** + * @brief Software Reset the ft5336. + * @note : Not applicable to FT5336. + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval None + */ +void ft5336_Reset(uint16_t DeviceAddr) +{ + /* Do nothing */ + /* No software reset sequence available in FT5336 IC */ +} + +/** + * @brief Read the ft5336 device ID, pre initialize I2C in case of need to be + * able to read the FT5336 device ID, and verify this is a FT5336. + * @param DeviceAddr: I2C FT5336 Slave address. + * @retval The Device ID (two bytes). + */ +uint16_t ft5336_ReadID(uint16_t DeviceAddr) +{ + volatile uint8_t ucReadId = 0; + uint8_t nbReadAttempts = 0; + uint8_t bFoundDevice = 0; /* Device not found by default */ + + /* Initialize I2C link if needed */ + ft5336_I2C_InitializeIfRequired(); + + /* At maximum 4 attempts to read ID : exit at first finding of the searched device ID */ + for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++) + { + /* Read register FT5336_CHIP_ID_REG as DeviceID detection */ + ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG); + + /* Found the searched device ID ? */ + if(ucReadId == FT5336_ID_VALUE) + { + /* Set device as found */ + bFoundDevice = 1; + } + } + + /* Return the device ID value */ + return (ucReadId); +} + +/** + * @brief Configures the touch Screen IC device to start detecting touches + * @param DeviceAddr: Device address on communication Bus (I2C slave address). + * @retval None. + */ +void ft5336_TS_Start(uint16_t DeviceAddr) +{ + /* Minimum static configuration of FT5336 */ + FT5336_ASSERT(ft5336_TS_Configure(DeviceAddr)); + + /* By default set FT5336 IC in Polling mode : no INT generation on FT5336 for new touch available */ + /* Note TS_INT is active low */ + ft5336_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 ft5336_TS_DetectTouch(uint16_t DeviceAddr) +{ + volatile uint8_t nbTouch = 0; + + /* Read register FT5336_TD_STAT_REG to check number of touches detection */ + nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG); + nbTouch &= FT5336_TD_STAT_MASK; + + if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH) + { + /* If invalid number of touch detected, set it to zero */ + nbTouch = 0; + } + + /* Update ft5336 driver internal global : current number of active touches */ + ft5336_handle.currActiveTouchNb = nbTouch; + + /* Reset current active touch index on which to work on */ + ft5336_handle.currActiveTouchIdx = 0; + + return(nbTouch); +} + +/** + * @brief Get the touch screen X and Y positions values + * Manage multi touch thanks to touch Index global + * variable 'ft5336_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 ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y) +{ + volatile uint8_t ucReadData = 0; + static uint16_t coord; + uint8_t regAddressXLow = 0; + uint8_t regAddressXHigh = 0; + uint8_t regAddressYLow = 0; + uint8_t regAddressYHigh = 0; + + if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) + { + switch(ft5336_handle.currActiveTouchIdx) + { + case 0 : + regAddressXLow = FT5336_P1_XL_REG; + regAddressXHigh = FT5336_P1_XH_REG; + regAddressYLow = FT5336_P1_YL_REG; + regAddressYHigh = FT5336_P1_YH_REG; + break; + + case 1 : + regAddressXLow = FT5336_P2_XL_REG; + regAddressXHigh = FT5336_P2_XH_REG; + regAddressYLow = FT5336_P2_YL_REG; + regAddressYHigh = FT5336_P2_YH_REG; + break; + + case 2 : + regAddressXLow = FT5336_P3_XL_REG; + regAddressXHigh = FT5336_P3_XH_REG; + regAddressYLow = FT5336_P3_YL_REG; + regAddressYHigh = FT5336_P3_YH_REG; + break; + + case 3 : + regAddressXLow = FT5336_P4_XL_REG; + regAddressXHigh = FT5336_P4_XH_REG; + regAddressYLow = FT5336_P4_YL_REG; + regAddressYHigh = FT5336_P4_YH_REG; + break; + + case 4 : + regAddressXLow = FT5336_P5_XL_REG; + regAddressXHigh = FT5336_P5_XH_REG; + regAddressYLow = FT5336_P5_YL_REG; + regAddressYHigh = FT5336_P5_YH_REG; + break; + + case 5 : + regAddressXLow = FT5336_P6_XL_REG; + regAddressXHigh = FT5336_P6_XH_REG; + regAddressYLow = FT5336_P6_YL_REG; + regAddressYHigh = FT5336_P6_YH_REG; + break; + + case 6 : + regAddressXLow = FT5336_P7_XL_REG; + regAddressXHigh = FT5336_P7_XH_REG; + regAddressYLow = FT5336_P7_YL_REG; + regAddressYHigh = FT5336_P7_YH_REG; + break; + + case 7 : + regAddressXLow = FT5336_P8_XL_REG; + regAddressXHigh = FT5336_P8_XH_REG; + regAddressYLow = FT5336_P8_YL_REG; + regAddressYHigh = FT5336_P8_YH_REG; + break; + + case 8 : + regAddressXLow = FT5336_P9_XL_REG; + regAddressXHigh = FT5336_P9_XH_REG; + regAddressYLow = FT5336_P9_YL_REG; + regAddressYHigh = FT5336_P9_YH_REG; + break; + + case 9 : + regAddressXLow = FT5336_P10_XL_REG; + regAddressXHigh = FT5336_P10_XH_REG; + regAddressYLow = FT5336_P10_YL_REG; + regAddressYHigh = FT5336_P10_YH_REG; + break; + + default : + break; + + } /* end switch(ft5336_handle.currActiveTouchIdx) */ + + /* Read low part of X position */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow); + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + + /* Read high part of X position */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh); + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + + /* Send back ready X position to caller */ + *X = coord; + + /* Read low part of Y position */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow); + coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT; + + /* Read high part of Y position */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh); + coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8; + + /* Send back ready Y position to caller */ + *Y = coord; + + ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */ + + } /* of if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) */ +} + +/** + * @brief Configure the FT5336 device to generate IT on given INT pin + * connected to MCU as EXTI. + * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336). + * @retval None + */ +void ft5336_TS_EnableIT(uint16_t DeviceAddr) +{ + uint8_t regValue = 0; + regValue = (FT5336_G_MODE_INTERRUPT_TRIGGER & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT; + + /* Set interrupt trigger mode in FT5336_GMODE_REG */ + TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue); +} + +/** + * @brief Configure the FT5336 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 FT5336). + * @retval None + */ +void ft5336_TS_DisableIT(uint16_t DeviceAddr) +{ + uint8_t regValue = 0; + regValue = (FT5336_G_MODE_INTERRUPT_POLLING & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT; + + /* Set interrupt polling mode in FT5336_GMODE_REG */ + TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue); +} + +/** + * @brief Get IT status from FT5336 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 FT5336. + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval TS interrupts status : always return 0 here + */ +uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr) +{ + /* Always return 0 as feature not applicable to FT5336 */ + return 0; +} + +/** + * @brief Clear IT status in FT5336 interrupt status clear registers + * Should be called Following an EXTI coming to the MCU. + * @note : This feature is not applicable to FT5336. + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval None + */ +void ft5336_TS_ClearIT(uint16_t DeviceAddr) +{ + /* Nothing to be done here for FT5336 */ +} + +/**** 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 FT5336). + * @param pGestureId : Pointer to get last touch gesture Identification. + * @retval None. + */ +void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId) +{ + volatile uint8_t ucReadData = 0; + + ucReadData = TS_IO_Read(DeviceAddr, FT5336_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 FT5336). + * @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 ft5336_TS_GetTouchInfo(uint16_t DeviceAddr, + uint32_t touchIdx, + uint32_t * pWeight, + uint32_t * pArea, + uint32_t * pEvent) +{ + volatile uint8_t ucReadData = 0; + uint8_t regAddressXHigh = 0; + uint8_t regAddressPWeight = 0; + uint8_t regAddressPMisc = 0; + + if(touchIdx < ft5336_handle.currActiveTouchNb) + { + switch(touchIdx) + { + case 0 : + regAddressXHigh = FT5336_P1_XH_REG; + regAddressPWeight = FT5336_P1_WEIGHT_REG; + regAddressPMisc = FT5336_P1_MISC_REG; + break; + + case 1 : + regAddressXHigh = FT5336_P2_XH_REG; + regAddressPWeight = FT5336_P2_WEIGHT_REG; + regAddressPMisc = FT5336_P2_MISC_REG; + break; + + case 2 : + regAddressXHigh = FT5336_P3_XH_REG; + regAddressPWeight = FT5336_P3_WEIGHT_REG; + regAddressPMisc = FT5336_P3_MISC_REG; + break; + + case 3 : + regAddressXHigh = FT5336_P4_XH_REG; + regAddressPWeight = FT5336_P4_WEIGHT_REG; + regAddressPMisc = FT5336_P4_MISC_REG; + break; + + case 4 : + regAddressXHigh = FT5336_P5_XH_REG; + regAddressPWeight = FT5336_P5_WEIGHT_REG; + regAddressPMisc = FT5336_P5_MISC_REG; + break; + + case 5 : + regAddressXHigh = FT5336_P6_XH_REG; + regAddressPWeight = FT5336_P6_WEIGHT_REG; + regAddressPMisc = FT5336_P6_MISC_REG; + break; + + case 6 : + regAddressXHigh = FT5336_P7_XH_REG; + regAddressPWeight = FT5336_P7_WEIGHT_REG; + regAddressPMisc = FT5336_P7_MISC_REG; + break; + + case 7 : + regAddressXHigh = FT5336_P8_XH_REG; + regAddressPWeight = FT5336_P8_WEIGHT_REG; + regAddressPMisc = FT5336_P8_MISC_REG; + break; + + case 8 : + regAddressXHigh = FT5336_P9_XH_REG; + regAddressPWeight = FT5336_P9_WEIGHT_REG; + regAddressPMisc = FT5336_P9_MISC_REG; + break; + + case 9 : + regAddressXHigh = FT5336_P10_XH_REG; + regAddressPWeight = FT5336_P10_WEIGHT_REG; + regAddressPMisc = FT5336_P10_MISC_REG; + break; + + default : + break; + + } /* end switch(touchIdx) */ + + /* Read Event Id of touch index */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh); + * pEvent = (ucReadData & FT5336_TOUCH_EVT_FLAG_MASK) >> FT5336_TOUCH_EVT_FLAG_SHIFT; + + /* Read weight of touch index */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressPWeight); + * pWeight = (ucReadData & FT5336_TOUCH_WEIGHT_MASK) >> FT5336_TOUCH_WEIGHT_SHIFT; + + /* Read area of touch index */ + ucReadData = TS_IO_Read(DeviceAddr, regAddressPMisc); + * pArea = (ucReadData & FT5336_TOUCH_AREA_MASK) >> FT5336_TOUCH_AREA_SHIFT; + + } /* of if(touchIdx < ft5336_handle.currActiveTouchNb) */ +} + +#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ + +/** @defgroup ft5336_Static_Function_Body + * @{ + */ + +/* Static functions bodies-----------------------------------------------*/ + + +/** + * @brief Return the status of I2C was initialized or not. + * @param None. + * @retval : I2C initialization status. + */ +static uint8_t ft5336_Get_I2C_InitializedStatus(void) +{ + return(ft5336_handle.i2cInitialized); +} + +/** + * @brief I2C initialize if needed. + * @param None. + * @retval : None. + */ +static void ft5336_I2C_InitializeIfRequired(void) +{ + if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED) + { + /* Initialize TS IO BUS layer (I2C) */ + TS_IO_Init(); + + /* Set state to initialized */ + ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED; + } +} + +/** + * @brief Basic static configuration of TouchScreen + * @param DeviceAddr: FT5336 Device address for communication on I2C Bus. + * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK. + */ +static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr) +{ + uint32_t status = FT5336_STATUS_OK; + + /* Nothing special to be done for FT5336 */ + + return(status); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Drivers/BSP/Components/ft5336/ft5336.h b/project/Drivers/BSP/Components/ft5336/ft5336.h new file mode 100644 index 0000000..2a756af --- /dev/null +++ b/project/Drivers/BSP/Components/ft5336/ft5336.h @@ -0,0 +1,538 @@ +/** + ****************************************************************************** + * @file ft5336.h + * @author MCD Application Team + * @brief This file contains all the functions prototypes for the + * ft5336.c 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 __FT5336_H +#define __FT5336_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Set Multi-touch as supported */ +#if !defined(TS_MONO_TOUCH_SUPPORTED) +#define TS_MULTI_TOUCH_SUPPORTED 1 +#endif /* TS_MONO_TOUCH_SUPPORTED */ + +/* Includes ------------------------------------------------------------------*/ +#include "../Common/ts.h" + +/* Macros --------------------------------------------------------------------*/ + +#if defined(FT5336_ENABLE_ASSERT) +/* Assert activated */ +#define FT5336_ASSERT(__condition__) do { if(__condition__) \ + { \ + while(1); \ + } \ + }while(0) +#else +/* Assert not activated : macro has no effect */ +#define FT5336_ASSERT(__condition__) do { if(__condition__) \ + { \ + ; \ + } \ + }while(0) +#endif /* FT5336_ENABLE_ASSERT == 1 */ + +/** @typedef ft5336_handle_TypeDef + * ft5336 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; + +} ft5336_handle_TypeDef; + + /** @addtogroup BSP + * @{ + */ + + /** @addtogroup Component + * @{ + */ + + /** @defgroup FT5336 + * @{ + */ + + /* Exported types ------------------------------------------------------------*/ + + /** @defgroup FT5336_Exported_Types + * @{ + */ + + /* Exported constants --------------------------------------------------------*/ + + /** @defgroup FT5336_Exported_Constants + * @{ + */ + + /* I2C Slave address of touchscreen FocalTech FT5336 */ +#define FT5336_I2C_SLAVE_ADDRESS ((uint8_t)0x70) + + /* Maximum border values of the touchscreen pad */ +#define FT5336_MAX_WIDTH ((uint16_t)480) /* Touchscreen pad max width */ +#define FT5336_MAX_HEIGHT ((uint16_t)272) /* Touchscreen pad max height */ + + /* Possible values of driver functions return status */ +#define FT5336_STATUS_OK ((uint8_t)0x00) +#define FT5336_STATUS_NOT_OK ((uint8_t)0x01) + + /* Possible values of global variable 'TS_I2C_Initialized' */ +#define FT5336_I2C_NOT_INITIALIZED ((uint8_t)0x00) +#define FT5336_I2C_INITIALIZED ((uint8_t)0x01) + + /* Max detectable simultaneous touches */ +#define FT5336_MAX_DETECTABLE_TOUCH ((uint8_t)0x05) + + /** + * @brief : Definitions for FT5336 I2C register addresses on 8 bit + **/ + + /* Current mode register of the FT5336 (R/W) */ +#define FT5336_DEV_MODE_REG ((uint8_t)0x00) + + /* Possible values of FT5336_DEV_MODE_REG */ +#define FT5336_DEV_MODE_WORKING ((uint8_t)0x00) +#define FT5336_DEV_MODE_FACTORY ((uint8_t)0x04) + +#define FT5336_DEV_MODE_MASK ((uint8_t)0x07) +#define FT5336_DEV_MODE_SHIFT ((uint8_t)0x04) + + /* Gesture ID register */ +#define FT5336_GEST_ID_REG ((uint8_t)0x01) + + /* Possible values of FT5336_GEST_ID_REG */ +#define FT5336_GEST_ID_NO_GESTURE ((uint8_t)0x00) +#define FT5336_GEST_ID_MOVE_UP ((uint8_t)0x10) +#define FT5336_GEST_ID_MOVE_RIGHT ((uint8_t)0x14) +#define FT5336_GEST_ID_MOVE_DOWN ((uint8_t)0x18) +#define FT5336_GEST_ID_MOVE_LEFT ((uint8_t)0x1C) +#define FT5336_GEST_ID_SINGLE_CLICK ((uint8_t)0x20) +#define FT5336_GEST_ID_DOUBLE_CLICK ((uint8_t)0x22) +#define FT5336_GEST_ID_ROTATE_CLOCKWISE ((uint8_t)0x28) +#define FT5336_GEST_ID_ROTATE_C_CLOCKWISE ((uint8_t)0x29) +#define FT5336_GEST_ID_ZOOM_IN ((uint8_t)0x40) +#define FT5336_GEST_ID_ZOOM_OUT ((uint8_t)0x49) + + /* Touch Data Status register : gives number of active touch points (0..5) */ +#define FT5336_TD_STAT_REG ((uint8_t)0x02) + + /* Values related to FT5336_TD_STAT_REG */ +#define FT5336_TD_STAT_MASK ((uint8_t)0x0F) +#define FT5336_TD_STAT_SHIFT ((uint8_t)0x00) + + /* Values Pn_XH and Pn_YH related */ +#define FT5336_TOUCH_EVT_FLAG_PRESS_DOWN ((uint8_t)0x00) +#define FT5336_TOUCH_EVT_FLAG_LIFT_UP ((uint8_t)0x01) +#define FT5336_TOUCH_EVT_FLAG_CONTACT ((uint8_t)0x02) +#define FT5336_TOUCH_EVT_FLAG_NO_EVENT ((uint8_t)0x03) + +#define FT5336_TOUCH_EVT_FLAG_SHIFT ((uint8_t)0x06) +#define FT5336_TOUCH_EVT_FLAG_MASK ((uint8_t)(3 << FT5336_TOUCH_EVT_FLAG_SHIFT)) + +#define FT5336_TOUCH_POS_MSB_MASK ((uint8_t)0x0F) +#define FT5336_TOUCH_POS_MSB_SHIFT ((uint8_t)0x00) + + /* Values Pn_XL and Pn_YL related */ +#define FT5336_TOUCH_POS_LSB_MASK ((uint8_t)0xFF) +#define FT5336_TOUCH_POS_LSB_SHIFT ((uint8_t)0x00) + +#define FT5336_P1_XH_REG ((uint8_t)0x03) +#define FT5336_P1_XL_REG ((uint8_t)0x04) +#define FT5336_P1_YH_REG ((uint8_t)0x05) +#define FT5336_P1_YL_REG ((uint8_t)0x06) + +/* Touch Pressure register value (R) */ +#define FT5336_P1_WEIGHT_REG ((uint8_t)0x07) + +/* Values Pn_WEIGHT related */ +#define FT5336_TOUCH_WEIGHT_MASK ((uint8_t)0xFF) +#define FT5336_TOUCH_WEIGHT_SHIFT ((uint8_t)0x00) + +/* Touch area register */ +#define FT5336_P1_MISC_REG ((uint8_t)0x08) + +/* Values related to FT5336_Pn_MISC_REG */ +#define FT5336_TOUCH_AREA_MASK ((uint8_t)(0x04 << 4)) +#define FT5336_TOUCH_AREA_SHIFT ((uint8_t)0x04) + +#define FT5336_P2_XH_REG ((uint8_t)0x09) +#define FT5336_P2_XL_REG ((uint8_t)0x0A) +#define FT5336_P2_YH_REG ((uint8_t)0x0B) +#define FT5336_P2_YL_REG ((uint8_t)0x0C) +#define FT5336_P2_WEIGHT_REG ((uint8_t)0x0D) +#define FT5336_P2_MISC_REG ((uint8_t)0x0E) + +#define FT5336_P3_XH_REG ((uint8_t)0x0F) +#define FT5336_P3_XL_REG ((uint8_t)0x10) +#define FT5336_P3_YH_REG ((uint8_t)0x11) +#define FT5336_P3_YL_REG ((uint8_t)0x12) +#define FT5336_P3_WEIGHT_REG ((uint8_t)0x13) +#define FT5336_P3_MISC_REG ((uint8_t)0x14) + +#define FT5336_P4_XH_REG ((uint8_t)0x15) +#define FT5336_P4_XL_REG ((uint8_t)0x16) +#define FT5336_P4_YH_REG ((uint8_t)0x17) +#define FT5336_P4_YL_REG ((uint8_t)0x18) +#define FT5336_P4_WEIGHT_REG ((uint8_t)0x19) +#define FT5336_P4_MISC_REG ((uint8_t)0x1A) + +#define FT5336_P5_XH_REG ((uint8_t)0x1B) +#define FT5336_P5_XL_REG ((uint8_t)0x1C) +#define FT5336_P5_YH_REG ((uint8_t)0x1D) +#define FT5336_P5_YL_REG ((uint8_t)0x1E) +#define FT5336_P5_WEIGHT_REG ((uint8_t)0x1F) +#define FT5336_P5_MISC_REG ((uint8_t)0x20) + +#define FT5336_P6_XH_REG ((uint8_t)0x21) +#define FT5336_P6_XL_REG ((uint8_t)0x22) +#define FT5336_P6_YH_REG ((uint8_t)0x23) +#define FT5336_P6_YL_REG ((uint8_t)0x24) +#define FT5336_P6_WEIGHT_REG ((uint8_t)0x25) +#define FT5336_P6_MISC_REG ((uint8_t)0x26) + +#define FT5336_P7_XH_REG ((uint8_t)0x27) +#define FT5336_P7_XL_REG ((uint8_t)0x28) +#define FT5336_P7_YH_REG ((uint8_t)0x29) +#define FT5336_P7_YL_REG ((uint8_t)0x2A) +#define FT5336_P7_WEIGHT_REG ((uint8_t)0x2B) +#define FT5336_P7_MISC_REG ((uint8_t)0x2C) + +#define FT5336_P8_XH_REG ((uint8_t)0x2D) +#define FT5336_P8_XL_REG ((uint8_t)0x2E) +#define FT5336_P8_YH_REG ((uint8_t)0x2F) +#define FT5336_P8_YL_REG ((uint8_t)0x30) +#define FT5336_P8_WEIGHT_REG ((uint8_t)0x31) +#define FT5336_P8_MISC_REG ((uint8_t)0x32) + +#define FT5336_P9_XH_REG ((uint8_t)0x33) +#define FT5336_P9_XL_REG ((uint8_t)0x34) +#define FT5336_P9_YH_REG ((uint8_t)0x35) +#define FT5336_P9_YL_REG ((uint8_t)0x36) +#define FT5336_P9_WEIGHT_REG ((uint8_t)0x37) +#define FT5336_P9_MISC_REG ((uint8_t)0x38) + +#define FT5336_P10_XH_REG ((uint8_t)0x39) +#define FT5336_P10_XL_REG ((uint8_t)0x3A) +#define FT5336_P10_YH_REG ((uint8_t)0x3B) +#define FT5336_P10_YL_REG ((uint8_t)0x3C) +#define FT5336_P10_WEIGHT_REG ((uint8_t)0x3D) +#define FT5336_P10_MISC_REG ((uint8_t)0x3E) + + /* Threshold for touch detection */ +#define FT5336_TH_GROUP_REG ((uint8_t)0x80) + + /* Values FT5336_TH_GROUP_REG : threshold related */ +#define FT5336_THRESHOLD_MASK ((uint8_t)0xFF) +#define FT5336_THRESHOLD_SHIFT ((uint8_t)0x00) + + /* Filter function coefficients */ +#define FT5336_TH_DIFF_REG ((uint8_t)0x85) + + /* Control register */ +#define FT5336_CTRL_REG ((uint8_t)0x86) + + /* Values related to FT5336_CTRL_REG */ + + /* Will keep the Active mode when there is no touching */ +#define FT5336_CTRL_KEEP_ACTIVE_MODE ((uint8_t)0x00) + + /* Switching from Active mode to Monitor mode automatically when there is no touching */ +#define FT5336_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE ((uint8_t)0x01 + + /* The time period of switching from Active mode to Monitor mode when there is no touching */ +#define FT5336_TIMEENTERMONITOR_REG ((uint8_t)0x87) + + /* Report rate in Active mode */ +#define FT5336_PERIODACTIVE_REG ((uint8_t)0x88) + + /* Report rate in Monitor mode */ +#define FT5336_PERIODMONITOR_REG ((uint8_t)0x89) + + /* The value of the minimum allowed angle while Rotating gesture mode */ +#define FT5336_RADIAN_VALUE_REG ((uint8_t)0x91) + + /* Maximum offset while Moving Left and Moving Right gesture */ +#define FT5336_OFFSET_LEFT_RIGHT_REG ((uint8_t)0x92) + + /* Maximum offset while Moving Up and Moving Down gesture */ +#define FT5336_OFFSET_UP_DOWN_REG ((uint8_t)0x93) + + /* Minimum distance while Moving Left and Moving Right gesture */ +#define FT5336_DISTANCE_LEFT_RIGHT_REG ((uint8_t)0x94) + + /* Minimum distance while Moving Up and Moving Down gesture */ +#define FT5336_DISTANCE_UP_DOWN_REG ((uint8_t)0x95) + + /* Maximum distance while Zoom In and Zoom Out gesture */ +#define FT5336_DISTANCE_ZOOM_REG ((uint8_t)0x96) + + /* High 8-bit of LIB Version info */ +#define FT5336_LIB_VER_H_REG ((uint8_t)0xA1) + + /* Low 8-bit of LIB Version info */ +#define FT5336_LIB_VER_L_REG ((uint8_t)0xA2) + + /* Chip Selecting */ +#define FT5336_CIPHER_REG ((uint8_t)0xA3) + + /* Interrupt mode register (used when in interrupt mode) */ +#define FT5336_GMODE_REG ((uint8_t)0xA4) + +#define FT5336_G_MODE_INTERRUPT_MASK ((uint8_t)0x03) +#define FT5336_G_MODE_INTERRUPT_SHIFT ((uint8_t)0x00) + + /* Possible values of FT5336_GMODE_REG */ +#define FT5336_G_MODE_INTERRUPT_POLLING ((uint8_t)0x00) +#define FT5336_G_MODE_INTERRUPT_TRIGGER ((uint8_t)0x01) + + /* Current power mode the FT5336 system is in (R) */ +#define FT5336_PWR_MODE_REG ((uint8_t)0xA5) + + /* FT5336 firmware version */ +#define FT5336_FIRMID_REG ((uint8_t)0xA6) + + /* FT5336 Chip identification register */ +#define FT5336_CHIP_ID_REG ((uint8_t)0xA8) + + /* Possible values of FT5336_CHIP_ID_REG */ +#define FT5336_ID_VALUE ((uint8_t)0x51) + + /* Release code version */ +#define FT5336_RELEASE_CODE_ID_REG ((uint8_t)0xAF) + + /* Current operating mode the FT5336 system is in (R) */ +#define FT5336_STATE_REG ((uint8_t)0xBC) + + /** + * @} + */ + + /* Exported macro ------------------------------------------------------------*/ + + /** @defgroup ft5336_Exported_Macros + * @{ + */ + + /* Exported functions --------------------------------------------------------*/ + + /** @defgroup ft5336_Exported_Functions + * @{ + */ + + /** + * @brief ft5336 Control functions + */ + + +/** + * @brief Initialize the ft5336 communication bus + * from MCU to FT5336 : ie I2C channel initialization (if required). + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval None + */ +void ft5336_Init(uint16_t DeviceAddr); + +/** + * @brief Software Reset the ft5336. + * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336). + * @retval None + */ +void ft5336_Reset(uint16_t DeviceAddr); + +/** + * @brief Read the ft5336 device ID, pre initialize I2C in case of need to be + * able to read the FT5336 device ID, and verify this is a FT5336. + * @param DeviceAddr: I2C FT5336 Slave address. + * @retval The Device ID (two bytes). + */ +uint16_t ft5336_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 ft5336_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 ft5336_TS_DetectTouch(uint16_t DeviceAddr); + +/** + * @brief Get the touch screen X and Y positions values + * Manage multi touch thanks to touch Index global + * variable 'ft5336_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 ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y); + +/** + * @brief Configure the FT5336 device to generate IT on given INT pin + * connected to MCU as EXTI. + * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336). + * @retval None + */ +void ft5336_TS_EnableIT(uint16_t DeviceAddr); + +/** + * @brief Configure the FT5336 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 FT5336). + * @retval None + */ +void ft5336_TS_DisableIT(uint16_t DeviceAddr); + +/** + * @brief Get IT status from FT5336 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 FT5336). + * @retval TS interrupts status + */ +uint8_t ft5336_TS_ITStatus (uint16_t DeviceAddr); + +/** + * @brief Clear IT status in FT5336 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 FT5336). + * @retval TS interrupts status + */ +void ft5336_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 FT5336). + * @param pGestureId : Pointer to get last touch gesture Identification. + * @retval None. + */ +void ft5336_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 FT5336). + * @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 ft5336_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 ft5336_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 void TS_IO_Delay(uint32_t Delay); + + /** + * @} + */ + + /* Imported global variables --------------------------------------------------------*/ + + /** @defgroup ft5336_Imported_Globals + * @{ + */ + + +/* Touch screen driver structure */ +extern TS_DrvTypeDef ft5336_ts_drv; + + /** + * @} + */ + +#ifdef __cplusplus +} +#endif +#endif /* __FT5336_H */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Drivers/BSP/Components/n25q128a/Release_Notes.html b/project/Drivers/BSP/Components/n25q128a/Release_Notes.html new file mode 100644 index 0000000..379ba68 --- /dev/null +++ b/project/Drivers/BSP/Components/n25q128a/Release_Notes.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + Release Notes for STM32 BSP Components Drivers + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for N25Q128A Component Driver

+

Copyright +2015 STMicroelectronics

+

+
+

 

+ + + + + + +

Update History

V1.0.1 +/ 25-August-2017

+ +

Main +Changes

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

V1.0.0 +/ 29-May-2015

+

Main +Changes

+ + + + + + + + + +
  • First official +release of N25Q128A QuadSPI Flash Component driver

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/project/Drivers/BSP/Components/n25q128a/n25q128a.h b/project/Drivers/BSP/Components/n25q128a/n25q128a.h new file mode 100644 index 0000000..977fa79 --- /dev/null +++ b/project/Drivers/BSP/Components/n25q128a/n25q128a.h @@ -0,0 +1,217 @@ +/** + ****************************************************************************** + * @file n25q128a.h + * @author MCD Application Team + * @brief This file contains all the description of the N25Q128A QSPI memory. + ****************************************************************************** + * @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 __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 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Drivers/BSP/Components/rk043fn48h/Release_Notes.html b/project/Drivers/BSP/Components/rk043fn48h/Release_Notes.html new file mode 100644 index 0000000..c970771 --- /dev/null +++ b/project/Drivers/BSP/Components/rk043fn48h/Release_Notes.html @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + Release Notes for RK043FN48H-CT672B LCD Component Driver + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for RK043FN48H-CT672B LCD Component Driver

+

Copyright +2015 STMicroelectronics

+

+
+

 

+ + + + + + +
+ + +

Update History

V1.0.1 +/ 02-June-2017

+ +

Main +Changes

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

V1.0.0 / 25-June-2015

+ + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • + + First official release of RK043FN48H LCD component driver
  • +

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/project/Drivers/BSP/Components/rk043fn48h/rk043fn48h.h b/project/Drivers/BSP/Components/rk043fn48h/rk043fn48h.h new file mode 100644 index 0000000..b831915 --- /dev/null +++ b/project/Drivers/BSP/Components/rk043fn48h/rk043fn48h.h @@ -0,0 +1,119 @@ +/** + ****************************************************************************** + * @file rk043fn48h.h + * @author MCD Application Team + * @brief This file contains all the constants parameters for the RK043FN48H-CT672B + * LCD component. + ****************************************************************************** + * @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 __RK043FN48H_H +#define __RK043FN48H_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup Components + * @{ + */ + +/** @addtogroup rk043fn48h + * @{ + */ + +/** @defgroup RK043FN48H_Exported_Types + * @{ + */ + +/** + * @} + */ + +/** @defgroup RK043FN48H_Exported_Constants + * @{ + */ + +/** + * @brief RK043FN48H Size + */ +#define RK043FN48H_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */ +#define RK043FN48H_HEIGHT ((uint16_t)272) /* LCD PIXEL HEIGHT */ + +/** + * @brief RK043FN48H Timing + */ +#define RK043FN48H_HSYNC ((uint16_t)41) /* Horizontal synchronization */ +#define RK043FN48H_HBP ((uint16_t)13) /* Horizontal back porch */ +#define RK043FN48H_HFP ((uint16_t)32) /* Horizontal front porch */ +#define RK043FN48H_VSYNC ((uint16_t)10) /* Vertical synchronization */ +#define RK043FN48H_VBP ((uint16_t)2) /* Vertical back porch */ +#define RK043FN48H_VFP ((uint16_t)2) /* Vertical front porch */ + +/** + * @brief RK043FN48H frequency divider + */ +#define RK043FN48H_FREQUENCY_DIVIDER 5 /* LCD Frequency divider */ +/** + * @} + */ + +/** @defgroup RK043FN48H_Exported_Functions + * @{ + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /* __RK043FN48H_H */ +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Drivers/BSP/STM32746G-Discovery/LICENSE.txt b/project/Drivers/BSP/STM32746G-Discovery/LICENSE.txt new file mode 100644 index 0000000..3edc4d1 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/LICENSE.txt @@ -0,0 +1,6 @@ +This software component is provided to you as part of a software package and +applicable license terms are in the Package_license file. If you received this +software component outside of a package or without applicable license terms, +the terms of the BSD-3-Clause license shall apply. +You may obtain a copy of the BSD-3-Clause at: +https://opensource.org/licenses/BSD-3-Clause diff --git a/project/Drivers/BSP/STM32746G-Discovery/README.md b/project/Drivers/BSP/STM32746G-Discovery/README.md new file mode 100644 index 0000000..d442a04 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/README.md @@ -0,0 +1,41 @@ +# BSP 32F746GDISCOVERY Component + +![latest tag](https://img.shields.io/github/v/tag/STMicroelectronics/32f746gdiscovery.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 **32f746gdiscovery** MCU component repository is one element of the **STM32CubeF7** MCU embedded software package, providing the **32F746GDISCOVERY** 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/32f746gdiscovery/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/STM32CubeF7/blob/master/Release_Notes.html) release note. + +* [stm32-bsp-common](https://github.com/STMicroelectronics/stm32-bsp-common) +* [stm32-ft5336](https://github.com/STMicroelectronics/stm32-ft5336) +* [stm32-n25q128a](https://github.com/STMicroelectronics/stm32-n25q128a) +* [stm32-ov9655](https://github.com/STMicroelectronics/stm32-ov9655) +* [stm32-rk043fn48h](https://github.com/STMicroelectronics/stm32-rk043fn48h) +* [stm32-wm8994](https://github.com/STMicroelectronics/stm32-wm8994) + +## Troubleshooting + +Please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) guide. diff --git a/project/Drivers/BSP/STM32746G-Discovery/Release_Notes.html b/project/Drivers/BSP/STM32746G-Discovery/Release_Notes.html new file mode 100644 index 0000000..6fe4e02 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/Release_Notes.html @@ -0,0 +1,887 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Release Notes for STM32746G-Discovery BSP Driver + + + + + + + + + + +
+


+

+
+ + + + + + +
+ + + + + + + + + +
+

Back to Release page

+
+

Release +Notes for STM32746G-Discovery BSP Driver

+

Copyright +2016 STMicroelectronics

+

+
+

 

+ + + + + + +

The BSP (Board Specific +Package) drivers are parts of the STM32Cube package based on the HAL +drivers and provide a set of high level APIs relative to the hardware +components and features in the evaluation boards, discovery kits and nucleo +boards coming with the STM32Cube package for a given STM32 serie.

+

The BSP drivers allow a quick access to the boards’ +services using high level APIs and without any specific configuration as the +link with the HAL and the external components is done in intrinsic within the drivers.
+

+

From project settings points of view, user has only +to add the necessary driver’s files in the workspace and call the needed +functions from examples. However some low level +configuration functions are weak and can be overridden by the applications if user +wants to change some BSP drivers default behavior.

+ + +

    Update History

+ +

V2.0.4 / 10-June-2022

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Main +Changes

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

V2.0.3 / 12-February-2021

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • stm32746g_discovery_lcd.c:
    • Remove GPIO PIN 13 (LCD VSYNC) configuration from BSP_LCD_MspInit() API to avoid conflict with stm32746g_discovery_ts.c driver.

V2.0.2 / 24-August-2017

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • stm32746g_discovery_lcd.c:
    • Fix compilation errors with SW4STM32 toolchain.
  • stm32746g_discovery.c:
    • Upgrade version to v2.0.2

V2.0.1 / 26-May-2017

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Add general description of BSP drivers
    +
  • Add Dependencies section
    +
  • Support of PDSC
+ + + +

V2.0.0 / 30-December-2016

+ +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • stm32f746g_discovery_sd.c/.h:
    • Update BSP SD APIs following new HAL SD drivers implementation
    • Fix BlockSize to 512 bytes
      +
  • stm32f746g_discovery_audio.c/.h:
    • Update BSP_AUDIO_IN_Init parameters
      +
  • stm32f746g_discovery_lcd.c/.h:
    • Update BSP_LCD_ReadPixel to read correctely ARGB8888 and RGB888 pixels
  • stm32f746g_discovery_qspi.c/.h:
    • QSPI write operation improvement
    • Update CS High Time
    +
+
  • 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.
    • +
    + +
+

V1.1.1 / 02-June-2016

+ + + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • Update typos in drivers comments.

V1.1.0 / 22-April-2016

+ + + + + + + + + + + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • Update overall drivers +by removing BSP_PPP_IRQHandler, BSP_PPP_DMA_TX_IRQHandler and BSP_PPP_DMA_RX_IRQHandler to +avoid possible conflict when the same Handler is used by different +IPs.
  • These Handlers should be +defined by user at application level, inducing a break of compatibility versus +V1.0.0 of the STM32F46G-Discovery BSP drivers
  • Update NVIC priority configuration to the lowest priority 0x0F in overall drivers
  • stm32f746g_discovery_camera.c:
    • Update BSP_CAMERA_Suspend() and BSP_CAMERA_Resume() APIs to use HAL API HAL_DCMI_Suspend() and HAL_DCMI_Resume()
  • stm32746g_discovery_lcd.c: Add the following APIs:
    • BSP_LCD_SetTransparency_NoReload()
    • BSP_LCD_SetLayerAddress_NoReload()
    • BSP_LCD_SetColorKeying_NoReload()
    • BSP_LCD_ResetColorKeying_NoReload()
    • BSP_LCD_SetLayerWindow_NoReload()
    • BSP_LCD_SetLayerVisible_NoReload()
    • BSP_LCD_Relaod()
+ +

V1.0.0 / 25-June-2015

+ + + + + + + + + + + + + + + + +

Main +Changes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • First official release +of the STM32746G-DISCO board BSP +drivers
  • +

Dependencies

+ + + + + + +
  • STM32F7xx_HAL_Driver V1.2.0
    +
  • BSP Common V4.0.1
+ + +
+
+

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

+

+
+

+
+
+

 

+
+ + \ No newline at end of file diff --git a/project/Drivers/BSP/STM32746G-Discovery/STM32746G-Discovery_BSP_User_Manual.chm b/project/Drivers/BSP/STM32746G-Discovery/STM32746G-Discovery_BSP_User_Manual.chm new file mode 100644 index 0000000000000000000000000000000000000000..0455c6834ee17bf1d90d9d89e91240961baec62f GIT binary patch literal 923114 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
  • RF>SjWF4{;fMC2FzG#7S-L7bl5i5WO<}?#@%52p#b>DUbUzejB0J{ z^p}2<`M~_c4r_lX-P}eneGB%+FJwE%t-Box0Xa{aa&LSzAx@0AMD?Um3p#Yr9xjP> z-)JPi#t`J|Tusw}J7OKU)w)$E$2)+~o(o_kiQtE6y`soaJD*wGWl|39L!x`$K5eM( z?l0ivJK_$9BpPa*bO6&GiH1?xYxr7^#jp!8kG|jf9-TJ}?HOqPwZqAL^Ok?{bX3o2 z;K7(x(y@NlOjz}$zRTC+9xoU}jHG!^;~&i8$}S&e3cxM_iRge)qkDn>|9DrJ*G^Xo zWfinqOZp8g`uu%41ZFBt5mWR>CL*j+z9?au>{6k2qyX0us>DlfyUs_LA>C2GyPKK6 zfBZTvHWk0yqr!`M-T1sqR&~ScPye*lMf?ZvKZ}sP%!aVSPFjPKXE!BC0HF5-^gpyQ z-F(t-B8tCgFF-??gL%GSK^!}Fa;PX+*o5^!q(aya+>0>DDoFOdUyn$7Xwu_3c%`(` zz-TTYLuYkC**nIUVe5G2t(hOpkKoi~zw{qS%K+}wGsoJ>V z1NRBRy#70a{CrtwcV5C?M#~cJwP^((%n9U}n_;KSHQPuo39#5PMLVx7ka@BF!hi4d zxlC+pY=!Q3MOOm_fTf8ROmDJkBVSB#?j*HWPnOW`S$ZjbL zq)ZtB?j$} zNv${mZ+I&m+KV6Y-BD(-_%>Kj?(iPTd)0Ticdj6aJtLZy2z+z_stX)rQlUB)2oCBm zEk=AkPG3&Hh>@qAjeO2if_}%ORy1z3{_3=&r#~pjNb@O6C_z0Ssv9TAEvX72+F{#a zOCUcB#N0aMXqAQ)r-tLTJ71)i+_i6D*X}-I;2nP7w~mMC@lvsK$7-z3Cl*#m*Kt;; zv|TG?=4rFgW$OQ*hn^)OH1p$ZX2=ZBUgPI;4l<_8b5aI|9!?NaFjs}U3eboHhUn-t5 zv9Yl%Gd#u$0Te_@DOG;*;6@cD%dneDt;tWdMyzk?TV&=KfAjBu5YBFyLf?E@vT-)Z zR2O#8Y-w(xh(4*vVk5o=Gp~C)*6y0#FPk%Qv@d%48eqlC;$}0gmcaHPK*?5I=be>b zKM$c+)Qf|km2aq7KcUW!u`J7-x`$5rqVub3SnO8HKm1?ORPTY%yWXQT_*6#O`E9q9 zZ7O5>PGR(&DN%?N|KhhpH6!K9u);rtjv*SoDA9%}@sW-9eJVNk;pVi-kKgRxs*bJ; zf9FJ;2^9UYs$tENFA&E{2-`sGgAcek!SKW1N;`w|B1P;-;WqpFLiydD_@9eo(u(r) zfD>RNU0K%rxI5{iH)!nE0vOdo*SCs6psI#mD%Y+co5V{vV@YEEX4yk=u8Ayb;y5 zEAVaIR^Khps({K#rYJDQ>n)W7%K>=Ra8B?-_2?d0f&G45j&&=ZSVcos^#z}X0TOuN zfpQHJiguP;*U5YS+5vNpT2}wwtdVbnvbQagF2>6`yXY3R8yNn+HAfe?J>8K$5ysB{ zs9N8s6MgXeKA2n?Y>M3B*Oj=x|2GIusJ|va+jo}U@#?SWQ33>WR+Ezna*TGt@Yu2zVBs>`I~i@Vkad!9^%{Tvq!gDD zskZ*5(K|qK{=+l>Rd+;!BGaE5$f)ZgMkB(5hme5e z>WHhrdi&dz^A7rNSr32{B)p*}fso0}C*^7ciNkQF)!yT+G;cGhNwUW}{9Htu;O18kZ zuhobrq&a+rfn(dZRb1u3T|saXIK?gJ8gv3pHLaQK;S_fhMYRjP_iu#t<28G>2HL%% zICZyoUr%@nqp^Ins9Jbg6jY&aFf^>B2@y}kbEk;UnL$GN$A2i~qriOCp)R-7Ut+1~ z;Sa5KA0Yc5pj96w2xIVMFVWv)@c{4U8*&T`iEv|eA6UpqR?@Mhp;utX?HIYxP<`uG zAJ`vUc?X_<#)-x6zvNx{aNaMpPwu+dpiuJ0d?qg2OzdsH+7XWXetmf8TAcg;leUM?Thh3o&bN3CG^1GQztZEQrE>;6?*0KQ`ulkL{GWc!sjb9NFeuzVA=Uj0LayCfc%JuI+NYMZh6~G-B0Br+h1`YfZ$lx~kPJf%M3%n!m6ed9jSp=Dru^>P&gz%j-@Bgt_ba4g8$5H_8s;da+`MbMhFt?rlp%K8&O3)Sd-R)|%q=fj}oYrni+HvBG z1UX1M_cf}f+7Q6~0s#U92+R*jFBbqS?{FC3`u4rfI(N*-v(n1<54QfYAE@rS^UMA- z$8zhZJ@sVl{r*z=2mbu{Pp~lmar=9Z+_UpB_WLmXvyqS3oqp@i4s##tJLKkjPwUDW ze&@a8eX;NyY;F!N7E=fM?9JRRE;kmZQ|kVSzaEzV{Q(oq)$7Z;^-P_9Y|LpZv_Y9+ zgLVn4put{t`$3jAdQOE0}dyw|tiJwOT$Lxdhj9#?WQ>>-p!%+`h$@#MV#!bji>B z@VM4~2lU6`-=y!x@6Lu07k>BZ?K4BC+Go(u@pmDYHfGYlcMMd;n#ftEs9(wbUz zWmD;mo2H%8If0A})mHW5izU=2Ai|jbQLbfsE-x1knKOR5bD23^9r8{1w)E7l6QGxZ z*8vT@OGRZe*vNDTsHB;^UmCrcOb+E%9yLW853Q|CTi#hJ-QrLtw%8$FfG@gxiIy~G zVQOZBe>vUSFUqOFF*x0phGzwE(~QoM$67IrC|`}+uyCW1Nxa;?&%N-!s=AbriD0n) zQj3>sOb4bao_S{kYfK|nOO*`v1QBy>ITwN*1&xke0|hgzh&}#)1?7yOvL-H7M!`NM zRZBrkvPdE8YHuDfs)-;(IX1Mw9;vrWGMk&J)^(yg0Jj z0Dxt)RBMP|YfHs)-WXNXPFkp#bVd?Ul}M?fkLK;Na=ZN^39j<-Azq23g{13v-x6n% z9zEexn8K2#J?@vIBb3&cVR`?_^C7mrhpKPSB^QmN(d|}uj+tq)tG`Z4cHuC5-nB^Y zIgE>}r)1=bEI=`$(Z19NRLaKp_t-bi%g)}KJDdm}JhqjfVU5`z*0fQh7>evJsxqa6 zIqYRvs2byi@Tw7Mn1yx}470ua0Tpd(%+a2{9-eMOWr$JDr4(_LhdK!{;y~L`^~Ye1 zm_u`sde)Qd&24J%yJ%6F_L`HYdByciTB%bdtfgJ^@Ebi*0aB#Fe8$fI$VnAxBrjc2 z#5`OFZGn=MXNAmFB#T2(3;sd|rXnSI@O!wV-w@pjS=YF0Gm=?s)eHfZY^BINM?`k# zW4#$R-PRqgLc1=k)mE)6T|c*u7}wNzXtRfNdCq5hM`yKRjkY|FT8^*5M1{8M6Jru- zGQE$q>7OYf=ekp?XG6kVXc?XCi@gWmpcp5FQ_9Lor#8|~rO*E(Z@nK!OSb70vDTlx zOPTW_Yqm#xXHNV+jz1sNo$$pc;8VDs5+62w2Uy~|Vi&Dyjgw&B+6pj>V5d9Z$UW=@ zQ(xIh3(08#l_q2*058JEF{pqzA8*C%)YMn z`2O0rFUkJ2{-~i}$H6yhTjHTp>1bwPjl{rPVAn`iR;Oy?BXz1cdst)B0;;)#8x;MC z=AD%_;?IqZD3Gd~OT(o5#W6QkA2TvY|H2&&2A)~US*?_yZH@PRWE_Ov+KU0x0=Wi0 zKJi{>Xj+vf7|;rr6+pJRuTcm|Y4$J#?q-LlyM+4JknLx}fat>WVzl|=+ZFo^AV&T$ z?l`j@_rF*ghT{zW-1?PBRoVY6H~)l^j+Oe3xcD)lWBm1K!t8GT@waut9)*t zmPL9`30GQ|`(R2+(UTyEB_O!@apgN~YEkTib%}omTl8KdL`YP(WwU?)nfJPkzv%lWR4>e5aK3zzPOAOmeAt0IWCRt~#`S`hK>FvYn z4bKHj^D@61S~t5xe~&9yN1eh74x#U}%5I}fo?Ssb<3;N2Y=dlVyMc{zeS09;fVi?y z6$JCy6thk^1noh~Yh5r`wO4h82sOEUd48bBq^~FM7}XuImFs)wQoq-;tjk>YODo+o zx_W*>=}f~^j>n7U!*k&{`cD05j!fE>k-x%Rq)L_ygb;&ci-<}!!RX(Xku&UXdgaHY z12OF$!YZ|#z3Obs-yi$jd5M3(!vP60FlZNFRyV0d*Q$$cx~QI2iK2kM(&=9|G8%MD zKsK8!I`X9o&4l<|*ESxe)2`?-%qADjES(CA57ab&C?y#ozPg_NmxeJS%+0UgS01-~ zU*NuHzY+HPImnsw_0(zH{w`q?3)Q6${=g?2fGuD5=(2F zOPweJ8;!LX_L#4TV?s1oi?si1f{i2v@E!7u(vm|QQkDSx_p3|i490>u2lW( z5D}O`{btDm5=9jX7H!CCsTQVv!cN!-QCu)|LrQP|__jURFyvp4mBaSjS~jZ=eZ1T} z40uZI%*=V>t&RJL)a*>C@D_pf`9k28Tato{ekg+{f83m254e-zf0V*YVeWPCp8QrK z7XtG607&hek7vSddYA&?lksuza4|6$r5tqPJXDkU3<`o-D|q{XJzao85_r3>T+WlL ze;=(I9rLZ67^Ac_X~PzMUry3>Ic!&cu7Ki5*kCcaLhWW|%mU zg;*7RQN^`g;qT$&H84ufmZ;w2<6Q%*v^l(Xzhs!ZVu`r`cyPn-5>R(*@!1PW{?gj5 z_WN{9ELI+V<4|k=`iqTvP5sY2YNwC!8}}KT!M#=Cue>HiQZ$y1TusfI*Wbjia`vQ!I&JZ^f^wibzNS+8uqN~;EXSUL91 zUZ>slxa*>Raa&Yav$(oWszjc4Yirh=9b4<8y$Pl$V6)cZpFn4_HN^b(I;$hZsc##j z6;(ph7|oLUZEi@_AWuz28i>sB1&eQq{;5tkx7Q!P`PSJlV%x;ROi(- z6t^kW%SxI>xJ!0^#9h&j{HTYz z?_;;kXMP)YM6rSp+845>HJMEP35;Qo3ekiZu&_7FNUkJe2OIbwoE>EMzPmKgrn!^i zeI&O6kx#*IAp#!n^J2`lE6|vgr$w9aj(?QzI6)=T$uJ#7-f~6o!;D=Rzv~<`YrMxY zd7j<2P^a8jw&LX2KzyYRE?`E}WFm;<+PXRx;h|2&_0S$~k%PCb?E~8aES2-P@Htr> zIoWI&MD+IRRzF^KPnpR7Mp8@HZj`#R<$~a>>-MBs|N$wq!ndQUPbv6sE0ZWAKAgeLZntRoDsagQ|N`^kTM>07jfGp(B+u5WQ z>jk7q)|lGSc_spx?plvQL9mxzCSy;=tMzhPZc+)^`aPtVU!KDzsDb$c*%`BwvXN-C zrxzoQP*T`kBa=a9Sz-1B@623sCbxZp6Y3cE@@RMKEl^Z%Ey=bAGlrZ})RaD+bbTV@ z{cThB|MB!MuO}mSCn_lZ%1FHj*s3dMg1(^h-!kyl9rQW6IpD;=-**=(Fm8bu*bNop zk3&rNL>5G?jEkP$7q*nCh9R0>qPN}ASi@|@>ZCQfD!FFVK1VNG3RFWuRIW_43bx)} zcJBefo;UCEhv>-~D{)cJ41p)5-X_rDD$$AuIKRa!AfAG7b6Q!kB|SL>*Zhx8D|SEzUg#B`5ZTNB zZW9&8V{&l@ zV5O~J=Q<}BN|)$_-xnAIzvn8Pg#@@`JFwsqOE@D1*8p4X=+_`qR)o(&e`krv zOvv~)H*rOMX~dWIbhOx%i}-p6Uu99B(6XTOEtKk z$`?`K2Xa2sn5_ZaoV|WnY6_7JjGK2Av_Xk13~S)pjz`7qB3n3wfSnja4bH6qN1sUo8<653xK5YbbZOCj!=p%=!!bqfAeo#-y7J(*v5)V&voC=EhCdrq_xL=?NvS$_a^ef%*w7Q{hKX0+1>AIlWVfe;jd1B8r7 zr@iJp1jQe7G`uBeD*{1h42Z=Di9N?;A``Vrr??!G4qlHw@pfXHv!H#Qxnep}iBXhx z2Ti#JAvk4O-?A1RV8*OZ-Cs$y14yWayxVI|2ZGRKFMSZ4!Jh95Pu+vK;QpB~UCv@> zxneU~F{O4RNY{8hXtnUW$Jr%aU8LBt2YM{cz%djoXFx<~4hp@LiHp0O3r|e)IiY?1 z%(Z=&kBfoi%Ea`HIV)!z5-i7Rthowj-cat z>2!uckOfSZUlCA{#NhzA?LU4;=7^sRsOEczH!mf+b$J;&7OxFW8y0=foen%p5vG!} zG?~Q{j;SeF6oUu<$CJDO$S`$sGPye3Tn@N+y$^S=;-Z+LqKt2sNP^CKp1>d@~9Y7VJE}J2eBQ zLXEyg2+F{H`S8Qix!_PIMHQV~>sFraj(1g(xy%Ct@%txj3?d=3yE?6AdT0edn?g$3 zi()hjZIjt?ApLomEnYzNtgEF&Bo~IH#XMVp(M9sde9A6A&SBgNmUXxcj?qhLC8dNDP78uD3Jab^0!-UsL9-m1F#c#7~T1ZA`prwPl+vK3eiywv{;JnM3BaZ#7cYn ztsVbx9rClwv@ioiQ)ibW=#{(CA{iHa=>`o^Jqm#?Rwychup5?uc4v=lFqssc)j5n4 zSUBVe=IcfKcEw#NHgg9YxMuDl>|hco3Enh`v8M~BZV)VY``OR>;n~?03ngWp*-}jwIy$>n`Y`7!=Wz@~ zEL+hk$blnsso4?W*J~Nq;j|DH44xOJaEUsC7S?{T&=Sr;-x3Qhz`D|B%6A?hK&FTA z6P|KW^HI^Y5Y`s8whQ1+YT>M!Lq14YB_o(fLJLtHizEoA$rUiMAU=GcwG{Bhb|NqI zAkQ_r16v95enBTzsHY~r9I8$j*!{Q;OeG}o20@9o>=S-vhYPLN5oozgWzjHT~>sog}(6J zu*hUmeekhx@Ha7k(dwP^;gY$0fSm|AxJF7~kpo)B$b14hi3j1-wm;47jc$L1T7xqZ zJ%II~m_>ucAWhJm1`_31R39IMmB7@T(?mKKQl|sCg-Hx@F}4cKB^g=+R*QP1`i6)o zi`*oa82_W2zo*WlJLJtE$~I)Z-D}_v90s8oa5&JKrTU<`?7sjq%KqFcYq~h&k>SkQ2g0t{VImk|9M36Rfr- zK`r5HN7p#cTYYX;XMiGM?B`5=my9_ZnpaW<5|ln+qhY(^tO(rV=i*9bEudl$MHB0Y z7>Ux+0ggjGO0Am|?#)*3;jpN6HhKs?{A81AnuSacv7&24=D!}bv=xiJM#du);GDIm z5B1rF3Q>!##iuEHi@_QSghfR>#JCm4-Qk;O-=Q0NhmrrM%S))b3rDkN7?*AJnRI^N zt$h4Genx+&O}8r{!~~<(17}x+o~yT@Jt8C4|JuZJaajO|17whhVw~kM>yk)5x$Zo>ju@A_Xp3dN3_5)S|xFRp0osvfZ)L zp~=_V^lDw)Bp;RLQpI&vXfd&t7ujzL@oxfe$un0(grr zTe^2SKDKGSbxg7E}0m+8Nc3|+H+I)X14vSmxk2gpm~=)Sly5R4%;ytxTFme zzav9=>Z9BpUt#0z^S~ea^W)cYB=H^-DF97qD19^DMiOw<@8#owXg(I>jlk9@5(AW(edU(v&4oS`9K1MwU82c6o5WCfT4_{BP@izsghZVd(@``0@UXm+AX7t#K6o>Q9Y&Rp!^XJ zWpUr#H)hPBTq;u7R-|~eSUbvP7VWJl7fY!YT8<^gy@oIHVg%(O_!mjeg9B9eAZ0a| zA@w?mJzco&+WR?IJeEG2h*iLbzfy}2YFK-Cc% z$a}DYlCt~F65js{3S*(~ynt)a^w#gp9NXV2&$$FCK`Ags)MP~*DJjA#ij)fH0}rNC z+B<;ij(u}PCOLO+I}$9J^IR!3J!3#f;-swLYaXb2(Vo061rMMcOO=RKS`z6_b^h-N z0eB~=!11Yge_sH{bZ*VYPg5odCw%%{9FkrtMXw4Ad!rVW_HAPSWS_G|3<=JICka zXE6PmIuL(;Ijx&=B<1I*iV`u@Ilk}`!2Wxk?>#3;QK+~=|r-B4}-%84b3p_gL8izpznO#q!GGX4Kc-?NJ8O( z1qGjlExZV^jQ=mc{L@r>3xis4H6nB=z?0gnz&#;`ETjjryI;ZDm$037XU3f5pdvgG zg@l|rKr+zuQ~VrG$%!`C+X8Ybw<6%nRM&bVf5!dy3nuP`cq&3p>v+qnx7QCC20&$ zox+kyE`;ES8JF#od&-0R)Lfjmp7N-B>LiBy#`MozdE8H$$=lz@|NhR}UuERqRL^z+ z@h8kLN6@Xa)X=BfDUu3cN1%K5n?y%go0*7Q@JvjUVb9oK5Y(sF`&d6uVb*dY#cz`4 z2bBV2OjTOaimc&$F0;Y8Ib6Amse>-fzW-MIS;8CcQKyNZQ=2C_Co(~-ZBI_fhVKSt z{}k|)j#HWmXEGwvgLlKiT0VUTv0x{zHot!dq;J_KyG0=G?k0$d#p{V{`?=Hvp64;j z?f$tR{Vtm!dWvl|p@EO4l(Ec4!OgFHCu!c;n$1-c|IE_m%xiMy1Mh#?qsz4`t-83s z6x2;W$5o*9P0M^)Ee5Ocnt(w|$X`53`7+(({_BlX#8SJJz(f!Ta7_Gdb@dr7L^&|3;NDzae!7aJgCuT=qHbV%N;g ze?hZNDVUOk`L3@)3UH5;$+hWW4Z3L`4c&JU9}KeST^!KnKsge)ix={ zVtAV=X$CFL)z;rU$~rRV(Y^F^2hd~F_CPy!?q}w@_HvP5<)M%UQ2{0NUuqej<{r4U zPvf&U1G!Ja((h3iYpYXf4kM&gPu4zf-O(4h^z#|Q|6Tn(NqN?>+4|?{u#bJeZc}G+ zk6x-2mu^f2CjvTiOLN6d}p$$ayVHgj0`e@J|OYY0OWksv<6^t2&(ce=7* zLWhSwme&CUW6h|cS*2gNi{00orfs$YUh2N8RR8OfC!<#)=bUa7_om*i!Rj;~#FY!R zErt69V>ee^+`Wu)O<6W!+XvBCuUAux;z1XJd~6eOx|pEY9)B3y8|*4ZRq%>l51M$i zEV3Ucz3_a{6v(lt|U$IQ&Q{u2IjR+??~w1(k`U{W5G{ojcSw2wtwbgjU7ji_eb(xX#lFTzWyA z2#nS>`NIS|_&$-T#}mjL-+DSYK(723XE!IiX?2q_T|#s=B!#yq1=GwR)??5NE2EKH zSXwQ*Y)K@9==;^oQ*4d_{e^%4=A%V#eNt42dhO`|h3m!gO_PNU((+QQFK!jNoZPjL zEJDGxTFO#N9yb|!I%UA^CH?C_eB3mPZ0h#O21dbrzZn=4;q_Or5-<80VuLF~Y_}T( z=Rx>i+x+G~#2QY=J+LyUz0Hf(1+_lFqOn?Kx+P>lx<4g_w3Yi@e-7jBTecf2u$#cJ zSPC9vO+cOot%pVCx9beE1{cmhkuL-xT_SezN>l(eFbQNe1-HF5d~mP-+6F~?t05z@ z*WoqZhF9W2@y7olHrwJV#~*?amZ}bwr(yn8sjwf2G2?0^d)vs=P}Vnk)M)&GP{A7P z>dyLp2VnxobG@MGh<&v^TqDNOPcSq@Ldopj&)W99_p}je^c!#e$~VqCjz~W829>>u z>6!?wu5S0e0C-fZMOKVG3?l%BVOQDN%nG#+k**XR`LlYz_+NrQSp;KI6sz1rmyW1y z7%+DWL(7L>u9dJ4*@PdqH5|@(_msL$t54H}KqNg&5K!pHMm_>2zVj5@!fV3fSI=vz zQ4g%Sy=mFC)WvrKJJ#^8H3j1NZls<7*f3yklqzWzz+JODBs|x`hHJlCa>2jKyZ1uv zPAD++UNPL9kdPE}G@Z%}D%nfd3bU8XGBmGisvmqBQ`r9wtd?;GAbjppa69th+4=FO zWh0s#xjm4n8}&znG6)R;SShag*lls}%d*VO!+!MWK{kIqv0cWerzT3nO;}^EP0XG> zuT|dc7iprJp5FF=n9=k5Ty;)+-tlgto+Hzg2vT*g=g+b-slW6M`MZh7RcRStO!H_o zz@6#)x?XxXtYwBGufmS}p-1DoxEmGQDjO`@mMNY)>5Ips;CT zl?nQ^y;#*?rS#V>tlPe~-&Y!BozUFx!tT5(Y5OpT88^VM#F*$mc{5Xg3-&;TpRX3u z5eyl3q@yxfYlZOw?M8RbgB+0jE1~HpmX68m^A35VM4+Z9sezF)0O+lC{la$4-z>o{ zu?<-}edAB};JM`&BWNDuM$7CzGJy5P;imEw`37KogT;D-6&qdvHbw!g{-L8weyfih z_90)jtXFGm;$l~w_C1#$o9q;_1c8Y+f;(hiy}7Wh@pXHD_VcL?g{o5CK>iw!AaM}A z+6UdNiwg@A-}w;eirR_o1`b}tr^ejGjSvDPtec!ZK0W*hKeVOT-NgJdU6#cG)#i>= zZfw6ozjjtIKKSAJ5=9Q{gc|@)ILrGM>B+AG z6a>(~&7$P3GJWdfaEA9Af-(K%Us(}7@QklFT+_FF6m}ccMiJH*hYh-c1B^|8m;Q7R zf486@EysAC)HT>V@pAHfc}UGqcQmxapzzI>roe=D@xOfUyMj*K1@V9Wjsx_Y?t*-+ zN{=pjol8)PC~c@VJGQ+YfUz@6hjhLf%6^Zn%ZUrz(SkKHQI$1r{Iifwc4H+O!u zp5A@oQWB@$g!Wv&fK_DO(Z}`a1e$_5^YKnJcjTeq_u^ z)1jkQaW8&7%uN&Na5TgZw@Iv@85Y~;!vH$&c0ITM?(V<=Rg7*26Ttu`j@(;IEMT8J zL$(qAO?>x97gdRIJt`Y>ynHkwbJf$o34Cr{yub*L^Id#LUX2&ZzB@VGQ*c>jNkYdT zYWlrWLtss9?wfc*e577uyuexf*x5Z;Lu;1R&VG?=2RB8LP}$>Gd!v6|I{5ITtQB%@PU7Wt73Kfua;#6J6}=>V`^U*~s9qEH+@;SC~%T18mFrBqTfV zRH*f$Vw2mB_0nF$zxyw5E2k>_(?4I9AF>Lq&2a;or5vS95!Ty;fz7IQQ*LF8 zeodZ!ZQ>Y*HX38!#OO3U8kg8i!2CbikZR{!p)44?P)-1{#=*o@?{&rbE5#WIn^`Ft znZ10kO%%Rwl8z~Hb=sR@ER;Cj1c_P=R2A|9j{iyPe?s|Us43rBT)d@HA&Y;9(FUV> zA>ygcfIsqpZ~iT?(AGX_-jDce|E!cCb_RZOfhTn~?Ix-L;ov)c3AgYYqgM{7*WO^T(HN_@2|uw6;)lW;=yV?r||l7`?7CU7aSTBdS5r- zCHl3B&nkpA16Nvi?NR$}a&`65xE4Xi79D!m;uV|eQr+F8IyO!Yls4JhyMx<;s?>hk z(^Kaw4=qc08gl`7HI{kdb598R-Tm9(K243{?hg2mmW2JNd`q`u9qPniRkqLMR@?i( z|7_?vY{`3gp)0T36>LU4_plPzwZ7}0UGMIvZ^og#?ynzP72C+uiI+DaILPw07owaa z-TM6=c~6eZrTwZ1ohqv!9FCm0BigHT9>yOgVrw{%NmWCXUCXyf3&JMZpdHC9`4T130#Wf z(JMvIap$&;D{+^D`HP>+ZW9GviT51qe^q^fsO;$Zthu7s&5!;yFO3zRmhoNYp$Ff@ zzjf=qdX6qfpFCOv#JM?8! zq6og@Su0T7oAY(dxeH)qQUl+9F?3{X;kO#v1^2I$fqO}V&-&o3;*2UR? zir$W-Mqjnm?XGV4cso1h7#Obj`Tr3WnH@Vn^ym(*E;lEem;CwPP3H>(rOqs3wOwKq zjK8jq+lvPu<8O2u8Q+F`ghBYga6gJBGIDjwh3>(a#$GS86z32WHe%PQjez?iefsLy zey{yo>DX3ypOX^rh+&nv#I?2pba|OtODp-L5fPpso+nt&{sutTYH}R&l&dOW1ukxU zwZ*)wy01B##N|7Gc`XP4m~$T)u38!Cb$+}UedF#ki92q>U54NOG8`aTsrS7vKL_ zI(P1{3pSJf0@myFOKN*<>~UQ|uA_@(^kjMtUB17U3$w)Wk@yS_{&lnrVq%;Rt9NV> zE@Hp|L*J3fC;<3l|C{f3)vgP*q2uPW#Gdg{UTCQ0v6`i(O1H@V6nC)r-rF$ttz6;RTKTTwi6Qjh!_O`M0g(A8ugzxSFK=G0E8*21 zG108T(Np#zyjG5Fx&Fkfu*A?l5u#}&P@y~L@is_OPdaJ5ncQA+=odBf`Z=_~i*VF> zMCB7pn>D|%&Td3M?3oN~+a=)6tM8DeLT8qGwaA$4r&ueJUsx&D;O_<=D)S*-A`6&y z-;9tEPg5o|p8iC#i7b^QoF%dcxq8#42bB3;E0Bi-A%iy)mmnZXr517HB_qjK4$ z!0=ZOUdPN#7c*I$Lp5VdH7{=B2lEY@aT3g-<5@n*H|C$wD9D~I?*@4|*M#L+Dksj9 zhqJ8*@LluQzKfFg5_MWY-_kt26}VH`{;`d8R{6=6UYBJT!+C}nH_v6=ays+%ijKEk z^tH%Gj1hjF+Z-Wvw_CmKb?E8Mg+sTD-r<%VdF&EQGBIspDsx;%sl6TEAwyx*rLW=b zw-A18kgE+Kl1vL!5}n5=gbH8{nP$@Gne_&@eYR`=6@>5%1GsjO%n-T!IaYHNNiamr zk>Q-Txi6=oOQJh&ULwS#mo4ac%gT4G_uS9=cledlK{1_PJx-T`cCa1Acv7z!TTvQ3 z&n`~PQ$^(4Djd@6{)_kZ(tSGa0={(>y_N#;pk#}^btTF2$;e1wl**u?JNxQ?NW*0H ziyEsJ=dBZPDNFIOqLQ~}p4;nZ$Daow-Ip2ODwooUWLgWB2KEwl}MPsU5h?AFRp3mRA zh`&Zbc%e?l2#E>CmXd&wSRp2INzVn8iSNe_kEQIOe@;Smp|G7GLP2Gws3fX+(loS^ zjnKp-w{_LRVFPu{5-Etgx>6#X7Lat9Q&fdRDTd*FE`vGcT_@pNP}UkS2x|c(gQRFF zUWbeZKKOIQ2&5gYu4}^*(}>S$MH7*tUeH<+TI@_)%p+Hb% zC>;fJ5tq&qAyoZ`gic5|*ic`}W&RtPzWc|`MRe%6tau{tNIzg8LK>AyLxLf84$!Fq zUm`{1c@FE|FTU+Ij3r!qlTr-;RmPAEB#wd$gqV)Zi)$E(NFCPJm&L;^qqh6`%uhx% zV&op27^hE3%0xgLkyJobpFa`{u1Bk{9vL*Q|N-?F*z$t zF33`U>7m^zw#WbL%zE(-ee0~<3X4!l1(`H?UDH zK`KoWRO`lS8M0gqglP3)5Em?2{QsIwQ3sVE4bXBqnRcQoB^Fy9x2R@LNdag2MhbKL z*VzgvrcQgHgiz|6y2elh4NodIB#sMD>9A(Ku0iG9e%;K#he5s6WlG<61;xOn0850RW^Dm{fD?G%}^C{>{x(k5%mNvvi+C z>!bpmm?k2Dd^x^P0a($eAx0^A$cg{YW~#bZdAWDUC?ggaL@l#mOesRicwh%OsOAY< zf4u+wdEXq|Rk->ld+IT*UOzwR3NvwdDpX}?zG%sg{U zHlXdGapol5#jhUEXaqx)&MAn6N|i!Ti#D0uOT8sE^3;t-G7kR1FJ)xZGpi36;~0tj z--D17*9AtzQ3(}w6Hn`K&jmjmfl$wYB7$PjLpjl>%%mEi)0zoI!9K;Dzz7!FWdx{# zPbSrQx1Ly>^^uk-VZ#IoD_%hS(J`pUssN`zSig|(@to*~WA+uBL79UC=qUwyzOp?w zuU+>1Jz1*P5C<{QB$p8+XP|`?eJrCQ6sh35PC{ycv%q|Loy{_YBAu0siuPvz@CT`K}Q7(A>TR^ctXKey;e0*z_`G*lMYZIBTPdT z4;IR=Bpf*##`b7iCLkJvSSTGlHoY*KBr=TBR3s(5CwB|m7;ke-??jw>(@q!2Fi#?q zV44Q15`Ht88PJoLOP9>ZsmQ-_Wp~Aqo{GkJY)iwA05U@;H)>L-9}h@5+SQMt`9;56 zctQjTEL5I6^nB5@jFd=q0_Df|fVa`A0zExb$;`{hft@@Ik zzQLa}pR$cNV#8C;1=PtX(#K?|IAge43$+WUPvOZr{5Pix3&PoLL9vue6juysT-pc{ z^h-$~)>7HW9Ml@D0sOsHLWu!GUX)2FM~;p&g^Fs-I{+U(n+PTCqn9rBBR^m*y>vV+ zcvMy#An3cywHoxwv1-h@Ch3YSb)JwpL{Y%R0FgkYThuU(9>L`AX$eM@1}88jGa(jX z9Sf6CJC>)KFm_n~_9bS*T;bM}5|eTev@?OP4jvhlBU6chRL|eu!vBzIsn*hxX&sUi zAWv9~1H`7BdsG85?O(|WC3p`BQ6Pj?QW9_h5w1;gHY9EQSWo{&Pqu{Y*X^_d|v9Hb)Hwk1@I?4geB+DR_6}BdYBMNz07CzAAJA#w8kSv_u?&L71g4 z(JU5u#2Dt>#}oGEOkE-cIWU!w;wcEl&NbeGim-hUXt{&+gWVWcRTLc;d&!no0!m~| zb`Jl<#VA>3VXazM71l7=Y=2si#&d?4u*K_0YZvQKrt!{6@Dj^iskG|fsBJMNJ0`_q zqGw_!rV`AUSsGix(Xi>v%ZmiJWUTM3;z4^#_ZU5ibEl`*oKy1*T9eRIW)txMnA(Xo z;5+8MJX{iwl$J_glR_%zXR0!wLdz)!@uvTmWtEXRSOQ13uwSE1IS=!F;5-}Cuw}^0 zN((UbTIqsN9&rUt)E%;hx$a}e+jT()526f=L6Zh@79gr-3a8~m?ghs8=cI-U7y%iW zfu@qmk(OZGS(AGK65B^}PR>t&FSb|@Hj%OLpu|##_m0Fg0mgE@X8)0M%*q4J6CEV5LPKCEaU~dV ziOj@FTVjXY+#PQv_qq85k@%hwcA!icuBLQCEtyngsIuUULedLK+~nM+Z4N_rv>m#(2F$0x!iE{DS|%Kx4G|M$XkofSpPQC{Iv82?Zt@;e&s4BF!O+?mzQ(-3z?yKIZ+ZtEE%L8RxHg_HDERvS||7lmjn&~mtOyA<>_*9 zeRG@)H;&LRa^-w-+x6QO3#%l6*N`u|419@)*2mZsek}{l9i!Nv+a8%Pwwx*=#!*cI zaSH9!VIxcu3W6TlH@tP%WZeenf9+7G4RfgjIE!HXzTim3Xu)CwCl2T?xXN8!>eOfz zs6`TC0I6^AqRW06GsE~4a6IFL%)_a>6VBR3aM0sa4TL? zaz3a0orhC*9jIFekOho;NC;e#$*6mbOC&FaNY3z#yROcuvm>1Sd*PEl8K|tpGw>y;w0wZLM^&MAw$2~!#RC+IA_nEbMowjXU!(wB}@Ym8JM*ekO;>(6nVu^EFmPb zwX1YC)7edDHk}@K`EzH}olSH$)7edDHl4$FY&zNR000mW0{{R3Lqh{60APPq&MMRb z%Ja6Hzu!r%OXC9cGffCdo4{hO3Q2z339=%PZUWBifB%G(000ruKoJ1|GC&@D5y~K! zwV8JywaInyU3?c`L0s{b{AFKT+61IZlh37Yu3V_w_MXXA?0&6*tbx~{NlB=!)HR)> z&S5#oB-gfct&uUv5!r#Pf{5_R02l)R84)m`Fay|b!rLSvQI*@)Li9pH)!ypzFtX(r zcZ}O@glnV-`-<7gZaW{K|NlAu&hI_-=avWdKK3(rqc207i=~r~lbg)a%gsz3#-3iM zpN|2f-}&fE+x6b0skf}5v-d?K>-w<#Q&&ez*Rj{l&OFR{PoSGRY_LqcU!N-*o2TdZ z)cnTH`t~~dgIZ?_u{Zso?Mw|FpFh;qXY0TIuTda@NWqb~kcmE)cqxWC&Wi$u@xvZS zSwBI&cIeJJFC78JFD3uHCqw(0*f^h=^-E8^`r;TlH}zlgQ&ZQoqxTa_;ep2x8V>Zj8Khmypt$J&Kn@a8E{?dRB1?sKe8RIz~mpMLez)cNc-c>J%LONXcuJ-SNkTHvj; z;A3xXu6g%gYWte_Zs-l$npR6vHC<`|kRaDX`QqcT(8n9KkaK(|Y6jId4cL&sq z=3HyR2tRz)_Zg9Xn5{3K;=#7iT`5HFHCK>61~a?|^kr`QBJa$E(E(pwG|CK)OtPKl z@Pvts+fJ?{Gx)pPTE(;qCMpnw(O5T3RrEP#_zDA8vKV{$oMN5+nfWO8V_)~H6B|QE zj%WL%Swy4aRUg)5F7zfmR|kmcw6`&os0S#fDS8+2959~!qjA|0d)9D<5`QYx+i%=} zL;yHUF@(z$ixu0>ws*jDLo@AW#SZjX_43CxdQu&Q?J&G1EKVT=dEy|6g+Gf*yIch! zL7wGAGqHr%_aj=dUqh62X;xC_}#Q;uN|cQgbG!jlwF^l`T{Bvue) z1$aA3t(i1HiL7I+^&n1o7kKf!ZLBRVexBh@YtlHMvxgyGt*veS)qyic2^iFeTtpgX zlevgbZjRfR-gxN9Pii#Uf`z-@fsc(yv4ptCwlAj^Yk*meY>hJoH^R|+ss>=U6I2>% zGmQbluwoW7E8t|jm+bN%v@?4*Qo_E3q^=T}lR;<`z`6uv%0Z_k_N;+KBRu*!eSM?* zd5{~|83CeHCOk?e{k!F@?gym>U$*!oPeK#8Y%VIG;~c<}c48tSpu<7WR2Y57zTmZw zi>2+OPiQAlB}OT5R|jsBNF1nolfFhUWT7r|k&9qFSGxF9=$|^e@_PU)_o&e&*UPbOXOp7R&T;yjh17eF(=@0|)p_kp?u0ExX!M&h) zM-;Aui6gy(6_XmYaD`6=Qfv391>efQZMjS6QZ5i@U?bN02-p8s%UfXsfV*)+Zlwk9 zY3%0fCxjKK?p&Y(UU4=`ZIS!&qo&chMohbG@FGIlouiiqn(h!Zgr{$#L9Qaxh zvcyoFh(#fiDQj*w+@p1#T7`A@xOU)iZEov{>7&1$M)>rq7}jAh!US1e+I%bErr zhy}MTQ}=@X{(_52&jgQ|7ZoGiEAAAcQdlKSMV5PaWO#JsF|&H|xfw}Cy*){lP(RN+ z`+Rq(bQM~)B-k`YlAB=Gn23Fak*{!F_-$%NzgUl|!E6^LF(vPg(ig@00tY?P=Z^;Q|!16?QP>V>bb|; z#wdT^jNg=(LxzwcWXOCnwj?1#$dEE*3>ia)lOg}M?^){+&(-FwB_Z4*rF*=CC7n^BYMn1@j#JUBmWx$FEo<(pQxn$tP9ed~L^{!aHN;@$=)n z=_8G4VctHS|8W-H1WW_(hyg7{2!$8Hmp* z&L?g~Uwv9gGU2cPy_<#YIi*S25J?uEezH0;a9^%>fFc-~b{a)Eqt@|3`MBj_DDTmh zfSS{?cs6u{6MR_R{6SY@1s}F0Ym76@qzRW;cD?_sUA8%FhyOWllg=ma#kt692jF0B z@FjnTH^3Tt)%)zXObl0~4=0Tf_LlZ8Hqqs(KX?MYix)lWj}uBUjlQ zwc=Lt<=N8$9l#n4I95s)!l#~R5ikZn8r|$1+ih@t)nJ=@3vdAbHG0LSqF_k_g}~9k z*;nnDO~zNt64=-vHD*?=b_Hg^YF{*%t73cIM*$cQYgkRBWJnn@h72S_xVb#}ggZEO zE}h(~e`}LNrdwqM05;fRLTz0*=2LwLKP=*Dvybtd;{4362lX9hV46_63EU^R&hXPg zu?Aib6NV+-AS||92FI?{yr` zf}7TY$RC^~oSDW-SXC=Y?*`*Q;|a;p>B!CUEm8TaP;!k?aBN3|p^*Jd+Q)%K_u>7v zI&|afg|6@q%i%#aoO>g9xjLUw?<8eQHl{E)f|)VbM96K9!O;z@(O)K}$bM3`{j%@U zm+@AS3m$A0;z?>ee5g{4oAq2=yD!|F&23v1EyVq@Dfze!2-uQMx%oq%6P@#<~qWD z&&&5fgRNL1#=p(0;V14!-M3)tGt;rr+pA7r%g2&2=z(p!9&31$J}@9NkuU)1;D zPq|8$&aJTqKmW+J)K{aR!{N2>tMrri$#rd8Tx?T`_2TAf?zA?dIxl&8zc&lgET{Bd zy>rj8kCr02=axl7e8gVsqos&torkrN_q@i8;Vu4dv_JcEPCb@czyIBrj8}jH{Nx-v z9{g1|;r5u!ubrWey&W?DLbju_*RVmd46cWJi617mMF-$Y`gFJv&D)1Zn}6QdnqLyH zOy`OQ-WBuFvbjpP{@rX)UY52<@Z59r^RsOD)$-BP&^3GUZZAW(UDFqN191R0^juOS zz1xR>8~&htuPl1vxnW7zYK8NjsYYBawPH$a;C<~kYI)q3r@*WlO_-L4-P7t~jqt)i@}*OPGMJz2koq_y+xOmH+cdMw^c6gSEv-|6{2? z4Oq1~Zomp|21wwJ+^uge4}@knwXIxxU`c<^wxPe3wN+J^f`f_8T34G%rQYGXwXbL9 zUEKY;2e08+rgb9#KP%qmf0V66esG_kvktZfQ|AZ5a_a5!S>D2Z6?ou6!o~yKU@ks) zgv}0P8OThOH~~CScI8+ z2CUB;Tnm9EfwPdk&)(R8vA1I{Qa^=tgu|Lk9?Cujzu)Feq<1kOSuo zh*DT^jIM~w+(kM#s`8`pndYVGxR>Z8B^5F;robwIrYsNl+qC%2b`(|^ zq1OkgWyM@1dYT90x3%|Okf-$~F~Jyk2kT%srA2Xs_fDR&5R*aZk2{9=`TFkK^y}e{ zSSf;n>_ruNsS?6qj?=^Db6CFcJS#Ur4{pc$0dsLK*AB=m5;-*1A{HJ~To=Cv*n`l{ zkA^+9&;Y%tF2EZY2~~_r74eNE2!vZ$C&9<=aJxur0-+?qm?-ra&%hQzFyrR|ZhVTn z$z_$=gyz`;6W2rG+_kZVIGi~babWGf`U1s5WHg zDn<@LMgX#MKhpIt!px1Qr4C@4Ek|+-W}YnwEJt2Mn)3uM$;9?moPUpuIyoeH^*c6h zjb^S4F?U{n0(wQ5A?N3s8U$t0N-02cOXX6QuyP;h{k{3$0Cri9Sb8odM0|%1Xcz#= zo+)`%K_N~Wq3Ff$-CKCx%MrJcfls2;$w1k0x&|1XEDdz8+ga0Z@Jw*oM?n@5bL4xOUdQL&^n}t zz+8|L1xBrK#y9Sh`g%Dzsay+XQy}O8M@xu_ zQ0SKbnO7Yd-Q14o@8c2lIaxhPc-r=(w@bTA`%Nj!lG#@ z#0Mo-n<)fz6; z5+rJxWYioC+48&_|FOTeV3DY?7EGA5Qip{eF_}Gab==aIZpLGGW#{EkaMti6icv!@l?Z&W@yzVb{Ctx* zX6T+!N`Mq%FODKrm`2A7|oQW&xbDjOQ8vSwKht!vc`F7C2=Kb{W6_m$z8#(2AI{utXGN z6oc}kL&GUC#s-+~Kh*}zU-f`&A_+0|Y>|)}^&_=n(LEMaOV8~9lHI4xOH-{AJnPU@ zL|6zwU@nEk;qrL2r^O&oH9K(~+##gGSjVgmDMVpq^OR65`7xB4vRr0=v%^|cA!jtu zWWClWUy_wjh<<+^C}c4esV zgH;5I2#YCI2m-`OV_FDnqqY3zTY&*O9(z8n>Si9j;_z{g=u+p1ZJj^{6VD`)JT$V* zQOW)0VxEbV95ghSbqJjh3#Q%{E+k??ty|c5+_)Xuj4a;FPHsN!M@-U^%S4`eC{Klp zBq1qLI`ylXH!Xs;-{{ouQ>e3AtDM9!6R}Q3q#%2Z)ex72K>qvJ5VZym zJmgf6*j5HX+eU1AmHBjAY_y&9Ly-`OF>raV1lyk}6J@D^Ti3ZR&Ace2W@XT3#l_VB zz4iq=e=X69Qap&$#zfIsr5K8YdJ@uEZ=DJ&%PRu`BeD6^Pp6MBMlvwH)JrAgNySB8 zQ8ZghomMkcZ;ZcRr=QGRmn9fADiRthL9v4339*u66bw|n?{l}cjg^y;lS0pre;5tx7vq!bik z)AB_e=&hI*gvZMqRqdI+XXv~vVkI3@Qx3(%8hCmrP0<)MlykgE{LWm=+Dw%gs(Wn~ z-EM9?Iu#ZXRDm_L1!@?)mE>e68bYS4x|10_{uHyV9eRH*S~4MhMdG5x7U8WK7e6}u z_#jTHRY3}Tzs^TT%{%e$beb42epHGNcR{LxzwcWXKsZj||C@ zh72J?$dEE*JsG+rAw$TJGGq)HkdCRyh72J?$dEE*3>ia)kRfEq88Y%c3>jXX0iEm5 z000mW0{{R3GeZO>003WPXVqK*`kCh@=DShqinLoFbPT`>IkF{*_wvzpg)&xv&g6gp zgp>dP70rMV0RTOK2S4xIzA2GQAnp8he_Lc1bwy4>2eJpMrLf7|_JtlrGZB`3_M2|o z-hDB--uH8`Cuw9o)irHRT|-WptasZva~6>7ZP)J{oJbAa24)J8z)t``003rW0F1#3 zvf3)LYY^^c%UFOq2|$i@UAx+KvQ~mv0}|D3Rc#W;3HVp{YrBH90E{L?6QFF&c~Ad8 z`MfV(;~O3MXC`c;mj<gRA(T6=(z1WIAN&5-*^x?;wZ_+F7oj=T2tl`t)W~WaNF~xzZeTJS-fH zDsMk#H<_O7&upbTotwMd9B7`dG-I6;+)x_CuiJPsPa9kh_hm5epI?ka&&g@+973V2Hf<(py^;&oWi2F$`eM4BF3_X;t0dPM&FoluU z?*OxhPnIJshSsz+yo_<01L=0l9)|N{gJKNh11~w0Qt5%vql1(d1i4QrLEIM;?B@lI zbZF!A0f5M4KGx|RSqKl$RA88#J+oNpZ~NV8kREv(;eYprh{IS82x?H!v}+<}PhQUg%VVHDp{;@@|do`J_NKcA-qo1x9k%gfBl*606v{|`4lR73Hp zN2(p91mF&xkicwcQa;B9wYEC@*O!Y2{PV({d~_fDnLW>Lf5ALHAz+oPVU0$Sbtpc0 zQx8a~L|XcU63$4Ycno%UyN6Tr+Jn@jXy{*MYaNMX+9*yDD~tdj1=T09^56aRJ_p~` zs;D@6D0XcGK|0$R47kZb^5v6zV^+apl)ne6k>DcO5>~prB7j0p+;gn~ zQ$-XUaJ2CBaOwVdb{_yY+uI!uKL~Ml`0X+~657yt66|F|I<2mb;Xu!O1ogp+KqKJD zk*;im>43EM^W;3Tpvb!2VXHb(4Ie_mXwi_pD+{RVq1tgRd@E-j`^aE~d2%9?;)8{? zA!AMNBTst_?4xrGu?i&$ABHE}CUk_5wjVyJqX>IYJ~G_kY}}Z90N_cxA~>OkJtZ~&+m|>5 z57RR5XT->=aV`gt7GF9jWp%E@jNsF#om9X|n%D+u6{P!ck6>MiRAlzgu%~Bo2=BG6 zHZ^~u&TJ?%AV$`Px;jo+TJZglO&yIj)|p}_j-VDLMelv^WDGY8^kV%(zf5E(c9{fy zWhnlu0i=NY!xiK16#laX68pk=Oa(9h$}>`#XZ71ry~&7FELv%XJ?o?ie2aeq7Pdd6 zhbdV-t%joJh}RN;bx0o$jo3pu>K^c&Q~%8`z@WqM?NJyNplNHoR!J*!>Ssz9Doe21 zQ-jJskdPfZ9qSV3TG(>eCM`M&%8|q0wIARYLuwQ9GuRvK-pfPFQ#r9{Q5zcGkzKBV z|0vI?x$;TE9-=Zz#fa{cQu81!@cy)7SzE8V5GH4;XZfvz8_Q#vmD!q{I+2RU$_S_` zB2A~RkgAYcjQk>O2mncHxD(m$Y6AblN?FJt??yX@3jThX=wvXXq%yaLu6tcIF5!b8 zkopg%L4W&Bj@*ByE|QqFL8^3hSpp?akOJ0e2+|5O6RaQM7TrfSeG;MOHW%1NTd zQIRr=dK~LQwO@JSQwPW|>U|7lJk~&pQ`~htj9+lAsV6aOks+NYv2Wqz928AMYo!w= zIc^VAue0P~+uHONt)4(Ehj05Ya$1e&nZX`6L}skb#hl0`ogU=ekb+nbhf7PdK~9fF_`gaU#pcPzK7}`TIPzhp zkVnJd#ZoqY? zPE7}HW-e~l1d{3lkOprks#HNdU2hZK$~<=PZM#fPoOzhZ8yP)aVQet&!%2H4c zzyJ&|00Yj)jsP&Y5m#o=VY!pcHc(TFbVpcE3;AbkrIOJ4+>VaEql3 zk4=mG3%6gd%IF>`>fQ(i+b3&Ymv-ZtevA2{F zSqg2qT@rg>q_|)xRYBJZ-osGhHidHd?%(bM8}1@)FXFrpXsg7A)}2P0lZ#>WnfInO zYO!ssiL%~_O)EWkZKXDMjkw109nu%3*HW=Er7#wD+Qzb}nzJcD)5rbqYg=vI5eZp; zhj1W4Ay$$K-OWfx#Beq))tIuK?Zb6ZB_qo7@RdSNT@jiaoscm?{^ z$L@*IVQ&*ZJOXz>cR5i%H`Zr(^kEWIIt`|J-g~9;3VK~2(F!z zB|a*RwX+6R#|yTykS5|-`UeU%f0^%_^D)5)T0qvMXRx%+&C)O}=ykeh=?%9QI@QF# z#`?INabL^YNd|Q7I!TX8LJK=u=q_AWz#lGSzUbI~YKKaw2kc2ZUSd+eVWH z;N&fH#r?F*Rf7ozN!EtF3-3Zg(FY)RL_gbS{|5uM&L0n_obcOFEh#qy@}junxTVxX zy@#VsfrbND+ryIsVFzg63|+Z5o^jG9y>hDX()P#eY1=ww9=JUH--ecV)*)W~)mC^E zS2(=+?~wX&qopes<=#;D{^Z@o17+i_m#F3Cze)X=Z0BRh*ZEv;hh(m=WKXQT9nyK= z->bp#1e4BP9eEgH>}&D*c99bKPriF}M60OQ?MoXBELAyo)6r|l$E~)?HSJ$DxIyiG zG4X#e`49iSc$g>u<@~hsptv#gi?-)H5(sK9i}$COs-}3ImWuooE=Y8=4?>Qnwx$c+kN5*EEu?HBU>a%}r&ecIiA6iyB?Dd?lc}#E#C^ zyX)5_VD`rEu&kw+-G!E&qL7rh7yK^>Hxi(R#Bn=F{}SPZNgp1pe-#;l7%EY#j^B@RS$0Emx5j1 z8Q7RJlX$r??bN!!u)NmxY%=>;Jjj5HL)*aE3SJRg3Ws;1aKe%AZSyDfpm(0s%ET+W zg`O~Bd6Yl39YP{SiJ|*H-;B(-IQh63IkRGsm-!x;xl_#F5nJXybTxh=O9J>*sG&cf z_rLCcSY)-kbp!BTHjk1{&!5)FfGynf&}9Z?3F;-H*t;H224+|!@4Z0jDz4@xoE+LF zpuGTQ8qzeq1=1JUl0u(7YI6B>?o02TUBPPdon8;;Zj(KXHy|*uRjop>6ET_Uk9-R! z3ev<%bkkbWyBv31bRh>t&}4@1#DMBfd311Y-=Fc|p+mC+DDi#?42|GDZ2>^E|5{cy z{h}7u%2NmUPIF#ZC7^#E?T5(3A@N;2MZId9*-Gm!I$8^?{#=y4gfKLT?>+t8Yb! zGG-Yc*YAzVKb;N>2&lV@s@y9-RrhJ^JvVROp=iwl=D83v;Ah?uY9G5X9=4wqVOX2a zA&IuRLpc(+yQ_Z9S{?#3|F!kH9CH;lU;MPpXdZkhPNd4=6Vg#q?+TIg0GRIu^@#o+ z(7cUXIU_<>7*6~WZV!F*VepWVx(8v@K`Z1@`vSd%q{7V&B~rG6YB)PAR*KCqw0wyt zOD33(?i%rwE12DY)}HFtCA`5kYx?ks*SQFW(?Qf;S)j}gI&1AVeV8jF=Y`;hK1~`K z0{r;k#!X5UEtCLA36T@C-AVK3d$oXB?)1$|j9(m|>J4SscbNPKbF^f5#ATzUNXOR} zAXq1tnd_wpAKVa@NK^-|i~jD@T=xfP4(>;9nY132zxoGIS8aT>-2w6M0~)R9!#}eI zAF%xZAa}zwyU*XhM0hV^@G@Eby962b@ExoN1h<4Lk*hkb?HiEeI7lzbyy&{ z2X6ohNUegc_9NebFyhQOzyS_QkL|R?4}}^6B(oYvGf?~t-AI}x9b6Y7fbV8p!VYS< z$RH86V#Si2Qin8$DuZ?of^8mKDrbjx(3H-L;<`jn7H_@40tw}(03(t08Nox;R(&Jj z7>U-w2iJ|6@Pm#y@DRB1zM4-R;$I&Q;>Cs51LJlUMhrwU2@!clL%03~6CbQR9zNjG zVPUpkbwRy1BUn?NrQ;I8Iu9K+XrTm(g`fuC9T^-T?oLbJFL;0>KX8IlYrW@Va)O5% zM~KBp|{=k)fU@1+Bzj92P)#`vzGXXFg;$JlvXGkv0z;jVtJ} zxJDrLXygZ6t`jX`6aw7q3{#?H$bg6ZOyoTI#p{P(Ux5(mOh=e-|51w9)R3YPrF^cu z00Ip&QC3HWc1#8i-b4mwAWc5l+-8sx#i&;iIX=LMZzP^jIgsq)R%;DDM~6PyAdtiw8n1;Hgqp9Ci92aiYWz?GD>7xf+2)E zxYV6u0aAm;c6#|K_;@pUC_mb#%_GLg`sIm5j<-~5%QQwv9QPWl;nkSao}?j-5gPaI z<583I*~qsnQpcuajXV%y4B-PskVI|~UO6$6dF_~zz9N0&`fcEYig*DNVJT#WF{F2^B8G~oN;e~tIPCmMV)KW1{i<=7+?Vg zV1O|g<=tI9`wZg!ldWEnN$oD%`RW6XQn16sCltbawq`4c>4Fg9Z8tZkx2>;>ioQKV z=RECUo3x;eH3W??m;*SaMMcX5P!kArA_T2k<+KaEKKCQy_jbay#z`pypJ1y9Mo~0@ zX>Kb9SfGWTgquaIt=&uuvC`JNs=%0Al`#q+#}HgOoNDh!;N-dGT36^=(Tnw#ixpHV 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 z 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¬x#xJ# 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

    k@cd-qGp8fDech?q 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 z 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�Ur*AfYU;chwTucfu{uvyz1sbA{CJ`j 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 fJ4RQEBe~fv0V?X^rOO!j}?&h00 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͐xe0zNYVU~|qoilW8 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�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�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 KqhoO(&;J6L&a`j< literal 0 HcmV?d00001 diff --git a/project/Drivers/BSP/STM32746G-Discovery/_htmresc/mini-st.css b/project/Drivers/BSP/STM32746G-Discovery/_htmresc/mini-st.css new file mode 100644 index 0000000..eb41d56 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/_htmresc/mini-st.css @@ -0,0 +1,1700 @@ +@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. +*/ +/* Progress 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/project/Drivers/BSP/STM32746G-Discovery/_htmresc/st_logo.png b/project/Drivers/BSP/STM32746G-Discovery/_htmresc/st_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8b80057fd3a454a97de1c9d732b7fede82c83227 GIT binary patch literal 18616 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 literal 0 HcmV?d00001 diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c new file mode 100644 index 0000000..7b5a396 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c @@ -0,0 +1,884 @@ +/** + ****************************************************************************** + * @file stm32746g_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 STM32746G-Discovery + * board(MB1191) from STMicroelectronics. + ****************************************************************************** + * @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. + * + ****************************************************************************** + */ + +/* Dependencies +- stm32f7xx_hal_cortex.c +- stm32f7xx_hal_gpio.c +- stm32f7xx_hal_uart.c +- stm32f7xx_hal_i2c.c +EndDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_discovery.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL STM32746G_DISCOVERY_LOW_LEVEL + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32746G_DISCOVERY_LOW_LEVEL Private Types Definitions + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Defines STM32746G_DISCOVERY_LOW_LEVEL Private Defines + * @{ + */ +/** + * @brief STM32746G DISCOVERY BSP Driver version number V2.0.4 + */ +#define __STM32746G_DISCO_BSP_VERSION_MAIN (0x02) /*!< [31:24] main version */ +#define __STM32746G_DISCO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */ +#define __STM32746G_DISCO_BSP_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */ +#define __STM32746G_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32746G_DISCO_BSP_VERSION ((__STM32746G_DISCO_BSP_VERSION_MAIN << 24)\ + |(__STM32746G_DISCO_BSP_VERSION_SUB1 << 16)\ + |(__STM32746G_DISCO_BSP_VERSION_SUB2 << 8 )\ + |(__STM32746G_DISCO_BSP_VERSION_RC)) +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Macros STM32746G_DISCOVERY_LOW_LEVEL Private Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Variables STM32746G_DISCOVERY_LOW_LEVEL Private Variables + * @{ + */ + +const uint32_t GPIO_PIN[LEDn] = {LED1_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] = {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 = {0}; +static I2C_HandleTypeDef hI2cExtHandler = {0}; + +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32746G_DISCOVERY_LOW_LEVEL Private Function 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); + +/* 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 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); +void TS_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 STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions STM32746G_DISCOVERY_LOW_LEVELSTM32746G_DISCOVERY_LOW_LEVEL Exported Functions + * @{ + */ + + /** + * @brief This method returns the STM32746G DISCOVERY BSP Driver revision + * @retval version: 0xXYZR (8bits for each decimal, R for RC) + */ +uint32_t BSP_GetVersion(void) +{ + return __STM32746G_DISCO_BSP_VERSION; +} + +/** + * @brief Configures LED on GPIO. + * @param Led: LED to be configured. + * This parameter can be one of the following values: + * @arg LED1 + * @retval None + */ +void BSP_LED_Init(Led_TypeDef Led) +{ + GPIO_InitTypeDef gpio_init_structure; + GPIO_TypeDef* gpio_led; + + if (Led == LED1) + { + gpio_led = LED1_GPIO_PORT; + /* Enable the GPIO_LED clock */ + LED1_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(gpio_led, &gpio_init_structure); + + /* By default, turn off LED */ + HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET); + } +} + +/** + * @brief DeInit LEDs. + * @param Led: LED to be configured. + * This parameter can be one of the following values: + * @arg LED1 + * @note Led DeInit does not disable the GPIO clock + * @retval None + */ +void BSP_LED_DeInit(Led_TypeDef Led) +{ + GPIO_InitTypeDef gpio_init_structure; + GPIO_TypeDef* gpio_led; + + if (Led == LED1) + { + gpio_led = LED1_GPIO_PORT; + /* Turn off LED */ + HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET); + /* Configure the GPIO_LED pin */ + gpio_init_structure.Pin = GPIO_PIN[Led]; + HAL_GPIO_DeInit(gpio_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 + * @retval None + */ +void BSP_LED_On(Led_TypeDef Led) +{ + GPIO_TypeDef* gpio_led; + + if (Led == LED1) /* Switch On LED connected to GPIO */ + { + gpio_led = LED1_GPIO_PORT; + HAL_GPIO_WritePin(gpio_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 LED1 + * @retval None + */ +void BSP_LED_Off(Led_TypeDef Led) +{ + GPIO_TypeDef* gpio_led; + + if (Led == LED1) /* Switch Off LED connected to GPIO */ + { + gpio_led = LED1_GPIO_PORT; + HAL_GPIO_WritePin(gpio_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 LED1 + * @retval None + */ +void BSP_LED_Toggle(Led_TypeDef Led) +{ + GPIO_TypeDef* gpio_led; + + if (Led == LED1) /* Toggle LED connected to GPIO */ + { + gpio_led = LED1_GPIO_PORT; + HAL_GPIO_TogglePin(gpio_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 + * @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 STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) + * are mapped on the same push button named "User" + * on the board serigraphy. + * @retval None + */ +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 STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) + * are mapped on the same push button named "User" + * on the board serigraphy. + * @note PB DeInit does not disable the GPIO clock + * @retval None + */ +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 STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) + * are mapped on the same push button named "User" + * 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. + * @retval None + */ +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_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. + * @retval None + */ +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, 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 + * @retval None + */ +static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler) +{ + GPIO_InitTypeDef gpio_init_structure; + + if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler)) + { + /* AUDIO and LCD 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_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; + 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, 0); + 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, 0); + HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn); + } + else + { + /* External, camera 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_FAST; + gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_SDA_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; + 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, 0); + 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, 0); + HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_ER_IRQn); + } +} + +/** + * @brief Initializes I2C HAL. + * @param i2c_handler : I2C handler + * @retval None + */ +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, camera and Arduino connector I2C configuration */ + i2c_handler->Instance = DISCOVERY_EXT_I2Cx; + } + i2c_handler->Init.Timing = DISCOVERY_I2Cx_TIMING; + 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 Number of read data + */ +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-Initiaize 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 + * @retval None + */ +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); +} + +/******************************************************************************* + LINK OPERATIONS +*******************************************************************************/ + +/********************************* LINK AUDIO *********************************/ + +/** + * @brief Initializes Audio low level. + * @retval None + */ +void AUDIO_IO_Init(void) +{ + I2Cx_Init(&hI2cAudioHandler); +} + +/** + * @brief Deinitializes Audio low level. + * @retval None + */ +void AUDIO_IO_DeInit(void) +{ +} + +/** + * @brief Writes a single data. + * @param Addr: I2C address + * @param Reg: Reg address + * @param Value: Data to be written + * @retval None + */ +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 + * @retval None + */ +void AUDIO_IO_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/********************************* LINK CAMERA ********************************/ + +/** + * @brief Initializes Camera low level. + * @retval None + */ +void CAMERA_IO_Init(void) +{ + I2Cx_Init(&hI2cExtHandler); +} + +/** + * @brief Camera writes single data. + * @param Addr: I2C address + * @param Reg: Register address + * @param Value: Data to be written + * @retval None + */ +void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value) +{ + I2Cx_WriteMultiple(&hI2cExtHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1); +} + +/** + * @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) +{ + uint8_t read_value = 0; + + I2Cx_ReadMultiple(&hI2cExtHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1); + + return read_value; +} + +/** + * @brief Camera delay + * @param Delay: Delay in ms + * @retval None + */ +void CAMERA_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/******************************** LINK I2C EEPROM *****************************/ + +/** + * @brief Initializes peripherals used by the I2C EEPROM driver. + * @retval None + */ +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 TOUCHSCREEN *********************************/ + +/** + * @brief Initializes Touchscreen low level. + * @retval None + */ +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 + * @retval None + */ +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 TS delay + * @param Delay: Delay in ms + * @retval None + */ +void TS_IO_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h new file mode 100644 index 0000000..3064f37 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h @@ -0,0 +1,321 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery.h + * @author MCD Application Team + * @brief This file contains definitions for STM32746G_DISCOVERY's LEDs, + * push-buttons and COM ports hardware resources. + ****************************************************************************** + * @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 __STM32746G_DISCOVERY_H +#define __STM32746G_DISCOVERY_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Types STM32746G_DISCOVERY_LOW_LEVEL Exported Types + * @{ + */ +typedef enum +{ +LED1 = 0, +LED_GREEN = LED1, +}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 +{ + COM1 = 0, + COM2 = 1 +}COM_TypeDef; +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Constants STM32746G_DISCOVERY_LOW_LEVEL Exported Constants + * @{ + */ + +/** + * @brief Define for STM32746G_DISCOVERY board + */ +#if !defined (USE_STM32746G_DISCO) + #define USE_STM32746G_DISCO +#endif + +/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_LED + * @{ + */ + +#define LEDn ((uint8_t)1) + +#define LED1_GPIO_PORT GPIOI +#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() +#define LED1_PIN GPIO_PIN_1 + +/** + * @} + */ + +/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_BUTTON + * @{ + */ +#define BUTTONn ((uint8_t)3) + +/** + * @brief Wakeup push-button + */ +#define WAKEUP_BUTTON_PIN GPIO_PIN_11 +#define WAKEUP_BUTTON_GPIO_PORT GPIOI +#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() +#define WAKEUP_BUTTON_EXTI_IRQn EXTI15_10_IRQn + +/** + * @brief Tamper push-button + */ +#define TAMPER_BUTTON_PIN GPIO_PIN_11 +#define TAMPER_BUTTON_GPIO_PORT GPIOI +#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() +#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn + +/** + * @brief Key push-button + */ +#define KEY_BUTTON_PIN GPIO_PIN_11 +#define KEY_BUTTON_GPIO_PORT GPIOI +#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_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()) + +/** + * @} + */ + +/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_SIGNAL + * @{ + */ +#define SIGNALn ((uint8_t)1) + +/** + * @brief SD-detect signal + */ +#define SD_DETECT_PIN GPIO_PIN_13 +#define SD_DETECT_GPIO_PORT GPIOC +#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() +#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() +#define SD_DETECT_EXTI_IRQn EXTI15_10_IRQn + +/** + * @brief Touch screen interrupt signal + */ +#define TS_INT_PIN GPIO_PIN_13 +#define TS_INT_GPIO_PORT GPIOI +#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() +#define TS_INT_EXTI_IRQn EXTI15_10_IRQn + +/** + * @} + */ + +/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_COM + * @{ + */ +#define COMn ((uint8_t)1) + +/** + * @brief Definition for COM port1, connected to USART1 + */ +#define DISCOVERY_COM1 USART1 +#define DISCOVERY_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE() +#define DISCOVERY_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE() + +#define DISCOVERY_COM1_TX_PIN GPIO_PIN_9 +#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_USART1 + +#define DISCOVERY_COM1_RX_PIN GPIO_PIN_7 +#define DISCOVERY_COM1_RX_GPIO_PORT GPIOB +#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE() +#define DISCOVERY_COM1_RX_AF GPIO_AF7_USART1 + +#define DISCOVERY_COM1_IRQn USART1_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 LCD_I2C_ADDRESS ((uint16_t)0x70) +#define CAMERA_I2C_ADDRESS ((uint16_t)0x60) +#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) + +/* I2C clock speed configuration (in Hz) + WARNING: + Make sure that this define is not already declared in other files (ie. + stm32746g_discovery.h file). It can be used in parallel by other modules. */ +#ifndef I2C_SPEED + #define I2C_SPEED ((uint32_t)100000) +#endif /* I2C_SPEED */ + +/* User can use this section to tailor I2Cx/I2Cx instance used and associated + resources */ +/* Definition for AUDIO and LCD I2Cx resources */ +#define DISCOVERY_AUDIO_I2Cx I2C3 +#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE() __HAL_RCC_I2C3_CLK_ENABLE() +#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() +#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE() + +#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET() __HAL_RCC_I2C3_FORCE_RESET() +#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET() __HAL_RCC_I2C3_RELEASE_RESET() + +/* Definition for I2Cx Pins */ +#define DISCOVERY_AUDIO_I2Cx_SCL_PIN GPIO_PIN_7 +#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT GPIOH +#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF GPIO_AF4_I2C3 +#define DISCOVERY_AUDIO_I2Cx_SDA_PIN GPIO_PIN_8 + +/* I2C interrupt requests */ +#define DISCOVERY_AUDIO_I2Cx_EV_IRQn I2C3_EV_IRQn +#define DISCOVERY_AUDIO_I2Cx_ER_IRQn I2C3_ER_IRQn + +/* Definition for external, camera and Arduino connector I2Cx resources */ +#define DISCOVERY_EXT_I2Cx I2C1 +#define DISCOVERY_EXT_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_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_I2C1_FORCE_RESET() +#define DISCOVERY_EXT_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET() + +/* Definition for I2Cx Pins */ +#define DISCOVERY_EXT_I2Cx_SCL_PIN GPIO_PIN_8 +#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT GPIOB +#define DISCOVERY_EXT_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1 +#define DISCOVERY_EXT_I2Cx_SDA_PIN GPIO_PIN_9 + +/* I2C interrupt requests */ +#define DISCOVERY_EXT_I2Cx_EV_IRQn I2C1_EV_IRQn +#define DISCOVERY_EXT_I2Cx_ER_IRQn I2C1_ER_IRQn + +/* I2C TIMING Register define when I2C clock source is SYSCLK */ +/* I2C TIMING is calculated from APB1 source clock = 50 MHz */ +/* Due to the big MOFSET capacity for adapting the camera level the rising time is very large (>1us) */ +/* 0x40912732 takes in account the big rising and aims a clock of 100khz */ +#ifndef DISCOVERY_I2Cx_TIMING +#define DISCOVERY_I2Cx_TIMING ((uint32_t)0x40912732) +#endif /* DISCOVERY_I2Cx_TIMING */ + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Macros STM32746G_DISCOVERY_LOW_LEVEL Exported Macros + * @{ + */ +/** + * @} + */ + +/** @addtogroup STM32746G_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 /* __STM32746G_DISCOVERY_H */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c new file mode 100644 index 0000000..369c2af --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c @@ -0,0 +1,1647 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_lcd.c + * @author MCD Application Team + * @brief This file includes the driver for Liquid Crystal Display (LCD) module + * mounted on STM32746G-Discovery board. + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + @verbatim + 1. How To use this driver: + -------------------------- + - This driver is used to drive directly an LCD TFT using the LTDC controller. + - This driver uses timing and setting for RK043FN48H LCD. + + 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. + @endverbatim + ****************************************************************************** + */ + +/* Dependencies +- stm32746g_discovery.c +- stm32746g_discovery_sdram.c +- stm32f7xx_hal_ltdc.c +- stm32f7xx_hal_ltdc_ex.c +- stm32f7xx_hal_dma2d.c +- stm32f7xx_hal_rcc_ex.c +- stm32f7xx_hal_gpio.c +- stm32f7xx_hal_cortex.c +- rk043fn48h.h +- fonts.h +- font24.c +- font20.c +- font16.c +- font12.c +- font8.c" +EndDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_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 STM32746G_DISCOVERY + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY_LCD + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Private_TypesDefinitions STM32746G_DISCOVERY_LCD Private Types Definitions + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Private_Defines STM32746G_DISCOVERY LCD Private Defines + * @{ + */ +#define POLY_X(Z) ((int32_t)((Points + Z)->X)) +#define POLY_Y(Z) ((int32_t)((Points + Z)->Y)) +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Private_Macros STM32746G_DISCOVERY_LCD Private Macros + * @{ + */ +#define ABS(X) ((X) > 0 ? (X) : -(X)) +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Private_Variables STM32746G_DISCOVERY_LCD Private Variables + * @{ + */ +LTDC_HandleTypeDef hLtdcHandler; +static DMA2D_HandleTypeDef hDma2dHandler; + +/* Default LCD configuration with LCD Layer 1 */ +static uint32_t ActiveLayer = 0; +static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER]; +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Private_FunctionPrototypes STM32746G_DISCOVERY_LCD Private Function Prototypes + * @{ + */ +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 STM32746G_DISCOVERY_LCD_Exported_Functions STM32746G_DISCOVERY_LCD Exported Functions + * @{ + */ + +/** + * @brief Initializes the LCD. + * @retval LCD state + */ +uint8_t BSP_LCD_Init(void) +{ + /* Select the used LCD */ + + /* The RK043FN48H LCD 480x272 is selected */ + /* Timing Configuration */ + hLtdcHandler.Init.HorizontalSync = (RK043FN48H_HSYNC - 1); + hLtdcHandler.Init.VerticalSync = (RK043FN48H_VSYNC - 1); + hLtdcHandler.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1); + hLtdcHandler.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1); + hLtdcHandler.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1); + hLtdcHandler.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1); + hLtdcHandler.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1); + hLtdcHandler.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1); + + /* LCD clock configuration */ + BSP_LCD_ClockConfig(&hLtdcHandler, NULL); + + /* Initialize the LCD pixel width and pixel height */ + hLtdcHandler.LayerCfg->ImageWidth = RK043FN48H_WIDTH; + hLtdcHandler.LayerCfg->ImageHeight = RK043FN48H_HEIGHT; + + /* Background value */ + hLtdcHandler.Init.Backcolor.Blue = 0; + hLtdcHandler.Init.Backcolor.Green = 0; + hLtdcHandler.Init.Backcolor.Red = 0; + + /* Polarity */ + hLtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL; + hLtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL; + hLtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL; + hLtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC; + hLtdcHandler.Instance = LTDC; + + if(HAL_LTDC_GetState(&hLtdcHandler) == HAL_LTDC_STATE_RESET) + { + /* Initialize the LCD Msp: this __weak function can be rewritten by the application */ + BSP_LCD_MspInit(&hLtdcHandler, NULL); + } + HAL_LTDC_Init(&hLtdcHandler); + + /* Assert display enable LCD_DISP pin */ + HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET); + + /* Assert backlight LCD_BL_CTRL pin */ + HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET); + +#if !defined(DATA_IN_ExtSDRAM) + /* Initialize the SDRAM */ + BSP_SDRAM_Init(); +#endif + + /* Initialize the font */ + BSP_LCD_SetFont(&LCD_DEFAULT_FONT); + + return LCD_OK; +} + +/** + * @brief DeInitializes the LCD. + * @retval LCD state + */ +uint8_t BSP_LCD_DeInit(void) +{ + /* Initialize the hLtdcHandler Instance parameter */ + hLtdcHandler.Instance = LTDC; + + /* Disable LTDC block */ + __HAL_LTDC_DISABLE(&hLtdcHandler); + + /* DeInit the LTDC */ + HAL_LTDC_DeInit(&hLtdcHandler); + + /* DeInit the LTDC MSP : this __weak function can be rewritten by the application */ + BSP_LCD_MspDeInit(&hLtdcHandler, NULL); + + return LCD_OK; +} + +/** + * @brief Gets the LCD X size. + * @retval Used LCD X size + */ +uint32_t BSP_LCD_GetXSize(void) +{ + return hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth; +} + +/** + * @brief Gets the LCD Y size. + * @retval Used LCD Y size + */ +uint32_t BSP_LCD_GetYSize(void) +{ + return hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight; +} + +/** + * @brief Set the LCD X size. + * @param imageWidthPixels : image width in pixels unit + * @retval None + */ +void BSP_LCD_SetXSize(uint32_t imageWidthPixels) +{ + hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels; +} + +/** + * @brief Set the LCD Y size. + * @param imageHeightPixels : image height in lines unit + * @retval None + */ +void BSP_LCD_SetYSize(uint32_t imageHeightPixels) +{ + hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels; +} + +/** + * @brief Initializes the LCD layer in ARGB8888 format (32 bits per pixel). + * @param LayerIndex: Layer foreground or background + * @param FB_Address: Layer frame buffer + * @retval None + */ +void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address) +{ + LCD_LayerCfgTypeDef layer_cfg; + + /* Layer Init */ + layer_cfg.WindowX0 = 0; + layer_cfg.WindowX1 = BSP_LCD_GetXSize(); + layer_cfg.WindowY0 = 0; + layer_cfg.WindowY1 = BSP_LCD_GetYSize(); + layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888; + layer_cfg.FBStartAdress = FB_Address; + layer_cfg.Alpha = 255; + layer_cfg.Alpha0 = 0; + layer_cfg.Backcolor.Blue = 0; + layer_cfg.Backcolor.Green = 0; + layer_cfg.Backcolor.Red = 0; + layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; + layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; + layer_cfg.ImageWidth = BSP_LCD_GetXSize(); + layer_cfg.ImageHeight = BSP_LCD_GetYSize(); + + HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex); + + DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE; + DrawProp[LayerIndex].pFont = &Font24; + DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; +} + +/** + * @brief Initializes the LCD layer in RGB565 format (16 bits per pixel). + * @param LayerIndex: Layer foreground or background + * @param FB_Address: Layer frame buffer + * @retval None + */ +void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address) +{ + LCD_LayerCfgTypeDef layer_cfg; + + /* Layer Init */ + layer_cfg.WindowX0 = 0; + layer_cfg.WindowX1 = BSP_LCD_GetXSize(); + layer_cfg.WindowY0 = 0; + layer_cfg.WindowY1 = BSP_LCD_GetYSize(); + layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565; + layer_cfg.FBStartAdress = FB_Address; + layer_cfg.Alpha = 255; + layer_cfg.Alpha0 = 0; + layer_cfg.Backcolor.Blue = 0; + layer_cfg.Backcolor.Green = 0; + layer_cfg.Backcolor.Red = 0; + layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA; + layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA; + layer_cfg.ImageWidth = BSP_LCD_GetXSize(); + layer_cfg.ImageHeight = BSP_LCD_GetYSize(); + + HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, 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 + * @retval None + */ +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 + * @retval None + */ +void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State) +{ + if(State == ENABLE) + { + __HAL_LTDC_LAYER_ENABLE(&hLtdcHandler, LayerIndex); + } + else + { + __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, LayerIndex); + } + __HAL_LTDC_RELOAD_CONFIG(&hLtdcHandler); +} + +/** + * @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(&hLtdcHandler, LayerIndex); + } + else + { + __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, 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 + * @retval None + */ +void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency) +{ + HAL_LTDC_SetAlpha(&hLtdcHandler, 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(&hLtdcHandler, Transparency, LayerIndex); +} + +/** + * @brief Sets an LCD layer frame buffer address. + * @param LayerIndex: Layer foreground or background + * @param Address: New LCD frame buffer value + * @retval None + */ +void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address) +{ + HAL_LTDC_SetAddress(&hLtdcHandler, 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(&hLtdcHandler, 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 + * @retval None + */ +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(&hLtdcHandler, Width, Height, LayerIndex); + + /* Reconfigure the layer position */ + HAL_LTDC_SetWindowPosition(&hLtdcHandler, 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(&hLtdcHandler, Width, Height, LayerIndex); + + /* Reconfigure the layer position */ + HAL_LTDC_SetWindowPosition_NoReload(&hLtdcHandler, Xpos, Ypos, LayerIndex); +} + +/** + * @brief Configures and sets the color keying. + * @param LayerIndex: Layer foreground or background + * @param RGBValue: Color reference + * @retval None + */ +void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue) +{ + /* Configure and Enable the color Keying for LCD Layer */ + HAL_LTDC_ConfigColorKeying(&hLtdcHandler, RGBValue, LayerIndex); + HAL_LTDC_EnableColorKeying(&hLtdcHandler, 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(&hLtdcHandler, RGBValue, LayerIndex); + HAL_LTDC_EnableColorKeying_NoReload(&hLtdcHandler, LayerIndex); +} + +/** + * @brief Disables the color keying. + * @param LayerIndex: Layer foreground or background + * @retval None + */ +void BSP_LCD_ResetColorKeying(uint32_t LayerIndex) +{ + /* Disable the color Keying for LCD Layer */ + HAL_LTDC_DisableColorKeying(&hLtdcHandler, 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(&hLtdcHandler, 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_Reload(uint32_t ReloadType) +{ + HAL_LTDC_Reload (&hLtdcHandler, ReloadType); +} + +/** + * @brief Sets the LCD text color. + * @param Color: Text color code ARGB(8-8-8-8) + * @retval None + */ +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) + * @retval None + */ +void BSP_LCD_SetBackColor(uint32_t Color) +{ + DrawProp[ActiveLayer].BackColor = Color; +} + +/** + * @brief Gets the LCD background color. + * @retval Used background colour + */ +uint32_t BSP_LCD_GetBackColor(void) +{ + return DrawProp[ActiveLayer].BackColor; +} + +/** + * @brief Sets the LCD text font. + * @param fonts: Layer font to be used + * @retval None + */ +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(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888) + { + /* Read data value from SDRAM memory */ + ret = *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))); + } + else if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888) + { + /* Read data value from SDRAM memory */ + ret = (*(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF); + } + else if((hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \ + (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \ + (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88)) + { + /* Read data value from SDRAM memory */ + ret = *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); + } + else + { + /* Read data value from SDRAM memory */ + ret = *(__IO uint8_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))); + } + + return ret; +} + +/** + * @brief Clears the hole LCD. + * @param Color: Color of the background + * @retval None + */ +void BSP_LCD_Clear(uint32_t Color) +{ + /* Clear the LCD */ + LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color); +} + +/** + * @brief Clears the selected line. + * @param Line: Line to be cleared + * @retval None + */ +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 + * @retval None + */ +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 + * @retval None + */ +void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode) +{ + uint16_t ref_column = 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: + { + ref_column = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2; + break; + } + case LEFT_MODE: + { + ref_column = Xpos; + break; + } + case RIGHT_MODE: + { + ref_column = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width); + break; + } + default: + { + ref_column = Xpos; + break; + } + } + + /* Check that the Start column is located in the screen */ + if ((ref_column < 1) || (ref_column >= 0x8000)) + { + ref_column = 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(ref_column, Ypos, *Text); + /* Decrement the column position by 16 */ + ref_column += 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 + * @retval None + */ +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 + * @retval None + */ +void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) +{ + uint32_t Xaddress = 0; + + /* Get the line address */ + if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) + { /* RGB565 format */ + Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos); + } + else + { /* ARGB8888 format */ + Xaddress = (hLtdcHandler.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 + * @retval None + */ +void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length) +{ + uint32_t Xaddress = 0; + + /* Get the line address */ + if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) + { /* RGB565 format */ + Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos); + } + else + { /* ARGB8888 format */ + Xaddress = (hLtdcHandler.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 + * @retval None + */ +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, num_add = 0, num_pixels = 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; + num_add = deltay; + num_pixels = 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; + num_add = deltax; + num_pixels = deltay; /* There are more y-values than x-values */ + } + + for (curpixel = 0; curpixel <= num_pixels; curpixel++) + { + BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */ + num += num_add; /* 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 + * @retval None + */ +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 + * @retval None + */ +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[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor); + + BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor); + + 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 + * @retval None + */ +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 + * @retval None + */ +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 pixel on LCD. + * @param Xpos: X position + * @param Ypos: Y position + * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8) + * @retval None + */ +void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code) +{ + /* Write data value to all SDRAM memory */ + if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) + { /* RGB565 format */ + *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) = (uint16_t)RGB_Code; + } + else + { /* ARGB8888 format */ + *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code; + } +} + +/** + * @brief Draws a bitmap picture loaded in the internal Flash in ARGB888 format (32 bits per pixel). + * @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 + * @retval None + */ +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 input_color_mode = 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 = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4)); + + /* Get the layer pixel format */ + if ((bit_pixel/8) == 4) + { + input_color_mode = CM_ARGB8888; + } + else if ((bit_pixel/8) == 2) + { + input_color_mode = CM_RGB565; + } + else + { + input_color_mode = 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, input_color_mode); + + /* 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 + * @retval None + */ +void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height) +{ + uint32_t x_address = 0; + + /* Set the text color */ + BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor); + + /* Get the rectangle start address */ + if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) + { /* RGB565 format */ + x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos); + } + else + { /* ARGB8888 format */ + x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos); + } + /* Fill the rectangle */ + LL_FillBuffer(ActiveLayer, (uint32_t *)x_address, 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 + * @retval None + */ +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[ActiveLayer].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[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 + * @retval None + */ +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 + * @retval None + */ +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. + * @retval None + */ +void BSP_LCD_DisplayOn(void) +{ + /* Display On */ + __HAL_LTDC_ENABLE(&hLtdcHandler); + HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET); /* Assert LCD_DISP pin */ + HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET); /* Assert LCD_BL_CTRL pin */ +} + +/** + * @brief Disables the display. + * @retval None + */ +void BSP_LCD_DisplayOff(void) +{ + /* Display Off */ + __HAL_LTDC_DISABLE(&hLtdcHandler); + HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_RESET); /* De-assert LCD_DISP pin */ + HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_RESET);/* De-assert LCD_BL_CTRL pin */ +} + +/** + * @brief Initializes the LTDC MSP. + * @param hltdc: LTDC handle + * @param Params + * @retval None + */ +__weak void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params) +{ + 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_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOJ_CLK_ENABLE(); + __HAL_RCC_GPIOK_CLK_ENABLE(); + LCD_DISP_GPIO_CLK_ENABLE(); + LCD_BL_CTRL_GPIO_CLK_ENABLE(); + + /*** LTDC Pins configuration ***/ + /* GPIOE configuration */ + gpio_init_structure.Pin = GPIO_PIN_4; + 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(GPIOE, &gpio_init_structure); + + /* GPIOG configuration */ + gpio_init_structure.Pin = GPIO_PIN_12; + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + gpio_init_structure.Alternate = GPIO_AF9_LTDC; + HAL_GPIO_Init(GPIOG, &gpio_init_structure); + + /* GPIOI LTDC alternate configuration */ + gpio_init_structure.Pin = GPIO_PIN_9 | GPIO_PIN_10 | \ + GPIO_PIN_14 | GPIO_PIN_15; + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + 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_13 | GPIO_PIN_14 | GPIO_PIN_15; + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + 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_4 | \ + GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; + gpio_init_structure.Mode = GPIO_MODE_AF_PP; + gpio_init_structure.Alternate = GPIO_AF14_LTDC; + HAL_GPIO_Init(GPIOK, &gpio_init_structure); + + /* LCD_DISP GPIO configuration */ + gpio_init_structure.Pin = LCD_DISP_PIN; /* LCD_DISP pin has to be manually controlled */ + gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP; + HAL_GPIO_Init(LCD_DISP_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 BSP_LCD MSP. + * @param hltdc: LTDC handle + * @param Params + * @retval None + */ +__weak void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params) +{ + GPIO_InitTypeDef gpio_init_structure; + + /* Disable LTDC block */ + __HAL_LTDC_DISABLE(hltdc); + + /* LTDC Pins deactivation */ + + /* GPIOE deactivation */ + gpio_init_structure.Pin = GPIO_PIN_4; + HAL_GPIO_DeInit(GPIOE, gpio_init_structure.Pin); + + /* GPIOG deactivation */ + gpio_init_structure.Pin = GPIO_PIN_12; + HAL_GPIO_DeInit(GPIOG, gpio_init_structure.Pin); + + /* GPIOI deactivation */ + gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12 | \ + GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; + HAL_GPIO_DeInit(GPIOI, gpio_init_structure.Pin); + + /* GPIOJ deactivation */ + 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_13 | GPIO_PIN_14 | GPIO_PIN_15; + HAL_GPIO_DeInit(GPIOJ, gpio_init_structure.Pin); + + /* GPIOK deactivation */ + gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \ + GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; + HAL_GPIO_DeInit(GPIOK, gpio_init_structure.Pin); + + /* Disable LTDC clock */ + __HAL_RCC_LTDC_CLK_DISABLE(); + + /* GPIO pins clock can be shut down in the application + by surcharging this __weak function */ +} + +/** + * @brief Clock Config. + * @param hltdc: LTDC handle + * @param Params + * @note This API is called by BSP_LCD_Init() + * Being __weak it can be overwritten by the application + * @retval None + */ +__weak void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params) +{ + static RCC_PeriphCLKInitTypeDef periph_clk_init_struct; + + /* RK043FN48H 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 = RK043FN48H_FREQUENCY_DIVIDER; + periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_4; + HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct); +} + + +/******************************************************************************* + 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 + * @retval None + */ +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 + * @retval None + */ +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, num_add = 0, num_pixels = 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; + num_add = deltay; + num_pixels = 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; + num_add = deltax; + num_pixels = deltay; /* There are more y-values than x-values */ + } + + for (curpixel = 0; curpixel <= num_pixels; curpixel++) + { + BSP_LCD_DrawLine(x, y, x3, y3); + + num += num_add; /* 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 + * @retval None + */ +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 */ + hDma2dHandler.Init.Mode = DMA2D_R2M; + if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) + { /* RGB565 format */ + hDma2dHandler.Init.ColorMode = DMA2D_RGB565; + } + else + { /* ARGB8888 format */ + hDma2dHandler.Init.ColorMode = DMA2D_ARGB8888; + } + hDma2dHandler.Init.OutputOffset = OffLine; + + hDma2dHandler.Instance = DMA2D; + + /* DMA2D Initialization */ + if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) + { + if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, LayerIndex) == HAL_OK) + { + if (HAL_DMA2D_Start(&hDma2dHandler, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK) + { + /* Polling For DMA transfer */ + HAL_DMA2D_PollForTransfer(&hDma2dHandler, 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 + * @retval None + */ +static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode) +{ + /* Configure the DMA2D Mode, Color Mode and output offset */ + hDma2dHandler.Init.Mode = DMA2D_M2M_PFC; + hDma2dHandler.Init.ColorMode = DMA2D_ARGB8888; + hDma2dHandler.Init.OutputOffset = 0; + + /* Foreground Configuration */ + hDma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA; + hDma2dHandler.LayerCfg[1].InputAlpha = 0xFF; + hDma2dHandler.LayerCfg[1].InputColorMode = ColorMode; + hDma2dHandler.LayerCfg[1].InputOffset = 0; + + hDma2dHandler.Instance = DMA2D; + + /* DMA2D Initialization */ + if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) + { + if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, 1) == HAL_OK) + { + if (HAL_DMA2D_Start(&hDma2dHandler, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK) + { + /* Polling For DMA transfer */ + HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10); + } + } + } +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h new file mode 100644 index 0000000..04b2aa3 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h @@ -0,0 +1,249 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_lcd.h + * @author MCD Application Team + * @brief This file contains the common defines and functions prototypes for + * the stm32746g_discovery_lcd.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 __STM32746G_DISCOVERY_LCD_H +#define __STM32746G_DISCOVERY_LCD_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +/* Include LCD component Driver */ +/* LCD RK043FN48H-CT672B 4,3" 480x272 pixels */ +#include "../Components/rk043fn48h/rk043fn48h.h" + +/* Include SDRAM Driver */ +#include "stm32746g_discovery_sdram.h" + +#include "stm32746g_discovery.h" +#include "../../../Utilities/Fonts/fonts.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY_LCD + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Types STM32746G_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 */ +}Text_AlignModeTypdef; + +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Constants STM32746G_DISCOVERY_LCD Exported Constants + * @{ + */ +#define MAX_LAYER_NUMBER ((uint32_t)2) + +#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef + +#define LTDC_ACTIVE_LAYER ((uint32_t)1) /* Layer 1 */ +/** + * @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 FB_StartAddress + */ +#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000) + +/** + * @brief LCD color + */ +#define LCD_COLOR_BLUE ((uint32_t)0xFF0000FF) +#define LCD_COLOR_GREEN ((uint32_t)0xFF00FF00) +#define LCD_COLOR_RED ((uint32_t)0xFFFF0000) +#define LCD_COLOR_CYAN ((uint32_t)0xFF00FFFF) +#define LCD_COLOR_MAGENTA ((uint32_t)0xFFFF00FF) +#define LCD_COLOR_YELLOW ((uint32_t)0xFFFFFF00) +#define LCD_COLOR_LIGHTBLUE ((uint32_t)0xFF8080FF) +#define LCD_COLOR_LIGHTGREEN ((uint32_t)0xFF80FF80) +#define LCD_COLOR_LIGHTRED ((uint32_t)0xFFFF8080) +#define LCD_COLOR_LIGHTCYAN ((uint32_t)0xFF80FFFF) +#define LCD_COLOR_LIGHTMAGENTA ((uint32_t)0xFFFF80FF) +#define LCD_COLOR_LIGHTYELLOW ((uint32_t)0xFFFFFF80) +#define LCD_COLOR_DARKBLUE ((uint32_t)0xFF000080) +#define LCD_COLOR_DARKGREEN ((uint32_t)0xFF008000) +#define LCD_COLOR_DARKRED ((uint32_t)0xFF800000) +#define LCD_COLOR_DARKCYAN ((uint32_t)0xFF008080) +#define LCD_COLOR_DARKMAGENTA ((uint32_t)0xFF800080) +#define LCD_COLOR_DARKYELLOW ((uint32_t)0xFF808000) +#define LCD_COLOR_WHITE ((uint32_t)0xFFFFFFFF) +#define LCD_COLOR_LIGHTGRAY ((uint32_t)0xFFD3D3D3) +#define LCD_COLOR_GRAY ((uint32_t)0xFF808080) +#define LCD_COLOR_DARKGRAY ((uint32_t)0xFF404040) +#define LCD_COLOR_BLACK ((uint32_t)0xFF000000) +#define LCD_COLOR_BROWN ((uint32_t)0xFFA52A2A) +#define LCD_COLOR_ORANGE ((uint32_t)0xFFFFA500) +#define LCD_COLOR_TRANSPARENT ((uint32_t)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 special pins + */ +/* Display enable pin */ +#define LCD_DISP_PIN GPIO_PIN_12 +#define LCD_DISP_GPIO_PORT GPIOI +#define LCD_DISP_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() +#define LCD_DISP_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE() + +/* Backlight control pin */ +#define LCD_BL_CTRL_PIN GPIO_PIN_3 +#define LCD_BL_CTRL_GPIO_PORT GPIOK +#define LCD_BL_CTRL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOK_CLK_ENABLE() +#define LCD_BL_CTRL_GPIO_CLK_DISABLE() __HAL_RCC_GPIOK_CLK_DISABLE() + +/** + * @} + */ + +/** @addtogroup STM32746G_DISCOVERY_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); +void BSP_LCD_SetXSize(uint32_t imageWidthPixels); +void BSP_LCD_SetYSize(uint32_t imageHeightPixels); + +/* Functions using the LTDC controller */ +void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer); +void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address); +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_Reload(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); + +/* These functions can be modified in case the current settings + need to be changed for specific application needs */ +void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params); +void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params); +void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32746G_DISCOVERY_LCD_H */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c new file mode 100644 index 0000000..819d748 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c @@ -0,0 +1,782 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_qspi.c + * @author MCD Application Team + * @brief This file includes a standard driver for the N25Q128A QSPI + * memory mounted on STM32746G-Discovery board. + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + @verbatim + ============================================================================== + ##### How to use this driver ##### + ============================================================================== + [..] + (#) This driver is used to drive the N25Q128A QSPI external + memory mounted on STM32746G-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 + ****************************************************************************** + */ + +/* Dependencies +- stm32f7xx_hal_qspi.c +- stm32f7xx_hal_gpio.c +- stm32f7xx_hal_cortex.c +- stm32f7xx_hal_rcc_ex.h +- n25q128a.h +EndDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_discovery_qspi.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_QSPI STM32746G-Discovery QSPI + * @{ + */ + + +/* Private variables ---------------------------------------------------------*/ + +/** @defgroup STM32746G_DISCOVERY_QSPI_Private_Variables STM32746G_DISCOVERY QSPI Private Variables + * @{ + */ +QSPI_HandleTypeDef QSPIHandle; + +/** + * @} + */ + + + +/* Private functions ---------------------------------------------------------*/ + +/** @defgroup STM32746G_DISCOVERY_QSPI_Private_Functions STM32746G_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 STM32746G_DISCOVERY_QSPI_Exported_Functions STM32746G_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 = 216 MHz/(1+1) = 108 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_6_CYCLE; /* Min 50ns for nonRead */ + 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 */ + MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_3_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_6_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 adress 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; + s_mem_mapped_cfg.TimeOutPeriod = 0; + + if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK) + { + return QSPI_ERROR; + } + + return QSPI_OK; +} + +/** + * @} + */ + +/** @addtogroup STM32746G_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 + * @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_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_QUADSPI; + 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_QUADSPI; + 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_AF9_QUADSPI; + 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_AF9_QUADSPI; + 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_QUADSPI; + 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_QUADSPI; + 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, 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 + * @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 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(); +} + +/** + * @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(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 + * @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(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 + * @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(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 + * @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 = 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/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h new file mode 100644 index 0000000..f417cea --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h @@ -0,0 +1,152 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_qspi.h + * @author MCD Application Team + * @brief This file contains the common defines and functions prototypes for + * the stm32746g_discovery_qspi.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. + * + ****************************************************************************** + */ + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32746G_DISCOVERY_QSPI_H +#define __STM32746G_DISCOVERY_QSPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" +#include "../Components/n25q128a/n25q128a.h" + +/** @addtogroup STM32746G_DISCOVERY_QSPI + * @{ + */ + + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup STM32746G_DISCOVERY_QSPI_Exported_Constants STM32746G_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_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() +#define QSPI_D0_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() +#define QSPI_D1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_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_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_2 +#define QSPI_CLK_GPIO_PORT GPIOB +#define QSPI_D0_PIN GPIO_PIN_11 +#define QSPI_D0_GPIO_PORT GPIOD +#define QSPI_D1_PIN GPIO_PIN_12 +#define QSPI_D1_GPIO_PORT GPIOD +#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 + +/* N25Q128A13EF840E Micron memory */ +/* Size of the flash */ +#define QSPI_FLASH_SIZE 23 /* Address bus width to access whole memory space */ +#define QSPI_PAGE_SIZE 256 + +/* This alias is added as the name of Memory mapped fucntion changed */ +#define BSP_QSPI_MemoryMappedMode BSP_QSPI_EnableMemoryMappedMode +/** + * @} + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup STM32746G_DISCOVERY_QSPI_Exported_Types STM32746G_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 --------------------------------------------------------*/ +/** @addtogroup STM32746G_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); + +/* 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 /* __STM32746G_DISCOVERY_QSPI_H */ +/** + * @} + */ + +/** + * @} + */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c new file mode 100644 index 0000000..43931e2 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c @@ -0,0 +1,481 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_sdram.c + * @author MCD Application Team + * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory + * device mounted on STM32746G-Discovery board. + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + @verbatim + 1. How To use this driver: + -------------------------- + - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted + on STM32746G-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 + 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. + + @endverbatim + ****************************************************************************** + */ + +/* Dependencies +- stm32f7xx_hal_sdram.c +- stm32f7xx_ll_fmc.c +- stm32f7xx_hal_dma.c +- stm32f7xx_hal_gpio.c +- stm32f7xx_hal_cortex.c +- stm32f7xx_hal_rcc_ex.h +EndDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_discovery_sdram.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM STM32746G_DISCOVERY_SDRAM + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Types_Definitions STM32746G_DISCOVERY_SDRAM Private Types Definitions + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Defines STM32746G_DISCOVERY_SDRAM Private Defines + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Macros STM32746G_DISCOVERY_SDRAM Private Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Variables STM32746G_DISCOVERY_SDRAM Private Variables + * @{ + */ +SDRAM_HandleTypeDef sdramHandle; +static FMC_SDRAM_TimingTypeDef Timing; +static FMC_SDRAM_CommandTypeDef Command; +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Function_Prototypes STM32746G_DISCOVERY_SDRAM Private Function Prototypes + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Functions STM32746G_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 100Mhz as SD clock frequency (System clock is up to 200Mhz) */ + 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 application */ + + 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 de-initialization */ + sdramHandle.Instance = FMC_SDRAM_DEVICE; + + if(HAL_SDRAM_DeInit(&sdramHandle) != HAL_OK) + { + sdramstatus = SDRAM_ERROR; + } + else + { + sdramstatus = SDRAM_OK; + } + + /* SDRAM controller de-initialization */ + BSP_SDRAM_MspDeInit(&sdramHandle, NULL); + + return sdramstatus; +} + +/** + * @brief Programs the SDRAM device. + * @param RefreshCount: SDRAM refresh counter value + * @retval None + */ +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 amount 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 amount 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 amount 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 amount 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 SDRAM 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 Initializes SDRAM MSP. + * @param hsdram: SDRAM handle + * @param Params + * @retval None + */ +__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_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(); + + /* 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 */ + gpio_init_structure.Pin = GPIO_PIN_3; + 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_3 | GPIO_PIN_5; + HAL_GPIO_Init(GPIOH, &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, 0x0F, 0); + HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn); +} + +/** + * @brief DeInitializes SDRAM MSP. + * @param hsdram: SDRAM handle + * @param Params + * @retval None + */ +__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); + + /* GPIO pins clock, FMC clock and DMA clock can be shut down in the applications + by surcharging this __weak function */ +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h new file mode 100644 index 0000000..e467842 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h @@ -0,0 +1,144 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_sdram.h + * @author MCD Application Team + * @brief This file contains the common defines and functions prototypes for + * the stm32746g_discovery_sdram.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 __STM32746G_DISCOVERY_SDRAM_H +#define __STM32746G_DISCOVERY_SDRAM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY_SDRAM + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Types STM32746G_DISCOVERY_SDRAM Exported Types + * @{ + */ + +/** + * @brief SDRAM status structure definition + */ +#define SDRAM_OK ((uint8_t)0x00) +#define SDRAM_ERROR ((uint8_t)0x01) + +/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Constants STM32746G_DISCOVERY_SDRAM Exported Constants + * @{ + */ +#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000) +#define SDRAM_DEVICE_SIZE ((uint32_t)0x800000) /* SDRAM device size in MBytes */ + +/* #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)0x0603) /* SDRAM refresh counter (100Mhz 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 BSP_SDRAM_DMA_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 STM32746G_DISCOVERY_SDRAM_Exported_Macro STM32746G_DISCOVERY_SDRAM Exported Macro + * @{ + */ +/** + * @} + */ + +/** @addtogroup STM32746G_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); + +/* These functions 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 /* __STM32746G_DISCOVERY_SDRAM_H */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c new file mode 100644 index 0000000..094a19c --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c @@ -0,0 +1,434 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_ts.c + * @author MCD Application Team + * @brief This file provides a set of functions needed to manage the Touch + * Screen on STM32746G-Discovery board. + * + ****************************************************************************** + * @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. + * + ****************************************************************************** + @verbatim + 1. How To use this driver: + -------------------------- + - This driver is used to drive the touch screen module of the STM32746G-Discovery + board on the RK043FN48H-CT672B 480x272 LCD screen with capacitive touch screen. + - The FT5336 component driver must be included in project files according to + the touch screen driver present on this 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. + 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. + @endverbatim + ****************************************************************************** + */ + +/* Dependencies +- stm32746g_discovery_lcd.c +- ft5336.c +EndDependencies */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_discovery_ts.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_TS STM32746G_DISCOVERY_TS + * @{ + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Private_Types_Definitions STM32746G_DISCOVERY_TS Types Definitions + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Private_Defines STM32746G_DISCOVERY_TS Types Defines + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Private_Macros STM32746G_DISCOVERY_TS Private Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables + * @{ + */ + /** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Private_Variables STM32746G_DISCOVERY_TS Private Variables + * @{ + */ +static TS_DrvTypeDef *tsDriver; +static uint16_t tsXBoundary, tsYBoundary; +static uint8_t tsOrientation; +static uint8_t I2cAddress; +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Private_Function_Prototypes STM32746G_DISCOVERY_TS Private Function Prototypes + * @{ + */ +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Exported_Functions STM32746G_DISCOVERY_TS Exported 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 status = TS_OK; + tsXBoundary = ts_SizeX; + tsYBoundary = ts_SizeY; + + /* Read ID and verify if the touch screen driver is ready */ + ft5336_ts_drv.Init(TS_I2C_ADDRESS); + if(ft5336_ts_drv.ReadID(TS_I2C_ADDRESS) == FT5336_ID_VALUE) + { + /* Initialize the TS driver structure */ + tsDriver = &ft5336_ts_drv; + I2cAddress = TS_I2C_ADDRESS; + tsOrientation = TS_SWAP_XY; + + /* Initialize the TS driver */ + tsDriver->Start(I2cAddress); + } + else + { + status = TS_DEVICE_NOT_FOUND; + } + + 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) +{ + GPIO_InitTypeDef gpio_init_structure; + + /* Configure Interrupt mode for SD detection pin */ + 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_RISING; + HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure); + + /* Enable and set Touch screen EXTI Interrupt to the lowest priority */ + HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00); + HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn)); + + /* Enable the TS ITs */ + tsDriver->EnableIT(I2cAddress); + + 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 (tsDriver->GetITStatus(I2cAddress)); +} + +/** + * @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 x[TS_MAX_NB_TOUCH]; + uint16_t y[TS_MAX_NB_TOUCH]; + uint16_t brute_x[TS_MAX_NB_TOUCH]; + uint16_t brute_y[TS_MAX_NB_TOUCH]; + uint16_t x_diff; + uint16_t y_diff; + 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(I2cAddress); + + if(TS_State->touchDetected) + { + for(index=0; index < TS_State->touchDetected; index++) + { + /* Get each touch coordinates */ + tsDriver->GetXY(I2cAddress, &(brute_x[index]), &(brute_y[index])); + + if(tsOrientation == TS_SWAP_NONE) + { + x[index] = brute_x[index]; + y[index] = brute_y[index]; + } + + if(tsOrientation & TS_SWAP_X) + { + x[index] = 4096 - brute_x[index]; + } + + if(tsOrientation & TS_SWAP_Y) + { + y[index] = 4096 - brute_y[index]; + } + + if(tsOrientation & TS_SWAP_XY) + { + y[index] = brute_x[index]; + x[index] = brute_y[index]; + } + + x_diff = x[index] > _x[index]? (x[index] - _x[index]): (_x[index] - x[index]); + y_diff = y[index] > _y[index]? (y[index] - _y[index]): (_y[index] - y[index]); + + if ((x_diff + y_diff) > 5) + { + _x[index] = x[index]; + _y[index] = y[index]; + } + + if(I2cAddress == FT5336_I2C_SLAVE_ADDRESS) + { + TS_State->touchX[index] = x[index]; + TS_State->touchY[index] = y[index]; + } + else + { + /* 2^12 = 4096 : indexes are expressed on a dynamic of 4096 */ + TS_State->touchX[index] = (tsXBoundary * _x[index]) >> 12; + TS_State->touchY[index] = (tsYBoundary * _y[index]) >> 12; + } + +#if (TS_MULTI_TOUCH_SUPPORTED == 1) + + /* Get touch info related to the current touch */ + ft5336_TS_GetTouchInfo(I2cAddress, index, &weight, &area, &event); + + /* Update TS_State structure */ + TS_State->touchWeight[index] = weight; + TS_State->touchArea[index] = area; + + /* Remap touch event */ + switch(event) + { + case FT5336_TOUCH_EVT_FLAG_PRESS_DOWN : + TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN; + break; + case FT5336_TOUCH_EVT_FLAG_LIFT_UP : + TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP; + break; + case FT5336_TOUCH_EVT_FLAG_CONTACT : + TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT; + break; + case FT5336_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 */ + ft5336_TS_GetGestureID(I2cAddress, &gestureId); + + /* Remap gesture Id to a TS_GestureIdTypeDef value */ + switch(gestureId) + { + case FT5336_GEST_ID_NO_GESTURE : + TS_State->gestureId = GEST_ID_NO_GESTURE; + break; + case FT5336_GEST_ID_MOVE_UP : + TS_State->gestureId = GEST_ID_MOVE_UP; + break; + case FT5336_GEST_ID_MOVE_RIGHT : + TS_State->gestureId = GEST_ID_MOVE_RIGHT; + break; + case FT5336_GEST_ID_MOVE_DOWN : + TS_State->gestureId = GEST_ID_MOVE_DOWN; + break; + case FT5336_GEST_ID_MOVE_LEFT : + TS_State->gestureId = GEST_ID_MOVE_LEFT; + break; + case FT5336_GEST_ID_ZOOM_IN : + TS_State->gestureId = GEST_ID_ZOOM_IN; + break; + case FT5336_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 IT pending bits */ + tsDriver->ClearIT(I2cAddress); +} + + +/** @defgroup STM32756G_DISCOVERY_TS_Private_Functions 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); +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + diff --git a/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h new file mode 100644 index 0000000..ecf5384 --- /dev/null +++ b/project/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h @@ -0,0 +1,194 @@ +/** + ****************************************************************************** + * @file stm32746g_discovery_ts.h + * @author MCD Application Team + * @brief This file contains the common defines and functions prototypes for + * the stm32746g_discovery_ts.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 __STM32746G_DISCOVERY_TS_H +#define __STM32746G_DISCOVERY_TS_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32746g_discovery.h" +/* Include touch screen FT5336 component Driver */ +#include "../Components/ft5336/ft5336.h" + +/** @addtogroup BSP + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY + * @{ + */ + +/** @addtogroup STM32746G_DISCOVERY_TS + * @{ + */ + + /** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants + * @{ + */ + +/** @brief With FT5336 : maximum 5 touches detected simultaneously + */ +#define TS_MAX_NB_TOUCH ((uint32_t) FT5336_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 STM32746G_DISCOVERY_TS_Exported_Types STM32746G_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; + +/** + * @} + */ + +/** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants + * @{ + */ + +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 STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_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]; +/** + * @} + */ + +/** @addtogroup STM32746G_DISCOVERY_TS_Exported_Functions + * @{ + */ +uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY); +uint8_t BSP_TS_DeInit(void); +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); +#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */ + +uint8_t BSP_TS_ITConfig(void); +uint8_t BSP_TS_ITGetStatus(void); +void BSP_TS_ITClear(void); +uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State); +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32746G_DISCOVERY_TS_H */ + diff --git a/project/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h b/project/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h new file mode 100644 index 0000000..3c90ad3 --- /dev/null +++ b/project/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_qspi.h @@ -0,0 +1,750 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_qspi.h + * @author MCD Application Team + * @brief Header file of QSPI HAL module. + ****************************************************************************** + * @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 STM32F7xx_HAL_QSPI_H +#define STM32F7xx_HAL_QSPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal_def.h" + +#if defined(QUADSPI) + +/** @addtogroup STM32F7xx_HAL_Driver + * @{ + */ + +/** @addtogroup QSPI + * @{ + */ + +/* Exported types ------------------------------------------------------------*/ +/** @defgroup QSPI_Exported_Types QSPI Exported Types + * @{ + */ + +/** + * @brief QSPI Init structure definition + */ +typedef struct +{ + uint32_t ClockPrescaler; /* Specifies the prescaler factor for generating clock based on the AHB clock. + This parameter can be a number between 0 and 255 */ + uint32_t FifoThreshold; /* Specifies the threshold number of bytes in the FIFO (used only in indirect mode) + This parameter can be a value between 1 and 32 */ + uint32_t SampleShifting; /* Specifies the Sample Shift. The data is sampled 1/2 clock cycle delay later to + take in account external signal delays. (It should be QSPI_SAMPLE_SHIFTING_NONE in DDR mode) + This parameter can be a value of @ref QSPI_SampleShifting */ + uint32_t FlashSize; /* Specifies the Flash Size. FlashSize+1 is effectively the number of address bits + required to address the flash memory. The flash capacity can be up to 4GB + (addressed using 32 bits) in indirect mode, but the addressable space in + memory-mapped mode is limited to 256MB + This parameter can be a number between 0 and 31 */ + uint32_t ChipSelectHighTime; /* Specifies the Chip Select High Time. ChipSelectHighTime+1 defines the minimum number + of clock cycles which the chip select must remain high between commands. + This parameter can be a value of @ref QSPI_ChipSelectHighTime */ + uint32_t ClockMode; /* Specifies the Clock Mode. It indicates the level that clock takes between commands. + This parameter can be a value of @ref QSPI_ClockMode */ + uint32_t FlashID; /* Specifies the Flash which will be used, + This parameter can be a value of @ref QSPI_Flash_Select */ + uint32_t DualFlash; /* Specifies the Dual Flash Mode State + This parameter can be a value of @ref QSPI_DualFlash_Mode */ +}QSPI_InitTypeDef; + +/** + * @brief HAL QSPI State structures definition + */ +typedef enum +{ + HAL_QSPI_STATE_RESET = 0x00U, /*!< Peripheral not initialized */ + HAL_QSPI_STATE_READY = 0x01U, /*!< Peripheral initialized and ready for use */ + HAL_QSPI_STATE_BUSY = 0x02U, /*!< Peripheral in indirect mode and busy */ + HAL_QSPI_STATE_BUSY_INDIRECT_TX = 0x12U, /*!< Peripheral in indirect mode with transmission ongoing */ + HAL_QSPI_STATE_BUSY_INDIRECT_RX = 0x22U, /*!< Peripheral in indirect mode with reception ongoing */ + HAL_QSPI_STATE_BUSY_AUTO_POLLING = 0x42U, /*!< Peripheral in auto polling mode ongoing */ + HAL_QSPI_STATE_BUSY_MEM_MAPPED = 0x82U, /*!< Peripheral in memory mapped mode ongoing */ + HAL_QSPI_STATE_ABORT = 0x08U, /*!< Peripheral with abort request ongoing */ + HAL_QSPI_STATE_ERROR = 0x04U /*!< Peripheral in error */ +}HAL_QSPI_StateTypeDef; + +/** + * @brief QSPI Handle Structure definition + */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) +typedef struct __QSPI_HandleTypeDef +#else +typedef struct +#endif +{ + QUADSPI_TypeDef *Instance; /* QSPI registers base address */ + QSPI_InitTypeDef Init; /* QSPI communication parameters */ + uint8_t *pTxBuffPtr; /* Pointer to QSPI Tx transfer Buffer */ + __IO uint32_t TxXferSize; /* QSPI Tx Transfer size */ + __IO uint32_t TxXferCount; /* QSPI Tx Transfer Counter */ + uint8_t *pRxBuffPtr; /* Pointer to QSPI Rx transfer Buffer */ + __IO uint32_t RxXferSize; /* QSPI Rx Transfer size */ + __IO uint32_t RxXferCount; /* QSPI Rx Transfer Counter */ + DMA_HandleTypeDef *hdma; /* QSPI Rx/Tx DMA Handle parameters */ + __IO HAL_LockTypeDef Lock; /* Locking object */ + __IO HAL_QSPI_StateTypeDef State; /* QSPI communication state */ + __IO uint32_t ErrorCode; /* QSPI Error code */ + uint32_t Timeout; /* Timeout for the QSPI memory access */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + void (* ErrorCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* AbortCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* FifoThresholdCallback)(struct __QSPI_HandleTypeDef *hqspi); + void (* CmdCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* RxCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* TxCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* RxHalfCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* TxHalfCpltCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* StatusMatchCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* TimeOutCallback) (struct __QSPI_HandleTypeDef *hqspi); + + void (* MspInitCallback) (struct __QSPI_HandleTypeDef *hqspi); + void (* MspDeInitCallback) (struct __QSPI_HandleTypeDef *hqspi); +#endif +}QSPI_HandleTypeDef; + +/** + * @brief QSPI Command structure definition + */ +typedef struct +{ + uint32_t Instruction; /* Specifies the Instruction to be sent + This parameter can be a value (8-bit) between 0x00 and 0xFF */ + uint32_t Address; /* Specifies the Address to be sent (Size from 1 to 4 bytes according AddressSize) + This parameter can be a value (32-bits) between 0x0 and 0xFFFFFFFF */ + uint32_t AlternateBytes; /* Specifies the Alternate Bytes to be sent (Size from 1 to 4 bytes according AlternateBytesSize) + This parameter can be a value (32-bits) between 0x0 and 0xFFFFFFFF */ + uint32_t AddressSize; /* Specifies the Address Size + This parameter can be a value of @ref QSPI_AddressSize */ + uint32_t AlternateBytesSize; /* Specifies the Alternate Bytes Size + This parameter can be a value of @ref QSPI_AlternateBytesSize */ + uint32_t DummyCycles; /* Specifies the Number of Dummy Cycles. + This parameter can be a number between 0 and 31 */ + uint32_t InstructionMode; /* Specifies the Instruction Mode + This parameter can be a value of @ref QSPI_InstructionMode */ + uint32_t AddressMode; /* Specifies the Address Mode + This parameter can be a value of @ref QSPI_AddressMode */ + uint32_t AlternateByteMode; /* Specifies the Alternate Bytes Mode + This parameter can be a value of @ref QSPI_AlternateBytesMode */ + uint32_t DataMode; /* Specifies the Data Mode (used for dummy cycles and data phases) + This parameter can be a value of @ref QSPI_DataMode */ + uint32_t NbData; /* Specifies the number of data to transfer. (This is the number of bytes) + This parameter can be any value between 0 and 0xFFFFFFFF (0 means undefined length + until end of memory)*/ + uint32_t DdrMode; /* Specifies the double data rate mode for address, alternate byte and data phase + This parameter can be a value of @ref QSPI_DdrMode */ + uint32_t DdrHoldHalfCycle; /* Specifies if the DDR hold is enabled. When enabled it delays the data + output by one half of system clock in DDR mode. + This parameter can be a value of @ref QSPI_DdrHoldHalfCycle */ + uint32_t SIOOMode; /* Specifies the send instruction only once mode + This parameter can be a value of @ref QSPI_SIOOMode */ +}QSPI_CommandTypeDef; + +/** + * @brief QSPI Auto Polling mode configuration structure definition + */ +typedef struct +{ + uint32_t Match; /* Specifies the value to be compared with the masked status register to get a match. + This parameter can be any value between 0 and 0xFFFFFFFF */ + uint32_t Mask; /* Specifies the mask to be applied to the status bytes received. + This parameter can be any value between 0 and 0xFFFFFFFF */ + uint32_t Interval; /* Specifies the number of clock cycles between two read during automatic polling phases. + This parameter can be any value between 0 and 0xFFFF */ + uint32_t StatusBytesSize; /* Specifies the size of the status bytes received. + This parameter can be any value between 1 and 4 */ + uint32_t MatchMode; /* Specifies the method used for determining a match. + This parameter can be a value of @ref QSPI_MatchMode */ + uint32_t AutomaticStop; /* Specifies if automatic polling is stopped after a match. + This parameter can be a value of @ref QSPI_AutomaticStop */ +}QSPI_AutoPollingTypeDef; + +/** + * @brief QSPI Memory Mapped mode configuration structure definition + */ +typedef struct +{ + uint32_t TimeOutPeriod; /* Specifies the number of clock to wait when the FIFO is full before to release the chip select. + This parameter can be any value between 0 and 0xFFFF */ + uint32_t TimeOutActivation; /* Specifies if the timeout counter is enabled to release the chip select. + This parameter can be a value of @ref QSPI_TimeOutActivation */ +}QSPI_MemoryMappedTypeDef; + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) +/** + * @brief HAL QSPI Callback ID enumeration definition + */ +typedef enum +{ + HAL_QSPI_ERROR_CB_ID = 0x00U, /*!< QSPI Error Callback ID */ + HAL_QSPI_ABORT_CB_ID = 0x01U, /*!< QSPI Abort Callback ID */ + HAL_QSPI_FIFO_THRESHOLD_CB_ID = 0x02U, /*!< QSPI FIFO Threshold Callback ID */ + HAL_QSPI_CMD_CPLT_CB_ID = 0x03U, /*!< QSPI Command Complete Callback ID */ + HAL_QSPI_RX_CPLT_CB_ID = 0x04U, /*!< QSPI Rx Complete Callback ID */ + HAL_QSPI_TX_CPLT_CB_ID = 0x05U, /*!< QSPI Tx Complete Callback ID */ + HAL_QSPI_RX_HALF_CPLT_CB_ID = 0x06U, /*!< QSPI Rx Half Complete Callback ID */ + HAL_QSPI_TX_HALF_CPLT_CB_ID = 0x07U, /*!< QSPI Tx Half Complete Callback ID */ + HAL_QSPI_STATUS_MATCH_CB_ID = 0x08U, /*!< QSPI Status Match Callback ID */ + HAL_QSPI_TIMEOUT_CB_ID = 0x09U, /*!< QSPI Timeout Callback ID */ + + HAL_QSPI_MSP_INIT_CB_ID = 0x0AU, /*!< QSPI MspInit Callback ID */ + HAL_QSPI_MSP_DEINIT_CB_ID = 0x0B0 /*!< QSPI MspDeInit Callback ID */ +}HAL_QSPI_CallbackIDTypeDef; + +/** + * @brief HAL QSPI Callback pointer definition + */ +typedef void (*pQSPI_CallbackTypeDef)(QSPI_HandleTypeDef *hqspi); +#endif +/** + * @} + */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup QSPI_Exported_Constants QSPI Exported Constants + * @{ + */ + +/** @defgroup QSPI_ErrorCode QSPI Error Code + * @{ + */ +#define HAL_QSPI_ERROR_NONE 0x00000000U /*!< No error */ +#define HAL_QSPI_ERROR_TIMEOUT 0x00000001U /*!< Timeout error */ +#define HAL_QSPI_ERROR_TRANSFER 0x00000002U /*!< Transfer error */ +#define HAL_QSPI_ERROR_DMA 0x00000004U /*!< DMA transfer error */ +#define HAL_QSPI_ERROR_INVALID_PARAM 0x00000008U /*!< Invalid parameters error */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) +#define HAL_QSPI_ERROR_INVALID_CALLBACK 0x00000010U /*!< Invalid callback error */ +#endif +/** + * @} + */ + +/** @defgroup QSPI_SampleShifting QSPI Sample Shifting + * @{ + */ +#define QSPI_SAMPLE_SHIFTING_NONE 0x00000000U /*!State = HAL_QSPI_STATE_RESET; \ + (__HANDLE__)->MspInitCallback = NULL; \ + (__HANDLE__)->MspDeInitCallback = NULL; \ + } while(0) +#else +#define __HAL_QSPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_QSPI_STATE_RESET) +#endif + +/** @brief Enable the QSPI peripheral. + * @param __HANDLE__ specifies the QSPI Handle. + * @retval None + */ +#define __HAL_QSPI_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN) + +/** @brief Disable the QSPI peripheral. + * @param __HANDLE__ specifies the QSPI Handle. + * @retval None + */ +#define __HAL_QSPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR, QUADSPI_CR_EN) + +/** @brief Enable the specified QSPI interrupt. + * @param __HANDLE__ specifies the QSPI Handle. + * @param __INTERRUPT__ specifies the QSPI interrupt source to enable. + * This parameter can be one of the following values: + * @arg QSPI_IT_TO: QSPI Timeout interrupt + * @arg QSPI_IT_SM: QSPI Status match interrupt + * @arg QSPI_IT_FT: QSPI FIFO threshold interrupt + * @arg QSPI_IT_TC: QSPI Transfer complete interrupt + * @arg QSPI_IT_TE: QSPI Transfer error interrupt + * @retval None + */ +#define __HAL_QSPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) + + +/** @brief Disable the specified QSPI interrupt. + * @param __HANDLE__ specifies the QSPI Handle. + * @param __INTERRUPT__ specifies the QSPI interrupt source to disable. + * This parameter can be one of the following values: + * @arg QSPI_IT_TO: QSPI Timeout interrupt + * @arg QSPI_IT_SM: QSPI Status match interrupt + * @arg QSPI_IT_FT: QSPI FIFO threshold interrupt + * @arg QSPI_IT_TC: QSPI Transfer complete interrupt + * @arg QSPI_IT_TE: QSPI Transfer error interrupt + * @retval None + */ +#define __HAL_QSPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) + +/** @brief Check whether the specified QSPI interrupt source is enabled or not. + * @param __HANDLE__ specifies the QSPI Handle. + * @param __INTERRUPT__ specifies the QSPI interrupt source to check. + * This parameter can be one of the following values: + * @arg QSPI_IT_TO: QSPI Timeout interrupt + * @arg QSPI_IT_SM: QSPI Status match interrupt + * @arg QSPI_IT_FT: QSPI FIFO threshold interrupt + * @arg QSPI_IT_TC: QSPI Transfer complete interrupt + * @arg QSPI_IT_TE: QSPI Transfer error interrupt + * @retval The new state of __INTERRUPT__ (TRUE or FALSE). + */ +#define __HAL_QSPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (READ_BIT((__HANDLE__)->Instance->CR, (__INTERRUPT__)) == (__INTERRUPT__)) + +/** + * @brief Check whether the selected QSPI flag is set or not. + * @param __HANDLE__ specifies the QSPI Handle. + * @param __FLAG__ specifies the QSPI flag to check. + * This parameter can be one of the following values: + * @arg QSPI_FLAG_BUSY: QSPI Busy flag + * @arg QSPI_FLAG_TO: QSPI Timeout flag + * @arg QSPI_FLAG_SM: QSPI Status match flag + * @arg QSPI_FLAG_FT: QSPI FIFO threshold flag + * @arg QSPI_FLAG_TC: QSPI Transfer complete flag + * @arg QSPI_FLAG_TE: QSPI Transfer error flag + * @retval None + */ +#define __HAL_QSPI_GET_FLAG(__HANDLE__, __FLAG__) ((READ_BIT((__HANDLE__)->Instance->SR, (__FLAG__)) != 0U) ? SET : RESET) + +/** @brief Clears the specified QSPI's flag status. + * @param __HANDLE__ specifies the QSPI Handle. + * @param __FLAG__ specifies the QSPI clear register flag that needs to be set + * This parameter can be one of the following values: + * @arg QSPI_FLAG_TO: QSPI Timeout flag + * @arg QSPI_FLAG_SM: QSPI Status match flag + * @arg QSPI_FLAG_TC: QSPI Transfer complete flag + * @arg QSPI_FLAG_TE: QSPI Transfer error flag + * @retval None + */ +#define __HAL_QSPI_CLEAR_FLAG(__HANDLE__, __FLAG__) WRITE_REG((__HANDLE__)->Instance->FCR, (__FLAG__)) +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup QSPI_Exported_Functions + * @{ + */ + +/** @addtogroup QSPI_Exported_Functions_Group1 + * @{ + */ +/* Initialization/de-initialization functions ********************************/ +HAL_StatusTypeDef HAL_QSPI_Init (QSPI_HandleTypeDef *hqspi); +HAL_StatusTypeDef HAL_QSPI_DeInit (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_MspInit (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi); +/** + * @} + */ + +/** @addtogroup QSPI_Exported_Functions_Group2 + * @{ + */ +/* IO operation functions *****************************************************/ +/* QSPI IRQ handler method */ +void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi); + +/* QSPI indirect mode */ +HAL_StatusTypeDef HAL_QSPI_Command (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout); +HAL_StatusTypeDef HAL_QSPI_Transmit (QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout); +HAL_StatusTypeDef HAL_QSPI_Receive (QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout); +HAL_StatusTypeDef HAL_QSPI_Command_IT (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd); +HAL_StatusTypeDef HAL_QSPI_Transmit_IT (QSPI_HandleTypeDef *hqspi, uint8_t *pData); +HAL_StatusTypeDef HAL_QSPI_Receive_IT (QSPI_HandleTypeDef *hqspi, uint8_t *pData); +HAL_StatusTypeDef HAL_QSPI_Transmit_DMA (QSPI_HandleTypeDef *hqspi, uint8_t *pData); +HAL_StatusTypeDef HAL_QSPI_Receive_DMA (QSPI_HandleTypeDef *hqspi, uint8_t *pData); + +/* QSPI status flag polling mode */ +HAL_StatusTypeDef HAL_QSPI_AutoPolling (QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout); +HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg); + +/* QSPI memory-mapped mode */ +HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg); + +/* Callback functions in non-blocking modes ***********************************/ +void HAL_QSPI_ErrorCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_AbortCpltCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi); + +/* QSPI indirect mode */ +void HAL_QSPI_CmdCpltCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_RxCpltCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_TxCpltCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_RxHalfCpltCallback (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_TxHalfCpltCallback (QSPI_HandleTypeDef *hqspi); + +/* QSPI status flag polling mode */ +void HAL_QSPI_StatusMatchCallback (QSPI_HandleTypeDef *hqspi); + +/* QSPI memory-mapped mode */ +void HAL_QSPI_TimeOutCallback (QSPI_HandleTypeDef *hqspi); + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) +/* QSPI callback registering/unregistering */ +HAL_StatusTypeDef HAL_QSPI_RegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback); +HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId); +#endif +/** + * @} + */ + +/** @addtogroup QSPI_Exported_Functions_Group3 + * @{ + */ +/* Peripheral Control and State functions ************************************/ +HAL_QSPI_StateTypeDef HAL_QSPI_GetState (QSPI_HandleTypeDef *hqspi); +uint32_t HAL_QSPI_GetError (QSPI_HandleTypeDef *hqspi); +HAL_StatusTypeDef HAL_QSPI_Abort (QSPI_HandleTypeDef *hqspi); +HAL_StatusTypeDef HAL_QSPI_Abort_IT (QSPI_HandleTypeDef *hqspi); +void HAL_QSPI_SetTimeout (QSPI_HandleTypeDef *hqspi, uint32_t Timeout); +HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold); +uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi); +HAL_StatusTypeDef HAL_QSPI_SetFlashID (QSPI_HandleTypeDef *hqspi, uint32_t FlashID); +/** + * @} + */ + +/** + * @} + */ +/* End of exported functions -------------------------------------------------*/ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup QSPI_Private_Macros QSPI Private Macros + * @{ + */ +#define IS_QSPI_CLOCK_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFU) + +#define IS_QSPI_FIFO_THRESHOLD(THR) (((THR) > 0U) && ((THR) <= 32U)) + +#define IS_QSPI_SSHIFT(SSHIFT) (((SSHIFT) == QSPI_SAMPLE_SHIFTING_NONE) || \ + ((SSHIFT) == QSPI_SAMPLE_SHIFTING_HALFCYCLE)) + +#define IS_QSPI_FLASH_SIZE(FSIZE) (((FSIZE) <= 31U)) + +#define IS_QSPI_CS_HIGH_TIME(CSHTIME) (((CSHTIME) == QSPI_CS_HIGH_TIME_1_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_2_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_3_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_4_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_5_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_6_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_7_CYCLE) || \ + ((CSHTIME) == QSPI_CS_HIGH_TIME_8_CYCLE)) + +#define IS_QSPI_CLOCK_MODE(CLKMODE) (((CLKMODE) == QSPI_CLOCK_MODE_0) || \ + ((CLKMODE) == QSPI_CLOCK_MODE_3)) + +#define IS_QSPI_FLASH_ID(FLASH_ID) (((FLASH_ID) == QSPI_FLASH_ID_1) || \ + ((FLASH_ID) == QSPI_FLASH_ID_2)) + +#define IS_QSPI_DUAL_FLASH_MODE(MODE) (((MODE) == QSPI_DUALFLASH_ENABLE) || \ + ((MODE) == QSPI_DUALFLASH_DISABLE)) + +#define IS_QSPI_INSTRUCTION(INSTRUCTION) ((INSTRUCTION) <= 0xFFU) + +#define IS_QSPI_ADDRESS_SIZE(ADDR_SIZE) (((ADDR_SIZE) == QSPI_ADDRESS_8_BITS) || \ + ((ADDR_SIZE) == QSPI_ADDRESS_16_BITS) || \ + ((ADDR_SIZE) == QSPI_ADDRESS_24_BITS) || \ + ((ADDR_SIZE) == QSPI_ADDRESS_32_BITS)) + +#define IS_QSPI_ALTERNATE_BYTES_SIZE(SIZE) (((SIZE) == QSPI_ALTERNATE_BYTES_8_BITS) || \ + ((SIZE) == QSPI_ALTERNATE_BYTES_16_BITS) || \ + ((SIZE) == QSPI_ALTERNATE_BYTES_24_BITS) || \ + ((SIZE) == QSPI_ALTERNATE_BYTES_32_BITS)) + +#define IS_QSPI_DUMMY_CYCLES(DCY) ((DCY) <= 31U) + +#define IS_QSPI_INSTRUCTION_MODE(MODE) (((MODE) == QSPI_INSTRUCTION_NONE) || \ + ((MODE) == QSPI_INSTRUCTION_1_LINE) || \ + ((MODE) == QSPI_INSTRUCTION_2_LINES) || \ + ((MODE) == QSPI_INSTRUCTION_4_LINES)) + +#define IS_QSPI_ADDRESS_MODE(MODE) (((MODE) == QSPI_ADDRESS_NONE) || \ + ((MODE) == QSPI_ADDRESS_1_LINE) || \ + ((MODE) == QSPI_ADDRESS_2_LINES) || \ + ((MODE) == QSPI_ADDRESS_4_LINES)) + +#define IS_QSPI_ALTERNATE_BYTES_MODE(MODE) (((MODE) == QSPI_ALTERNATE_BYTES_NONE) || \ + ((MODE) == QSPI_ALTERNATE_BYTES_1_LINE) || \ + ((MODE) == QSPI_ALTERNATE_BYTES_2_LINES) || \ + ((MODE) == QSPI_ALTERNATE_BYTES_4_LINES)) + +#define IS_QSPI_DATA_MODE(MODE) (((MODE) == QSPI_DATA_NONE) || \ + ((MODE) == QSPI_DATA_1_LINE) || \ + ((MODE) == QSPI_DATA_2_LINES) || \ + ((MODE) == QSPI_DATA_4_LINES)) + +#define IS_QSPI_DDR_MODE(DDR_MODE) (((DDR_MODE) == QSPI_DDR_MODE_DISABLE) || \ + ((DDR_MODE) == QSPI_DDR_MODE_ENABLE)) + +#define IS_QSPI_DDR_HHC(DDR_HHC) (((DDR_HHC) == QSPI_DDR_HHC_ANALOG_DELAY) || \ + ((DDR_HHC) == QSPI_DDR_HHC_HALF_CLK_DELAY)) + +#define IS_QSPI_SIOO_MODE(SIOO_MODE) (((SIOO_MODE) == QSPI_SIOO_INST_EVERY_CMD) || \ + ((SIOO_MODE) == QSPI_SIOO_INST_ONLY_FIRST_CMD)) + +#define IS_QSPI_INTERVAL(INTERVAL) ((INTERVAL) <= QUADSPI_PIR_INTERVAL) + +#define IS_QSPI_STATUS_BYTES_SIZE(SIZE) (((SIZE) >= 1U) && ((SIZE) <= 4U)) + +#define IS_QSPI_MATCH_MODE(MODE) (((MODE) == QSPI_MATCH_MODE_AND) || \ + ((MODE) == QSPI_MATCH_MODE_OR)) + +#define IS_QSPI_AUTOMATIC_STOP(APMS) (((APMS) == QSPI_AUTOMATIC_STOP_DISABLE) || \ + ((APMS) == QSPI_AUTOMATIC_STOP_ENABLE)) + +#define IS_QSPI_TIMEOUT_ACTIVATION(TCEN) (((TCEN) == QSPI_TIMEOUT_COUNTER_DISABLE) || \ + ((TCEN) == QSPI_TIMEOUT_COUNTER_ENABLE)) + +#define IS_QSPI_TIMEOUT_PERIOD(PERIOD) ((PERIOD) <= 0xFFFFU) +/** +* @} +*/ +/* End of private macros -----------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(QUADSPI) */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F7xx_HAL_QSPI_H */ diff --git a/project/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c b/project/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c new file mode 100644 index 0000000..7d3dade --- /dev/null +++ b/project/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_qspi.c @@ -0,0 +1,2840 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_qspi.c + * @author MCD Application Team + * @brief QSPI HAL module driver. + * This file provides firmware functions to manage the following + * functionalities of the QuadSPI interface (QSPI). + * + Initialization and de-initialization functions + * + Indirect functional mode management + * + Memory-mapped functional mode management + * + Auto-polling functional mode management + * + Interrupts and flags management + * + DMA channel configuration for indirect functional mode + * + Errors management and abort functionality + * + * + ****************************************************************************** + * @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 ##### + =============================================================================== + [..] + *** Initialization *** + ====================== + [..] + (#) As prerequisite, fill in the HAL_QSPI_MspInit() : + (++) Enable QuadSPI clock interface with __HAL_RCC_QSPI_CLK_ENABLE(). + (++) Reset QuadSPI Peripheral with __HAL_RCC_QSPI_FORCE_RESET() and __HAL_RCC_QSPI_RELEASE_RESET(). + (++) Enable the clocks for the QuadSPI GPIOS with __HAL_RCC_GPIOx_CLK_ENABLE(). + (++) Configure these QuadSPI pins in alternate mode using HAL_GPIO_Init(). + (++) If interrupt mode is used, enable and configure QuadSPI global + interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ(). + (++) If DMA mode is used, enable the clocks for the QuadSPI DMA channel + with __HAL_RCC_DMAx_CLK_ENABLE(), configure DMA with HAL_DMA_Init(), + link it with QuadSPI handle using __HAL_LINKDMA(), enable and configure + DMA channel global interrupt with HAL_NVIC_SetPriority() and HAL_NVIC_EnableIRQ(). + (#) Configure the flash size, the clock prescaler, the fifo threshold, the + clock mode, the sample shifting and the CS high time using the HAL_QSPI_Init() function. + + *** Indirect functional mode *** + ================================ + [..] + (#) Configure the command sequence using the HAL_QSPI_Command() or HAL_QSPI_Command_IT() + functions : + (++) Instruction phase : the mode used and if present the instruction opcode. + (++) Address phase : the mode used and if present the size and the address value. + (++) Alternate-bytes phase : the mode used and if present the size and the alternate + bytes values. + (++) Dummy-cycles phase : the number of dummy cycles (mode used is same as data phase). + (++) Data phase : the mode used and if present the number of bytes. + (++) Double Data Rate (DDR) mode : the activation (or not) of this mode and the delay + if activated. + (++) Sending Instruction Only Once (SIOO) mode : the activation (or not) of this mode. + (#) If no data is required for the command, it is sent directly to the memory : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_QSPI_CmdCpltCallback() will be called when the transfer is complete. + (#) For the indirect write mode, use HAL_QSPI_Transmit(), HAL_QSPI_Transmit_DMA() or + HAL_QSPI_Transmit_IT() after the command configuration : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_QSPI_FifoThresholdCallback() will be called when the fifo threshold + is reached and HAL_QSPI_TxCpltCallback() will be called when the transfer is complete. + (++) In DMA mode, HAL_QSPI_TxHalfCpltCallback() will be called at the half transfer and + HAL_QSPI_TxCpltCallback() will be called when the transfer is complete. + (#) For the indirect read mode, use HAL_QSPI_Receive(), HAL_QSPI_Receive_DMA() or + HAL_QSPI_Receive_IT() after the command configuration : + (++) In polling mode, the output of the function is done when the transfer is complete. + (++) In interrupt mode, HAL_QSPI_FifoThresholdCallback() will be called when the fifo threshold + is reached and HAL_QSPI_RxCpltCallback() will be called when the transfer is complete. + (++) In DMA mode, HAL_QSPI_RxHalfCpltCallback() will be called at the half transfer and + HAL_QSPI_RxCpltCallback() will be called when the transfer is complete. + + *** Auto-polling functional mode *** + ==================================== + [..] + (#) Configure the command sequence and the auto-polling functional mode using the + HAL_QSPI_AutoPolling() or HAL_QSPI_AutoPolling_IT() functions : + (++) Instruction phase : the mode used and if present the instruction opcode. + (++) Address phase : the mode used and if present the size and the address value. + (++) Alternate-bytes phase : the mode used and if present the size and the alternate + bytes values. + (++) Dummy-cycles phase : the number of dummy cycles (mode used is same as data phase). + (++) Data phase : the mode used. + (++) Double Data Rate (DDR) mode : the activation (or not) of this mode and the delay + if activated. + (++) Sending Instruction Only Once (SIOO) mode : the activation (or not) of this mode. + (++) The size of the status bytes, the match value, the mask used, the match mode (OR/AND), + the polling interval and the automatic stop activation. + (#) After the configuration : + (++) In polling mode, the output of the function is done when the status match is reached. The + automatic stop is activated to avoid an infinite loop. + (++) In interrupt mode, HAL_QSPI_StatusMatchCallback() will be called each time the status match is reached. + + *** Memory-mapped functional mode *** + ===================================== + [..] + (#) Configure the command sequence and the memory-mapped functional mode using the + HAL_QSPI_MemoryMapped() functions : + (++) Instruction phase : the mode used and if present the instruction opcode. + (++) Address phase : the mode used and the size. + (++) Alternate-bytes phase : the mode used and if present the size and the alternate + bytes values. + (++) Dummy-cycles phase : the number of dummy cycles (mode used is same as data phase). + (++) Data phase : the mode used. + (++) Double Data Rate (DDR) mode : the activation (or not) of this mode and the delay + if activated. + (++) Sending Instruction Only Once (SIOO) mode : the activation (or not) of this mode. + (++) The timeout activation and the timeout period. + (#) After the configuration, the QuadSPI will be used as soon as an access on the AHB is done on + the address range. HAL_QSPI_TimeOutCallback() will be called when the timeout expires. + + *** Errors management and abort functionality *** + ================================================= + [..] + (#) HAL_QSPI_GetError() function gives the error raised during the last operation. + (#) HAL_QSPI_Abort() and HAL_QSPI_Abort_IT() functions aborts any on-going operation and + flushes the fifo : + (++) In polling mode, the output of the function is done when the transfer + complete bit is set and the busy bit cleared. + (++) In interrupt mode, HAL_QSPI_AbortCpltCallback() will be called when + the transfer complete bit is set. + + *** Control functions *** + ========================= + [..] + (#) HAL_QSPI_GetState() function gives the current state of the HAL QuadSPI driver. + (#) HAL_QSPI_SetTimeout() function configures the timeout value used in the driver. + (#) HAL_QSPI_SetFifoThreshold() function configures the threshold on the Fifo of the QSPI IP. + (#) HAL_QSPI_GetFifoThreshold() function gives the current of the Fifo's threshold + (#) HAL_QSPI_SetFlashID() function configures the index of the flash memory to be accessed. + + *** Callback registration *** + ============================================= + [..] + The compilation define USE_HAL_QSPI_REGISTER_CALLBACKS when set to 1 + allows the user to configure dynamically the driver callbacks. + + Use Functions HAL_QSPI_RegisterCallback() to register a user callback, + it allows to register following callbacks: + (+) ErrorCallback : callback when error occurs. + (+) AbortCpltCallback : callback when abort is completed. + (+) FifoThresholdCallback : callback when the fifo threshold is reached. + (+) CmdCpltCallback : callback when a command without data is completed. + (+) RxCpltCallback : callback when a reception transfer is completed. + (+) TxCpltCallback : callback when a transmission transfer is completed. + (+) RxHalfCpltCallback : callback when half of the reception transfer is completed. + (+) TxHalfCpltCallback : callback when half of the transmission transfer is completed. + (+) StatusMatchCallback : callback when a status match occurs. + (+) TimeOutCallback : callback when the timeout perioed expires. + (+) MspInitCallback : QSPI MspInit. + (+) MspDeInitCallback : QSPI MspDeInit. + This function takes as parameters the HAL peripheral handle, the Callback ID + and a pointer to the user callback function. + + Use function HAL_QSPI_UnRegisterCallback() to reset a callback to the default + weak (surcharged) function. It allows to reset following callbacks: + (+) ErrorCallback : callback when error occurs. + (+) AbortCpltCallback : callback when abort is completed. + (+) FifoThresholdCallback : callback when the fifo threshold is reached. + (+) CmdCpltCallback : callback when a command without data is completed. + (+) RxCpltCallback : callback when a reception transfer is completed. + (+) TxCpltCallback : callback when a transmission transfer is completed. + (+) RxHalfCpltCallback : callback when half of the reception transfer is completed. + (+) TxHalfCpltCallback : callback when half of the transmission transfer is completed. + (+) StatusMatchCallback : callback when a status match occurs. + (+) TimeOutCallback : callback when the timeout perioed expires. + (+) MspInitCallback : QSPI MspInit. + (+) MspDeInitCallback : QSPI MspDeInit. + This function) takes as parameters the HAL peripheral handle and the Callback ID. + + By default, after the HAL_QSPI_Init and if the state is HAL_QSPI_STATE_RESET + all callbacks are reset to the corresponding legacy weak (surcharged) functions. + Exception done for MspInit and MspDeInit callbacks that are respectively + reset to the legacy weak (surcharged) functions in the HAL_QSPI_Init + and HAL_QSPI_DeInit only when these callbacks are null (not registered beforehand). + If not, MspInit or MspDeInit are not null, the HAL_QSPI_Init and HAL_QSPI_DeInit + keep and use the user MspInit/MspDeInit callbacks (registered beforehand) + + Callbacks can be registered/unregistered in READY state only. + Exception done for MspInit/MspDeInit callbacks that can be registered/unregistered + in READY or RESET state, thus registered (user) MspInit/DeInit callbacks can be used + during the Init/DeInit. + In that case first register the MspInit/MspDeInit user callbacks + using HAL_QSPI_RegisterCallback before calling HAL_QSPI_DeInit + or HAL_QSPI_Init function. + + When The compilation define USE_HAL_QSPI_REGISTER_CALLBACKS is set to 0 or + not defined, the callback registering feature is not available + and weak (surcharged) callbacks are used. + + *** Workarounds linked to Silicon Limitation *** + ==================================================== + [..] + (#) Workarounds Implemented inside HAL Driver + (++) Extra data written in the FIFO at the end of a read transfer + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +#if defined(QUADSPI) + +/** @addtogroup STM32F7xx_HAL_Driver + * @{ + */ + +/** @defgroup QSPI QSPI + * @brief QSPI HAL module driver + * @{ + */ +#ifdef HAL_QSPI_MODULE_ENABLED + +/* Private typedef -----------------------------------------------------------*/ + +/* Private define ------------------------------------------------------------*/ +/** @defgroup QSPI_Private_Constants QSPI Private Constants + * @{ + */ +#define QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE 0x00000000U /*!Instance)); + assert_param(IS_QSPI_CLOCK_PRESCALER(hqspi->Init.ClockPrescaler)); + assert_param(IS_QSPI_FIFO_THRESHOLD(hqspi->Init.FifoThreshold)); + assert_param(IS_QSPI_SSHIFT(hqspi->Init.SampleShifting)); + assert_param(IS_QSPI_FLASH_SIZE(hqspi->Init.FlashSize)); + assert_param(IS_QSPI_CS_HIGH_TIME(hqspi->Init.ChipSelectHighTime)); + assert_param(IS_QSPI_CLOCK_MODE(hqspi->Init.ClockMode)); + assert_param(IS_QSPI_DUAL_FLASH_MODE(hqspi->Init.DualFlash)); + + if (hqspi->Init.DualFlash != QSPI_DUALFLASH_ENABLE ) + { + assert_param(IS_QSPI_FLASH_ID(hqspi->Init.FlashID)); + } + + if(hqspi->State == HAL_QSPI_STATE_RESET) + { + /* Allocate lock resource and initialize it */ + hqspi->Lock = HAL_UNLOCKED; + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + /* Reset Callback pointers in HAL_QSPI_STATE_RESET only */ + hqspi->ErrorCallback = HAL_QSPI_ErrorCallback; + hqspi->AbortCpltCallback = HAL_QSPI_AbortCpltCallback; + hqspi->FifoThresholdCallback = HAL_QSPI_FifoThresholdCallback; + hqspi->CmdCpltCallback = HAL_QSPI_CmdCpltCallback; + hqspi->RxCpltCallback = HAL_QSPI_RxCpltCallback; + hqspi->TxCpltCallback = HAL_QSPI_TxCpltCallback; + hqspi->RxHalfCpltCallback = HAL_QSPI_RxHalfCpltCallback; + hqspi->TxHalfCpltCallback = HAL_QSPI_TxHalfCpltCallback; + hqspi->StatusMatchCallback = HAL_QSPI_StatusMatchCallback; + hqspi->TimeOutCallback = HAL_QSPI_TimeOutCallback; + + if(hqspi->MspInitCallback == NULL) + { + hqspi->MspInitCallback = HAL_QSPI_MspInit; + } + + /* Init the low level hardware */ + hqspi->MspInitCallback(hqspi); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_QSPI_MspInit(hqspi); +#endif + + /* Configure the default timeout for the QSPI memory access */ + HAL_QSPI_SetTimeout(hqspi, HAL_QSPI_TIMEOUT_DEFAULT_VALUE); + } + + /* Configure QSPI FIFO Threshold */ + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, + ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos)); + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + + if(status == HAL_OK) + { + /* Configure QSPI Clock Prescaler and Sample Shift */ + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PRESCALER | QUADSPI_CR_SSHIFT | QUADSPI_CR_FSEL | QUADSPI_CR_DFM), + ((hqspi->Init.ClockPrescaler << QUADSPI_CR_PRESCALER_Pos) | + hqspi->Init.SampleShifting | hqspi->Init.FlashID | hqspi->Init.DualFlash)); + + /* Configure QSPI Flash Size, CS High Time and Clock Mode */ + MODIFY_REG(hqspi->Instance->DCR, (QUADSPI_DCR_FSIZE | QUADSPI_DCR_CSHT | QUADSPI_DCR_CKMODE), + ((hqspi->Init.FlashSize << QUADSPI_DCR_FSIZE_Pos) | + hqspi->Init.ChipSelectHighTime | hqspi->Init.ClockMode)); + + /* Enable the QSPI peripheral */ + __HAL_QSPI_ENABLE(hqspi); + + /* Set QSPI error code to none */ + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Initialize the QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + + /* Release Lock */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** + * @brief De-Initialize the QSPI peripheral. + * @param hqspi QSPI handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_DeInit(QSPI_HandleTypeDef *hqspi) +{ + /* Check the QSPI handle allocation */ + if(hqspi == NULL) + { + return HAL_ERROR; + } + + /* Disable the QSPI Peripheral Clock */ + __HAL_QSPI_DISABLE(hqspi); + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + if(hqspi->MspDeInitCallback == NULL) + { + hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit; + } + + /* DeInit the low level hardware */ + hqspi->MspDeInitCallback(hqspi); +#else + /* DeInit the low level hardware: GPIO, CLOCK, NVIC... */ + HAL_QSPI_MspDeInit(hqspi); +#endif + + /* Set QSPI error code to none */ + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Initialize the QSPI state */ + hqspi->State = HAL_QSPI_STATE_RESET; + + /* Release Lock */ + __HAL_UNLOCK(hqspi); + + return HAL_OK; +} + +/** + * @brief Initialize the QSPI MSP. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_MspInit(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_MspInit can be implemented in the user file + */ +} + +/** + * @brief DeInitialize the QSPI MSP. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_MspDeInit can be implemented in the user file + */ +} + +/** + * @} + */ + +/** @defgroup QSPI_Exported_Functions_Group2 Input and Output operation functions + * @brief QSPI Transmit/Receive functions + * +@verbatim + =============================================================================== + ##### IO operation functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Handle the interrupts. + (+) Handle the command sequence. + (+) Transmit data in blocking, interrupt or DMA mode. + (+) Receive data in blocking, interrupt or DMA mode. + (+) Manage the auto-polling functional mode. + (+) Manage the memory-mapped functional mode. + +@endverbatim + * @{ + */ + +/** + * @brief Handle QSPI interrupt request. + * @param hqspi QSPI handle + * @retval None + */ +void HAL_QSPI_IRQHandler(QSPI_HandleTypeDef *hqspi) +{ + __IO uint32_t *data_reg; + uint32_t flag = READ_REG(hqspi->Instance->SR); + uint32_t itsource = READ_REG(hqspi->Instance->CR); + + /* QSPI Fifo Threshold interrupt occurred ----------------------------------*/ + if(((flag & QSPI_FLAG_FT) != 0U) && ((itsource & QSPI_IT_FT) != 0U)) + { + data_reg = &hqspi->Instance->DR; + + if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_TX) + { + /* Transmission process */ + while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET) + { + if (hqspi->TxXferCount > 0U) + { + /* Fill the FIFO until the threshold is reached */ + *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr; + hqspi->pTxBuffPtr++; + hqspi->TxXferCount--; + } + else + { + /* No more data available for the transfer */ + /* Disable the QSPI FIFO Threshold Interrupt */ + __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT); + break; + } + } + } + else if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_RX) + { + /* Receiving Process */ + while(__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_FT) != RESET) + { + if (hqspi->RxXferCount > 0U) + { + /* Read the FIFO until the threshold is reached */ + *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg); + hqspi->pRxBuffPtr++; + hqspi->RxXferCount--; + } + else + { + /* All data have been received for the transfer */ + /* Disable the QSPI FIFO Threshold Interrupt */ + __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_FT); + break; + } + } + } + else + { + /* Nothing to do */ + } + + /* FIFO Threshold callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->FifoThresholdCallback(hqspi); +#else + HAL_QSPI_FifoThresholdCallback(hqspi); +#endif + } + + /* QSPI Transfer Complete interrupt occurred -------------------------------*/ + else if(((flag & QSPI_FLAG_TC) != 0U) && ((itsource & QSPI_IT_TC) != 0U)) + { + /* Clear interrupt */ + WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TC); + + /* Disable the QSPI FIFO Threshold, Transfer Error and Transfer complete Interrupts */ + __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT); + + /* Transfer complete callback */ + if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_TX) + { + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + { + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Disable the DMA channel */ + __HAL_DMA_DISABLE(hqspi->hdma); + } + +#if defined(QSPI1_V1_0) + /* Clear Busy bit */ + HAL_QSPI_Abort_IT(hqspi); +#endif + + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* TX Complete callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->TxCpltCallback(hqspi); +#else + HAL_QSPI_TxCpltCallback(hqspi); +#endif + } + else if(hqspi->State == HAL_QSPI_STATE_BUSY_INDIRECT_RX) + { + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + { + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Disable the DMA channel */ + __HAL_DMA_DISABLE(hqspi->hdma); + } + else + { + data_reg = &hqspi->Instance->DR; + while(READ_BIT(hqspi->Instance->SR, QUADSPI_SR_FLEVEL) != 0U) + { + if (hqspi->RxXferCount > 0U) + { + /* Read the last data received in the FIFO until it is empty */ + *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg); + hqspi->pRxBuffPtr++; + hqspi->RxXferCount--; + } + else + { + /* All data have been received for the transfer */ + break; + } + } + } + +#if defined(QSPI1_V1_0) + /* Workaround - Extra data written in the FIFO at the end of a read transfer */ + HAL_QSPI_Abort_IT(hqspi); +#endif + + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* RX Complete callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->RxCpltCallback(hqspi); +#else + HAL_QSPI_RxCpltCallback(hqspi); +#endif + } + else if(hqspi->State == HAL_QSPI_STATE_BUSY) + { + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Command Complete callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->CmdCpltCallback(hqspi); +#else + HAL_QSPI_CmdCpltCallback(hqspi); +#endif + } + else if(hqspi->State == HAL_QSPI_STATE_ABORT) + { + /* Reset functional mode configuration to indirect write mode by default */ + CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE); + + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + if (hqspi->ErrorCode == HAL_QSPI_ERROR_NONE) + { + /* Abort called by the user */ + + /* Abort Complete callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->AbortCpltCallback(hqspi); +#else + HAL_QSPI_AbortCpltCallback(hqspi); +#endif + } + else + { + /* Abort due to an error (eg : DMA error) */ + + /* Error callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->ErrorCallback(hqspi); +#else + HAL_QSPI_ErrorCallback(hqspi); +#endif + } + } + else + { + /* Nothing to do */ + } + } + + /* QSPI Status Match interrupt occurred ------------------------------------*/ + else if(((flag & QSPI_FLAG_SM) != 0U) && ((itsource & QSPI_IT_SM) != 0U)) + { + /* Clear interrupt */ + WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_SM); + + /* Check if the automatic poll mode stop is activated */ + if(READ_BIT(hqspi->Instance->CR, QUADSPI_CR_APMS) != 0U) + { + /* Disable the QSPI Transfer Error and Status Match Interrupts */ + __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE)); + + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + } + + /* Status match callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->StatusMatchCallback(hqspi); +#else + HAL_QSPI_StatusMatchCallback(hqspi); +#endif + } + + /* QSPI Transfer Error interrupt occurred ----------------------------------*/ + else if(((flag & QSPI_FLAG_TE) != 0U) && ((itsource & QSPI_IT_TE) != 0U)) + { + /* Clear interrupt */ + WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TE); + + /* Disable all the QSPI Interrupts */ + __HAL_QSPI_DISABLE_IT(hqspi, QSPI_IT_SM | QSPI_IT_TC | QSPI_IT_TE | QSPI_IT_FT); + + /* Set error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_TRANSFER; + + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + { + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Disable the DMA channel */ + hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt; + if (HAL_DMA_Abort_IT(hqspi->hdma) != HAL_OK) + { + /* Set error code to DMA */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Error callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->ErrorCallback(hqspi); +#else + HAL_QSPI_ErrorCallback(hqspi); +#endif + } + } + else + { + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Error callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->ErrorCallback(hqspi); +#else + HAL_QSPI_ErrorCallback(hqspi); +#endif + } + } + + /* QSPI Timeout interrupt occurred -----------------------------------------*/ + else if(((flag & QSPI_FLAG_TO) != 0U) && ((itsource & QSPI_IT_TO) != 0U)) + { + /* Clear interrupt */ + WRITE_REG(hqspi->Instance->FCR, QSPI_FLAG_TO); + + /* Timeout callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->TimeOutCallback(hqspi); +#else + HAL_QSPI_TimeOutCallback(hqspi); +#endif + } + + else + { + /* Nothing to do */ + } +} + +/** + * @brief Set the command configuration. + * @param hqspi QSPI handle + * @param cmd : structure that contains the command configuration information + * @param Timeout Timeout duration + * @note This function is used only in Indirect Read or Write Modes + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Command(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t Timeout) +{ + HAL_StatusTypeDef status; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction)); + } + + assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize)); + } + + assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode)); + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize)); + } + + assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles)); + assert_param(IS_QSPI_DATA_MODE(cmd->DataMode)); + + assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode)); + assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle)); + assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_BUSY; + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Call the configuration function */ + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + if (cmd->DataMode == QSPI_DATA_NONE) + { + /* When there is no data phase, the transfer start as soon as the configuration is done + so wait until TC flag is set to go back in idle state */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + else + { + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** + * @brief Set the command configuration in interrupt mode. + * @param hqspi QSPI handle + * @param cmd structure that contains the command configuration information + * @note This function is used only in Indirect Read or Write Modes + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Command_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd) +{ + HAL_StatusTypeDef status; + + /* Check the parameters */ + assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction)); + } + + assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize)); + } + + assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode)); + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize)); + } + + assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles)); + assert_param(IS_QSPI_DATA_MODE(cmd->DataMode)); + + assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode)); + assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle)); + assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_BUSY; + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout); + + if (status == HAL_OK) + { + if (cmd->DataMode == QSPI_DATA_NONE) + { + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC); + } + + /* Call the configuration function */ + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + if (cmd->DataMode == QSPI_DATA_NONE) + { + /* When there is no data phase, the transfer start as soon as the configuration is done + so activate TC and TE interrupts */ + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI Transfer Error Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_TC); + } + else + { + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + /* Return function status */ + return status; +} + +/** + * @brief Transmit an amount of data in blocking mode. + * @param hqspi QSPI handle + * @param pData pointer to data buffer + * @param Timeout Timeout duration + * @note This function is used only in Indirect Write Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Transmit(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + __IO uint32_t *data_reg = &hqspi->Instance->DR; + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX; + + /* Configure counters and size of the handle */ + hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->pTxBuffPtr = pData; + + /* Configure QSPI: CCR register with functional as indirect write */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + while(hqspi->TxXferCount > 0U) + { + /* Wait until FT flag is set to send data */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_FT, SET, tickstart, Timeout); + + if (status != HAL_OK) + { + break; + } + + *((__IO uint8_t *)data_reg) = *hqspi->pTxBuffPtr; + hqspi->pTxBuffPtr++; + hqspi->TxXferCount--; + } + + if (status == HAL_OK) + { + /* Wait until TC flag is set to go back in idle state */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Clear Transfer Complete bit */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + +#if defined(QSPI1_V1_0) + /* Clear Busy bit */ + status = HAL_QSPI_Abort(hqspi); +#endif + } + } + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + return status; +} + + +/** + * @brief Receive an amount of data in blocking mode. + * @param hqspi QSPI handle + * @param pData pointer to data buffer + * @param Timeout Timeout duration + * @note This function is used only in Indirect Read Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Receive(QSPI_HandleTypeDef *hqspi, uint8_t *pData, uint32_t Timeout) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + uint32_t addr_reg = READ_REG(hqspi->Instance->AR); + __IO uint32_t *data_reg = &hqspi->Instance->DR; + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX; + + /* Configure counters and size of the handle */ + hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->pRxBuffPtr = pData; + + /* Configure QSPI: CCR register with functional as indirect read */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Start the transfer by re-writing the address in AR register */ + WRITE_REG(hqspi->Instance->AR, addr_reg); + + while(hqspi->RxXferCount > 0U) + { + /* Wait until FT or TC flag is set to read received data */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, (QSPI_FLAG_FT | QSPI_FLAG_TC), SET, tickstart, Timeout); + + if (status != HAL_OK) + { + break; + } + + *hqspi->pRxBuffPtr = *((__IO uint8_t *)data_reg); + hqspi->pRxBuffPtr++; + hqspi->RxXferCount--; + } + + if (status == HAL_OK) + { + /* Wait until TC flag is set to go back in idle state */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Clear Transfer Complete bit */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + +#if defined(QSPI1_V1_0) + /* Workaround - Extra data written in the FIFO at the end of a read transfer */ + status = HAL_QSPI_Abort(hqspi); +#endif + } + } + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + } + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + return status; +} + +/** + * @brief Send an amount of data in non-blocking mode with interrupt. + * @param hqspi QSPI handle + * @param pData pointer to data buffer + * @note This function is used only in Indirect Write Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Transmit_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX; + + /* Configure counters and size of the handle */ + hqspi->TxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->TxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->pTxBuffPtr = pData; + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC); + + /* Configure QSPI: CCR register with functional as indirect write */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI transfer error, FIFO threshold and transfer complete Interrupts */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC); + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + return status; +} + +/** + * @brief Receive an amount of data in non-blocking mode with interrupt. + * @param hqspi QSPI handle + * @param pData pointer to data buffer + * @note This function is used only in Indirect Read Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Receive_IT(QSPI_HandleTypeDef *hqspi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t addr_reg = READ_REG(hqspi->Instance->AR); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX; + + /* Configure counters and size of the handle */ + hqspi->RxXferCount = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->RxXferSize = READ_REG(hqspi->Instance->DLR) + 1U; + hqspi->pRxBuffPtr = pData; + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_TC); + + /* Configure QSPI: CCR register with functional as indirect read */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Start the transfer by re-writing the address in AR register */ + WRITE_REG(hqspi->Instance->AR, addr_reg); + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI transfer error, FIFO threshold and transfer complete Interrupts */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE | QSPI_IT_FT | QSPI_IT_TC); + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + return status; +} + +/** + * @brief Send an amount of data in non-blocking mode with DMA. + * @param hqspi QSPI handle + * @param pData pointer to data buffer + * @note This function is used only in Indirect Write Mode + * @note If DMA peripheral access is configured as halfword, the number + * of data and the fifo threshold should be aligned on halfword + * @note If DMA peripheral access is configured as word, the number + * of data and the fifo threshold should be aligned on word + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Transmit_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + /* Clear the error code */ + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Configure counters of the handle */ + if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE) + { + hqspi->TxXferCount = data_size; + } + else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD) + { + if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U)) + { + /* The number of data or the fifo threshold is not aligned on halfword + => no transfer possible with DMA peripheral access configured as halfword */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + else + { + hqspi->TxXferCount = (data_size >> 1U); + } + } + else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD) + { + if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U)) + { + /* The number of data or the fifo threshold is not aligned on word + => no transfer possible with DMA peripheral access configured as word */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + else + { + hqspi->TxXferCount = (data_size >> 2U); + } + } + else + { + /* Nothing to do */ + } + + if (status == HAL_OK) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_TX; + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC)); + + /* Configure size and pointer of the handle */ + hqspi->TxXferSize = hqspi->TxXferCount; + hqspi->pTxBuffPtr = pData; + + /* Configure QSPI: CCR register with functional mode as indirect write */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE); + + /* Set the QSPI DMA transfer complete callback */ + hqspi->hdma->XferCpltCallback = QSPI_DMATxCplt; + + /* Set the QSPI DMA Half transfer complete callback */ + hqspi->hdma->XferHalfCpltCallback = QSPI_DMATxHalfCplt; + + /* Set the DMA error callback */ + hqspi->hdma->XferErrorCallback = QSPI_DMAError; + + /* Clear the DMA abort callback */ + hqspi->hdma->XferAbortCallback = NULL; + + /* Configure the direction of the DMA */ + hqspi->hdma->Init.Direction = DMA_MEMORY_TO_PERIPH; + MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction); + + /* Enable the QSPI transmit DMA Channel */ + if (HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)pData, (uint32_t)&hqspi->Instance->DR, hqspi->TxXferSize) == HAL_OK) + { + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI transfer error Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE); + + /* Enable the DMA transfer by setting the DMAEN bit in the QSPI CR register */ + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + } + else + { + status = HAL_ERROR; + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + hqspi->State = HAL_QSPI_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + return status; +} + +/** + * @brief Receive an amount of data in non-blocking mode with DMA. + * @param hqspi QSPI handle + * @param pData pointer to data buffer. + * @note This function is used only in Indirect Read Mode + * @note If DMA peripheral access is configured as halfword, the number + * of data and the fifo threshold should be aligned on halfword + * @note If DMA peripheral access is configured as word, the number + * of data and the fifo threshold should be aligned on word + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_Receive_DMA(QSPI_HandleTypeDef *hqspi, uint8_t *pData) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t addr_reg = READ_REG(hqspi->Instance->AR); + uint32_t data_size = (READ_REG(hqspi->Instance->DLR) + 1U); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + /* Clear the error code */ + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + if(pData != NULL ) + { + /* Configure counters of the handle */ + if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_BYTE) + { + hqspi->RxXferCount = data_size; + } + else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_HALFWORD) + { + if (((data_size % 2U) != 0U) || ((hqspi->Init.FifoThreshold % 2U) != 0U)) + { + /* The number of data or the fifo threshold is not aligned on halfword + => no transfer possible with DMA peripheral access configured as halfword */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + else + { + hqspi->RxXferCount = (data_size >> 1U); + } + } + else if (hqspi->hdma->Init.PeriphDataAlignment == DMA_PDATAALIGN_WORD) + { + if (((data_size % 4U) != 0U) || ((hqspi->Init.FifoThreshold % 4U) != 0U)) + { + /* The number of data or the fifo threshold is not aligned on word + => no transfer possible with DMA peripheral access configured as word */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + else + { + hqspi->RxXferCount = (data_size >> 2U); + } + } + else + { + /* Nothing to do */ + } + + if (status == HAL_OK) + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_INDIRECT_RX; + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, (QSPI_FLAG_TE | QSPI_FLAG_TC)); + + /* Configure size and pointer of the handle */ + hqspi->RxXferSize = hqspi->RxXferCount; + hqspi->pRxBuffPtr = pData; + + /* Set the QSPI DMA transfer complete callback */ + hqspi->hdma->XferCpltCallback = QSPI_DMARxCplt; + + /* Set the QSPI DMA Half transfer complete callback */ + hqspi->hdma->XferHalfCpltCallback = QSPI_DMARxHalfCplt; + + /* Set the DMA error callback */ + hqspi->hdma->XferErrorCallback = QSPI_DMAError; + + /* Clear the DMA abort callback */ + hqspi->hdma->XferAbortCallback = NULL; + + /* Configure the direction of the DMA */ + hqspi->hdma->Init.Direction = DMA_PERIPH_TO_MEMORY; + MODIFY_REG(hqspi->hdma->Instance->CR, DMA_SxCR_DIR, hqspi->hdma->Init.Direction); + + /* Enable the DMA Channel */ + if (HAL_DMA_Start_IT(hqspi->hdma, (uint32_t)&hqspi->Instance->DR, (uint32_t)pData, hqspi->RxXferSize) == HAL_OK) + { + /* Configure QSPI: CCR register with functional as indirect read */ + MODIFY_REG(hqspi->Instance->CCR, QUADSPI_CCR_FMODE, QSPI_FUNCTIONAL_MODE_INDIRECT_READ); + + /* Start the transfer by re-writing the address in AR register */ + WRITE_REG(hqspi->Instance->AR, addr_reg); + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI transfer error Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TE); + + /* Enable the DMA transfer by setting the DMAEN bit in the QSPI CR register */ + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + } + else + { + status = HAL_ERROR; + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + hqspi->State = HAL_QSPI_STATE_READY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + } + else + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_PARAM; + status = HAL_ERROR; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + return status; +} + +/** + * @brief Configure the QSPI Automatic Polling Mode in blocking mode. + * @param hqspi QSPI handle + * @param cmd structure that contains the command configuration information. + * @param cfg structure that contains the polling configuration information. + * @param Timeout Timeout duration + * @note This function is used only in Automatic Polling Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_AutoPolling(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg, uint32_t Timeout) +{ + HAL_StatusTypeDef status; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction)); + } + + assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize)); + } + + assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode)); + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize)); + } + + assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles)); + assert_param(IS_QSPI_DATA_MODE(cmd->DataMode)); + + assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode)); + assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle)); + assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode)); + + assert_param(IS_QSPI_INTERVAL(cfg->Interval)); + assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize)); + assert_param(IS_QSPI_MATCH_MODE(cfg->MatchMode)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING; + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, Timeout); + + if (status == HAL_OK) + { + /* Configure QSPI: PSMAR register with the status match value */ + WRITE_REG(hqspi->Instance->PSMAR, cfg->Match); + + /* Configure QSPI: PSMKR register with the status mask value */ + WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask); + + /* Configure QSPI: PIR register with the interval value */ + WRITE_REG(hqspi->Instance->PIR, cfg->Interval); + + /* Configure QSPI: CR register with Match mode and Automatic stop enabled + (otherwise there will be an infinite loop in blocking mode) */ + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS), + (cfg->MatchMode | QSPI_AUTOMATIC_STOP_ENABLE)); + + /* Call the configuration function */ + cmd->NbData = cfg->StatusBytesSize; + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING); + + /* Wait until SM flag is set to go back in idle state */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_SM, SET, tickstart, Timeout); + + if (status == HAL_OK) + { + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_SM); + + /* Update state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** + * @brief Configure the QSPI Automatic Polling Mode in non-blocking mode. + * @param hqspi QSPI handle + * @param cmd structure that contains the command configuration information. + * @param cfg structure that contains the polling configuration information. + * @note This function is used only in Automatic Polling Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_AutoPolling_IT(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_AutoPollingTypeDef *cfg) +{ + HAL_StatusTypeDef status; + + /* Check the parameters */ + assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction)); + } + + assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize)); + } + + assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode)); + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize)); + } + + assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles)); + assert_param(IS_QSPI_DATA_MODE(cmd->DataMode)); + + assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode)); + assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle)); + assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode)); + + assert_param(IS_QSPI_INTERVAL(cfg->Interval)); + assert_param(IS_QSPI_STATUS_BYTES_SIZE(cfg->StatusBytesSize)); + assert_param(IS_QSPI_MATCH_MODE(cfg->MatchMode)); + assert_param(IS_QSPI_AUTOMATIC_STOP(cfg->AutomaticStop)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_AUTO_POLLING; + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout_CPUCycle(hqspi, QSPI_FLAG_BUSY, RESET, hqspi->Timeout); + + if (status == HAL_OK) + { + /* Configure QSPI: PSMAR register with the status match value */ + WRITE_REG(hqspi->Instance->PSMAR, cfg->Match); + + /* Configure QSPI: PSMKR register with the status mask value */ + WRITE_REG(hqspi->Instance->PSMKR, cfg->Mask); + + /* Configure QSPI: PIR register with the interval value */ + WRITE_REG(hqspi->Instance->PIR, cfg->Interval); + + /* Configure QSPI: CR register with Match mode and Automatic stop mode */ + MODIFY_REG(hqspi->Instance->CR, (QUADSPI_CR_PMM | QUADSPI_CR_APMS), + (cfg->MatchMode | cfg->AutomaticStop)); + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TE | QSPI_FLAG_SM); + + /* Call the configuration function */ + cmd->NbData = cfg->StatusBytesSize; + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_AUTO_POLLING); + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Enable the QSPI Transfer Error and status match Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, (QSPI_IT_SM | QSPI_IT_TE)); + + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + } + else + { + status = HAL_BUSY; + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + } + + /* Return function status */ + return status; +} + +/** + * @brief Configure the Memory Mapped mode. + * @param hqspi QSPI handle + * @param cmd structure that contains the command configuration information. + * @param cfg structure that contains the memory mapped configuration information. + * @note This function is used only in Memory mapped Mode + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_MemoryMapped(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, QSPI_MemoryMappedTypeDef *cfg) +{ + HAL_StatusTypeDef status; + uint32_t tickstart = HAL_GetTick(); + + /* Check the parameters */ + assert_param(IS_QSPI_INSTRUCTION_MODE(cmd->InstructionMode)); + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + assert_param(IS_QSPI_INSTRUCTION(cmd->Instruction)); + } + + assert_param(IS_QSPI_ADDRESS_MODE(cmd->AddressMode)); + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + assert_param(IS_QSPI_ADDRESS_SIZE(cmd->AddressSize)); + } + + assert_param(IS_QSPI_ALTERNATE_BYTES_MODE(cmd->AlternateByteMode)); + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + assert_param(IS_QSPI_ALTERNATE_BYTES_SIZE(cmd->AlternateBytesSize)); + } + + assert_param(IS_QSPI_DUMMY_CYCLES(cmd->DummyCycles)); + assert_param(IS_QSPI_DATA_MODE(cmd->DataMode)); + + assert_param(IS_QSPI_DDR_MODE(cmd->DdrMode)); + assert_param(IS_QSPI_DDR_HHC(cmd->DdrHoldHalfCycle)); + assert_param(IS_QSPI_SIOO_MODE(cmd->SIOOMode)); + + assert_param(IS_QSPI_TIMEOUT_ACTIVATION(cfg->TimeOutActivation)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + hqspi->ErrorCode = HAL_QSPI_ERROR_NONE; + + /* Update state */ + hqspi->State = HAL_QSPI_STATE_BUSY_MEM_MAPPED; + + /* Wait till BUSY flag reset */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + + if (status == HAL_OK) + { + /* Configure QSPI: CR register with timeout counter enable */ + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_TCEN, cfg->TimeOutActivation); + + if (cfg->TimeOutActivation == QSPI_TIMEOUT_COUNTER_ENABLE) + { + assert_param(IS_QSPI_TIMEOUT_PERIOD(cfg->TimeOutPeriod)); + + /* Configure QSPI: LPTR register with the low-power timeout value */ + WRITE_REG(hqspi->Instance->LPTR, cfg->TimeOutPeriod); + + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TO); + + /* Enable the QSPI TimeOut Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TO); + } + + /* Call the configuration function */ + QSPI_Config(hqspi, cmd, QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED); + } + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** + * @brief Transfer Error callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_ErrorCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_ErrorCallback could be implemented in the user file + */ +} + +/** + * @brief Abort completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_AbortCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_AbortCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Command completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_CmdCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_CmdCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Transfer completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_RxCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_RxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Transfer completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_TxCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_TxCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Rx Half Transfer completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_RxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_RxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief Tx Half Transfer completed callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_TxHalfCpltCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_QSPI_TxHalfCpltCallback could be implemented in the user file + */ +} + +/** + * @brief FIFO Threshold callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_FifoThresholdCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_FIFOThresholdCallback could be implemented in the user file + */ +} + +/** + * @brief Status Match callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_StatusMatchCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_StatusMatchCallback could be implemented in the user file + */ +} + +/** + * @brief Timeout callback. + * @param hqspi QSPI handle + * @retval None + */ +__weak void HAL_QSPI_TimeOutCallback(QSPI_HandleTypeDef *hqspi) +{ + /* Prevent unused argument(s) compilation warning */ + UNUSED(hqspi); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_QSPI_TimeOutCallback could be implemented in the user file + */ +} +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) +/** + * @brief Register a User QSPI Callback + * To be used instead of the weak (surcharged) predefined callback + * @param hqspi QSPI handle + * @param CallbackId ID of the callback to be registered + * This parameter can be one of the following values: + * @arg @ref HAL_QSPI_ERROR_CB_ID QSPI Error Callback ID + * @arg @ref HAL_QSPI_ABORT_CB_ID QSPI Abort Callback ID + * @arg @ref HAL_QSPI_FIFO_THRESHOLD_CB_ID QSPI FIFO Threshold Callback ID + * @arg @ref HAL_QSPI_CMD_CPLT_CB_ID QSPI Command Complete Callback ID + * @arg @ref HAL_QSPI_RX_CPLT_CB_ID QSPI Rx Complete Callback ID + * @arg @ref HAL_QSPI_TX_CPLT_CB_ID QSPI Tx Complete Callback ID + * @arg @ref HAL_QSPI_RX_HALF_CPLT_CB_ID QSPI Rx Half Complete Callback ID + * @arg @ref HAL_QSPI_TX_HALF_CPLT_CB_ID QSPI Tx Half Complete Callback ID + * @arg @ref HAL_QSPI_STATUS_MATCH_CB_ID QSPI Status Match Callback ID + * @arg @ref HAL_QSPI_TIMEOUT_CB_ID QSPI Timeout Callback ID + * @arg @ref HAL_QSPI_MSP_INIT_CB_ID QSPI MspInit callback ID + * @arg @ref HAL_QSPI_MSP_DEINIT_CB_ID QSPI MspDeInit callback ID + * @param pCallback pointer to the Callback function + * @retval status + */ +HAL_StatusTypeDef HAL_QSPI_RegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId, pQSPI_CallbackTypeDef pCallback) +{ + HAL_StatusTypeDef status = HAL_OK; + + if(pCallback == NULL) + { + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + return HAL_ERROR; + } + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + switch (CallbackId) + { + case HAL_QSPI_ERROR_CB_ID : + hqspi->ErrorCallback = pCallback; + break; + case HAL_QSPI_ABORT_CB_ID : + hqspi->AbortCpltCallback = pCallback; + break; + case HAL_QSPI_FIFO_THRESHOLD_CB_ID : + hqspi->FifoThresholdCallback = pCallback; + break; + case HAL_QSPI_CMD_CPLT_CB_ID : + hqspi->CmdCpltCallback = pCallback; + break; + case HAL_QSPI_RX_CPLT_CB_ID : + hqspi->RxCpltCallback = pCallback; + break; + case HAL_QSPI_TX_CPLT_CB_ID : + hqspi->TxCpltCallback = pCallback; + break; + case HAL_QSPI_RX_HALF_CPLT_CB_ID : + hqspi->RxHalfCpltCallback = pCallback; + break; + case HAL_QSPI_TX_HALF_CPLT_CB_ID : + hqspi->TxHalfCpltCallback = pCallback; + break; + case HAL_QSPI_STATUS_MATCH_CB_ID : + hqspi->StatusMatchCallback = pCallback; + break; + case HAL_QSPI_TIMEOUT_CB_ID : + hqspi->TimeOutCallback = pCallback; + break; + case HAL_QSPI_MSP_INIT_CB_ID : + hqspi->MspInitCallback = pCallback; + break; + case HAL_QSPI_MSP_DEINIT_CB_ID : + hqspi->MspDeInitCallback = pCallback; + break; + default : + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + break; + } + } + else if (hqspi->State == HAL_QSPI_STATE_RESET) + { + switch (CallbackId) + { + case HAL_QSPI_MSP_INIT_CB_ID : + hqspi->MspInitCallback = pCallback; + break; + case HAL_QSPI_MSP_DEINIT_CB_ID : + hqspi->MspDeInitCallback = pCallback; + break; + default : + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hqspi); + return status; +} + +/** + * @brief Unregister a User QSPI Callback + * QSPI Callback is redirected to the weak (surcharged) predefined callback + * @param hqspi QSPI handle + * @param CallbackId ID of the callback to be unregistered + * This parameter can be one of the following values: + * @arg @ref HAL_QSPI_ERROR_CB_ID QSPI Error Callback ID + * @arg @ref HAL_QSPI_ABORT_CB_ID QSPI Abort Callback ID + * @arg @ref HAL_QSPI_FIFO_THRESHOLD_CB_ID QSPI FIFO Threshold Callback ID + * @arg @ref HAL_QSPI_CMD_CPLT_CB_ID QSPI Command Complete Callback ID + * @arg @ref HAL_QSPI_RX_CPLT_CB_ID QSPI Rx Complete Callback ID + * @arg @ref HAL_QSPI_TX_CPLT_CB_ID QSPI Tx Complete Callback ID + * @arg @ref HAL_QSPI_RX_HALF_CPLT_CB_ID QSPI Rx Half Complete Callback ID + * @arg @ref HAL_QSPI_TX_HALF_CPLT_CB_ID QSPI Tx Half Complete Callback ID + * @arg @ref HAL_QSPI_STATUS_MATCH_CB_ID QSPI Status Match Callback ID + * @arg @ref HAL_QSPI_TIMEOUT_CB_ID QSPI Timeout Callback ID + * @arg @ref HAL_QSPI_MSP_INIT_CB_ID QSPI MspInit callback ID + * @arg @ref HAL_QSPI_MSP_DEINIT_CB_ID QSPI MspDeInit callback ID + * @retval status + */ +HAL_StatusTypeDef HAL_QSPI_UnRegisterCallback (QSPI_HandleTypeDef *hqspi, HAL_QSPI_CallbackIDTypeDef CallbackId) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + switch (CallbackId) + { + case HAL_QSPI_ERROR_CB_ID : + hqspi->ErrorCallback = HAL_QSPI_ErrorCallback; + break; + case HAL_QSPI_ABORT_CB_ID : + hqspi->AbortCpltCallback = HAL_QSPI_AbortCpltCallback; + break; + case HAL_QSPI_FIFO_THRESHOLD_CB_ID : + hqspi->FifoThresholdCallback = HAL_QSPI_FifoThresholdCallback; + break; + case HAL_QSPI_CMD_CPLT_CB_ID : + hqspi->CmdCpltCallback = HAL_QSPI_CmdCpltCallback; + break; + case HAL_QSPI_RX_CPLT_CB_ID : + hqspi->RxCpltCallback = HAL_QSPI_RxCpltCallback; + break; + case HAL_QSPI_TX_CPLT_CB_ID : + hqspi->TxCpltCallback = HAL_QSPI_TxCpltCallback; + break; + case HAL_QSPI_RX_HALF_CPLT_CB_ID : + hqspi->RxHalfCpltCallback = HAL_QSPI_RxHalfCpltCallback; + break; + case HAL_QSPI_TX_HALF_CPLT_CB_ID : + hqspi->TxHalfCpltCallback = HAL_QSPI_TxHalfCpltCallback; + break; + case HAL_QSPI_STATUS_MATCH_CB_ID : + hqspi->StatusMatchCallback = HAL_QSPI_StatusMatchCallback; + break; + case HAL_QSPI_TIMEOUT_CB_ID : + hqspi->TimeOutCallback = HAL_QSPI_TimeOutCallback; + break; + case HAL_QSPI_MSP_INIT_CB_ID : + hqspi->MspInitCallback = HAL_QSPI_MspInit; + break; + case HAL_QSPI_MSP_DEINIT_CB_ID : + hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit; + break; + default : + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + break; + } + } + else if (hqspi->State == HAL_QSPI_STATE_RESET) + { + switch (CallbackId) + { + case HAL_QSPI_MSP_INIT_CB_ID : + hqspi->MspInitCallback = HAL_QSPI_MspInit; + break; + case HAL_QSPI_MSP_DEINIT_CB_ID : + hqspi->MspDeInitCallback = HAL_QSPI_MspDeInit; + break; + default : + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + break; + } + } + else + { + /* Update the error code */ + hqspi->ErrorCode |= HAL_QSPI_ERROR_INVALID_CALLBACK; + /* update return status */ + status = HAL_ERROR; + } + + /* Release Lock */ + __HAL_UNLOCK(hqspi); + return status; +} +#endif + +/** + * @} + */ + +/** @defgroup QSPI_Exported_Functions_Group3 Peripheral Control and State functions + * @brief QSPI control and State functions + * +@verbatim + =============================================================================== + ##### Peripheral Control and State functions ##### + =============================================================================== + [..] + This subsection provides a set of functions allowing to : + (+) Check in run-time the state of the driver. + (+) Check the error code set during last operation. + (+) Abort any operation. + + +@endverbatim + * @{ + */ + +/** + * @brief Return the QSPI handle state. + * @param hqspi QSPI handle + * @retval HAL state + */ +HAL_QSPI_StateTypeDef HAL_QSPI_GetState(QSPI_HandleTypeDef *hqspi) +{ + /* Return QSPI handle state */ + return hqspi->State; +} + +/** +* @brief Return the QSPI error code. +* @param hqspi QSPI handle +* @retval QSPI Error Code +*/ +uint32_t HAL_QSPI_GetError(QSPI_HandleTypeDef *hqspi) +{ + return hqspi->ErrorCode; +} + +/** +* @brief Abort the current transmission. +* @param hqspi QSPI handle +* @retval HAL status +*/ +HAL_StatusTypeDef HAL_QSPI_Abort(QSPI_HandleTypeDef *hqspi) +{ + HAL_StatusTypeDef status = HAL_OK; + uint32_t tickstart = HAL_GetTick(); + + /* Check if the state is in one of the busy states */ + if (((uint32_t)hqspi->State & 0x2U) != 0U) + { + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + { + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Abort DMA channel */ + status = HAL_DMA_Abort(hqspi->hdma); + if(status != HAL_OK) + { + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + } + } + + if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET) + { + /* Configure QSPI: CR register with Abort request */ + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); + + /* Wait until TC flag is set to go back in idle state */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_TC, SET, tickstart, hqspi->Timeout); + + if (status == HAL_OK) + { + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + + /* Wait until BUSY flag is reset */ + status = QSPI_WaitFlagStateUntilTimeout(hqspi, QSPI_FLAG_BUSY, RESET, tickstart, hqspi->Timeout); + } + + if (status == HAL_OK) + { + /* Reset functional mode configuration to indirect write mode by default */ + CLEAR_BIT(hqspi->Instance->CCR, QUADSPI_CCR_FMODE); + + /* Update state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + else + { + /* Update state */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + + return status; +} + +/** +* @brief Abort the current transmission (non-blocking function) +* @param hqspi QSPI handle +* @retval HAL status +*/ +HAL_StatusTypeDef HAL_QSPI_Abort_IT(QSPI_HandleTypeDef *hqspi) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check if the state is in one of the busy states */ + if (((uint32_t)hqspi->State & 0x2U) != 0U) + { + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Update QSPI state */ + hqspi->State = HAL_QSPI_STATE_ABORT; + + /* Disable all interrupts */ + __HAL_QSPI_DISABLE_IT(hqspi, (QSPI_IT_TO | QSPI_IT_SM | QSPI_IT_FT | QSPI_IT_TC | QSPI_IT_TE)); + + if ((hqspi->Instance->CR & QUADSPI_CR_DMAEN) != 0U) + { + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Abort DMA channel */ + hqspi->hdma->XferAbortCallback = QSPI_DMAAbortCplt; + if (HAL_DMA_Abort_IT(hqspi->hdma) != HAL_OK) + { + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Abort Complete callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->AbortCpltCallback(hqspi); +#else + HAL_QSPI_AbortCpltCallback(hqspi); +#endif + } + } + else + { + if (__HAL_QSPI_GET_FLAG(hqspi, QSPI_FLAG_BUSY) != RESET) + { + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + + /* Enable the QSPI Transfer Complete Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC); + + /* Configure QSPI: CR register with Abort request */ + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); + } + else + { + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + } + } + } + return status; +} + +/** @brief Set QSPI timeout. + * @param hqspi QSPI handle. + * @param Timeout Timeout for the QSPI memory access. + * @retval None + */ +void HAL_QSPI_SetTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Timeout) +{ + hqspi->Timeout = Timeout; +} + +/** @brief Set QSPI Fifo threshold. + * @param hqspi QSPI handle. + * @param Threshold Threshold of the Fifo (value between 1 and 16). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_SetFifoThreshold(QSPI_HandleTypeDef *hqspi, uint32_t Threshold) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + /* Synchronize init structure with new FIFO threshold value */ + hqspi->Init.FifoThreshold = Threshold; + + /* Configure QSPI FIFO Threshold */ + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FTHRES, + ((hqspi->Init.FifoThreshold - 1U) << QUADSPI_CR_FTHRES_Pos)); + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** @brief Get QSPI Fifo threshold. + * @param hqspi QSPI handle. + * @retval Fifo threshold (value between 1 and 16) + */ +uint32_t HAL_QSPI_GetFifoThreshold(QSPI_HandleTypeDef *hqspi) +{ + return ((READ_BIT(hqspi->Instance->CR, QUADSPI_CR_FTHRES) >> QUADSPI_CR_FTHRES_Pos) + 1U); +} + +/** @brief Set FlashID. + * @param hqspi QSPI handle. + * @param FlashID Index of the flash memory to be accessed. + * This parameter can be a value of @ref QSPI_Flash_Select. + * @note The FlashID is ignored when dual flash mode is enabled. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_QSPI_SetFlashID(QSPI_HandleTypeDef *hqspi, uint32_t FlashID) +{ + HAL_StatusTypeDef status = HAL_OK; + + /* Check the parameter */ + assert_param(IS_QSPI_FLASH_ID(FlashID)); + + /* Process locked */ + __HAL_LOCK(hqspi); + + if(hqspi->State == HAL_QSPI_STATE_READY) + { + /* Synchronize init structure with new FlashID value */ + hqspi->Init.FlashID = FlashID; + + /* Configure QSPI FlashID */ + MODIFY_REG(hqspi->Instance->CR, QUADSPI_CR_FSEL, FlashID); + } + else + { + status = HAL_BUSY; + } + + /* Process unlocked */ + __HAL_UNLOCK(hqspi); + + /* Return function status */ + return status; +} + +/** + * @} + */ + +/** + * @} + */ + +/** @defgroup QSPI_Private_Functions QSPI Private Functions + * @{ + */ + +/** + * @brief DMA QSPI receive process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMARxCplt(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent); + hqspi->RxXferCount = 0U; + + /* Enable the QSPI transfer complete Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC); +} + +/** + * @brief DMA QSPI transmit process complete callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMATxCplt(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent); + hqspi->TxXferCount = 0U; + + /* Enable the QSPI transfer complete Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC); +} + +/** + * @brief DMA QSPI receive process half complete callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMARxHalfCplt(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent); + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->RxHalfCpltCallback(hqspi); +#else + HAL_QSPI_RxHalfCpltCallback(hqspi); +#endif +} + +/** + * @brief DMA QSPI transmit process half complete callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMATxHalfCplt(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = (QSPI_HandleTypeDef*)(hdma->Parent); + +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->TxHalfCpltCallback(hqspi); +#else + HAL_QSPI_TxHalfCpltCallback(hqspi); +#endif +} + +/** + * @brief DMA QSPI communication error callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMAError(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->Parent); + + /* if DMA error is FIFO error ignore it */ + if(HAL_DMA_GetError(hdma) != HAL_DMA_ERROR_FE) + { + hqspi->RxXferCount = 0U; + hqspi->TxXferCount = 0U; + hqspi->ErrorCode |= HAL_QSPI_ERROR_DMA; + + /* Disable the DMA transfer by clearing the DMAEN bit in the QSPI CR register */ + CLEAR_BIT(hqspi->Instance->CR, QUADSPI_CR_DMAEN); + + /* Abort the QSPI */ + (void)HAL_QSPI_Abort_IT(hqspi); + + } +} + +/** + * @brief DMA QSPI abort complete callback. + * @param hdma DMA handle + * @retval None + */ +static void QSPI_DMAAbortCplt(DMA_HandleTypeDef *hdma) +{ + QSPI_HandleTypeDef* hqspi = ( QSPI_HandleTypeDef* )(hdma->Parent); + + hqspi->RxXferCount = 0U; + hqspi->TxXferCount = 0U; + + if(hqspi->State == HAL_QSPI_STATE_ABORT) + { + /* DMA Abort called by QSPI abort */ + /* Clear interrupt */ + __HAL_QSPI_CLEAR_FLAG(hqspi, QSPI_FLAG_TC); + + /* Enable the QSPI Transfer Complete Interrupt */ + __HAL_QSPI_ENABLE_IT(hqspi, QSPI_IT_TC); + + /* Configure QSPI: CR register with Abort request */ + SET_BIT(hqspi->Instance->CR, QUADSPI_CR_ABORT); + } + else + { + /* DMA Abort called due to a transfer error interrupt */ + /* Change state of QSPI */ + hqspi->State = HAL_QSPI_STATE_READY; + + /* Error callback */ +#if (USE_HAL_QSPI_REGISTER_CALLBACKS == 1) + hqspi->ErrorCallback(hqspi); +#else + HAL_QSPI_ErrorCallback(hqspi); +#endif + } +} + +/** + * @brief Wait for a flag state until timeout. + * @param hqspi QSPI handle + * @param Flag Flag checked + * @param State Value of the flag expected + * @param Tickstart Tick start value + * @param Timeout Duration of the timeout + * @retval HAL status + */ +static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout(QSPI_HandleTypeDef *hqspi, uint32_t Flag, + FlagStatus State, uint32_t Tickstart, uint32_t Timeout) +{ + /* Wait until flag is in expected state */ + while((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State) + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + { + if(((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + { + hqspi->State = HAL_QSPI_STATE_ERROR; + hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT; + + return HAL_ERROR; + } + } + } + return HAL_OK; +} + +/** + * @brief Wait for a flag state until timeout using CPU cycle. + * @param hqspi : QSPI handle + * @param Flag : Flag checked + * @param State : Value of the flag expected + * @param Timeout : Duration of the timeout + * @retval HAL status + */ +static HAL_StatusTypeDef QSPI_WaitFlagStateUntilTimeout_CPUCycle(QSPI_HandleTypeDef *hqspi, uint32_t Flag, FlagStatus State, uint32_t Timeout) +{ + __IO uint32_t count = Timeout * (SystemCoreClock / 16U / 1000U); + do + { + if (count-- == 0U) + { + hqspi->State = HAL_QSPI_STATE_ERROR; + hqspi->ErrorCode |= HAL_QSPI_ERROR_TIMEOUT; + return HAL_TIMEOUT; + } + } + while ((__HAL_QSPI_GET_FLAG(hqspi, Flag)) != State); + + return HAL_OK; +} + +/** + * @brief Configure the communication registers. + * @param hqspi QSPI handle + * @param cmd structure that contains the command configuration information + * @param FunctionalMode functional mode to configured + * This parameter can be one of the following values: + * @arg QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE: Indirect write mode + * @arg QSPI_FUNCTIONAL_MODE_INDIRECT_READ: Indirect read mode + * @arg QSPI_FUNCTIONAL_MODE_AUTO_POLLING: Automatic polling mode + * @arg QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED: Memory-mapped mode + * @retval None + */ +static void QSPI_Config(QSPI_HandleTypeDef *hqspi, QSPI_CommandTypeDef *cmd, uint32_t FunctionalMode) +{ + assert_param(IS_QSPI_FUNCTIONAL_MODE(FunctionalMode)); + + if ((cmd->DataMode != QSPI_DATA_NONE) && (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED)) + { + /* Configure QSPI: DLR register with the number of data to read or write */ + WRITE_REG(hqspi->Instance->DLR, (cmd->NbData - 1U)); + } + + if (cmd->InstructionMode != QSPI_INSTRUCTION_NONE) + { + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + /* Configure QSPI: ABR register with alternate bytes value */ + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + /*---- Command with instruction, address and alternate bytes ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateBytesSize | cmd->AlternateByteMode | + cmd->AddressSize | cmd->AddressMode | cmd->InstructionMode | + cmd->Instruction | FunctionalMode)); + + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + { + /* Configure QSPI: AR register with address value */ + WRITE_REG(hqspi->Instance->AR, cmd->Address); + } + } + else + { + /*---- Command with instruction and alternate bytes ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateBytesSize | cmd->AlternateByteMode | + cmd->AddressMode | cmd->InstructionMode | + cmd->Instruction | FunctionalMode)); + } + } + else + { + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + /*---- Command with instruction and address ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateByteMode | cmd->AddressSize | cmd->AddressMode | + cmd->InstructionMode | cmd->Instruction | FunctionalMode)); + + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + { + /* Configure QSPI: AR register with address value */ + WRITE_REG(hqspi->Instance->AR, cmd->Address); + } + } + else + { + /*---- Command with only instruction ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateByteMode | cmd->AddressMode | + cmd->InstructionMode | cmd->Instruction | FunctionalMode)); + } + } + } + else + { + if (cmd->AlternateByteMode != QSPI_ALTERNATE_BYTES_NONE) + { + /* Configure QSPI: ABR register with alternate bytes value */ + WRITE_REG(hqspi->Instance->ABR, cmd->AlternateBytes); + + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + /*---- Command with address and alternate bytes ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateBytesSize | cmd->AlternateByteMode | + cmd->AddressSize | cmd->AddressMode | + cmd->InstructionMode | FunctionalMode)); + + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + { + /* Configure QSPI: AR register with address value */ + WRITE_REG(hqspi->Instance->AR, cmd->Address); + } + } + else + { + /*---- Command with only alternate bytes ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateBytesSize | cmd->AlternateByteMode | + cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); + } + } + else + { + if (cmd->AddressMode != QSPI_ADDRESS_NONE) + { + /*---- Command with only address ----*/ + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateByteMode | cmd->AddressSize | + cmd->AddressMode | cmd->InstructionMode | FunctionalMode)); + + if (FunctionalMode != QSPI_FUNCTIONAL_MODE_MEMORY_MAPPED) + { + /* Configure QSPI: AR register with address value */ + WRITE_REG(hqspi->Instance->AR, cmd->Address); + } + } + else + { + /*---- Command with only data phase ----*/ + if (cmd->DataMode != QSPI_DATA_NONE) + { + /* Configure QSPI: CCR register with all communications parameters */ + WRITE_REG(hqspi->Instance->CCR, (cmd->DdrMode | cmd->DdrHoldHalfCycle | cmd->SIOOMode | + cmd->DataMode | (cmd->DummyCycles << QUADSPI_CCR_DCYC_Pos) | + cmd->AlternateByteMode | cmd->AddressMode | + cmd->InstructionMode | FunctionalMode)); + } + } + } + } +} + +/** + * @} + */ + +/** + * @} + */ + +#endif /* HAL_QSPI_MODULE_ENABLED */ +/** + * @} + */ + +/** + * @} + */ + +#endif /* defined(QUADSPI) */ diff --git a/project/Utilities/Fonts/Release_Notes.html b/project/Utilities/Fonts/Release_Notes.html new file mode 100644 index 0000000..ba1b4b7 --- /dev/null +++ b/project/Utilities/Fonts/Release_Notes.html @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + Release Notes for STM32Cube Fonts Utilities Driver + + + + + + + + + +

    +


    +

    +
    + + + + + + +
    + + + + + + + + + +
    +

    Back to Release page

    +
    +

    Release +Notes for STM32Cube Fonts Utilities Driver

    +

    Copyright +2014 STMicroelectronics

    +

    +
    +

     

    + + + + + + +
    +

    Update History


    +

    V1.0.0 / 18-February-2014

    + + + + +

    Main +Changes

    +

    + + + +
      +
    • First official release
      +
    • +

    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/project/Utilities/Fonts/font12.c b/project/Utilities/Fonts/font12.c new file mode 100644 index 0000000..79a6f69 --- /dev/null +++ b/project/Utilities/Fonts/font12.c @@ -0,0 +1,1464 @@ +/** + ****************************************************************************** + * @file Font12.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ +// +// Font data for Courier New 12pt +// + +const uint8_t Font12_Table[] = +{ + // @0 ' ' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @12 '!' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @24 '"' (7 pixels wide) + 0x00, // + 0x6C, // ## ## + 0x48, // # # + 0x48, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @36 '#' (7 pixels wide) + 0x00, // + 0x14, // # # + 0x14, // # # + 0x28, // # # + 0x7C, // ##### + 0x28, // # # + 0x7C, // ##### + 0x28, // # # + 0x50, // # # + 0x50, // # # + 0x00, // + 0x00, // + + // @48 '$' (7 pixels wide) + 0x00, // + 0x10, // # + 0x38, // ### + 0x40, // # + 0x40, // # + 0x38, // ### + 0x48, // # # + 0x70, // ### + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @60 '%' (7 pixels wide) + 0x00, // + 0x20, // # + 0x50, // # # + 0x20, // # + 0x0C, // ## + 0x70, // ### + 0x08, // # + 0x14, // # # + 0x08, // # + 0x00, // + 0x00, // + 0x00, // + + // @72 '&' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x20, // # + 0x20, // # + 0x54, // # # # + 0x48, // # # + 0x34, // ## # + 0x00, // + 0x00, // + 0x00, // + + // @84 ''' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @96 '(' (7 pixels wide) + 0x00, // + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x08, // # + 0x00, // + + // @108 ')' (7 pixels wide) + 0x00, // + 0x20, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @120 '*' (7 pixels wide) + 0x00, // + 0x10, // # + 0x7C, // ##### + 0x10, // # + 0x28, // # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @132 '+' (7 pixels wide) + 0x00, // + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0xFE, // ####### + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @144 ',' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x10, // # + 0x30, // ## + 0x20, // # + 0x00, // + + // @156 '-' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @168 '.' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @180 '/' (7 pixels wide) + 0x00, // + 0x04, // # + 0x04, // # + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + 0x00, // + + // @192 '0' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @204 '1' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @216 '2' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x04, // # + 0x08, // # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @228 '3' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x04, // # + 0x18, // ## + 0x04, // # + 0x04, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @240 '4' (7 pixels wide) + 0x00, // + 0x0C, // ## + 0x14, // # # + 0x14, // # # + 0x24, // # # + 0x44, // # # + 0x7E, // ###### + 0x04, // # + 0x0E, // ### + 0x00, // + 0x00, // + 0x00, // + + // @252 '5' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x20, // # + 0x20, // # + 0x38, // ### + 0x04, // # + 0x04, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @264 '6' (7 pixels wide) + 0x00, // + 0x1C, // ### + 0x20, // # + 0x40, // # + 0x78, // #### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @276 '7' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x44, // # # + 0x04, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @288 '8' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @300 '9' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x08, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @312 ':' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @324 ';' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x18, // ## + 0x00, // + 0x00, // + 0x18, // ## + 0x30, // ## + 0x20, // # + 0x00, // + 0x00, // + + // @336 '<' (7 pixels wide) + 0x00, // + 0x00, // + 0x0C, // ## + 0x10, // # + 0x60, // ## + 0x80, // # + 0x60, // ## + 0x10, // # + 0x0C, // ## + 0x00, // + 0x00, // + 0x00, // + + // @348 '=' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x00, // + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @360 '>' (7 pixels wide) + 0x00, // + 0x00, // + 0xC0, // ## + 0x20, // # + 0x18, // ## + 0x04, // # + 0x18, // ## + 0x20, // # + 0xC0, // ## + 0x00, // + 0x00, // + 0x00, // + + // @372 '?' (7 pixels wide) + 0x00, // + 0x00, // + 0x18, // ## + 0x24, // # # + 0x04, // # + 0x08, // # + 0x10, // # + 0x00, // + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @384 '@' (7 pixels wide) + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x4C, // # ## + 0x54, // # # # + 0x54, // # # # + 0x4C, // # ## + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @396 'A' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x28, // # # + 0x28, // # # + 0x28, // # # + 0x7C, // ##### + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @408 'B' (7 pixels wide) + 0x00, // + 0xF8, // ##### + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @420 'C' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x40, // # + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @432 'D' (7 pixels wide) + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + 0x00, // + + // @444 'E' (7 pixels wide) + 0x00, // + 0xFC, // ###### + 0x44, // # # + 0x50, // # # + 0x70, // ### + 0x50, // # # + 0x40, // # + 0x44, // # # + 0xFC, // ###### + 0x00, // + 0x00, // + 0x00, // + + // @456 'F' (7 pixels wide) + 0x00, // + 0x7E, // ###### + 0x22, // # # + 0x28, // # # + 0x38, // ### + 0x28, // # # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @468 'G' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x4E, // # ### + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @480 'H' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x7C, // ##### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @492 'I' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @504 'J' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x08, // # + 0x08, // # + 0x08, // # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @516 'K' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x48, // # # + 0x50, // # # + 0x70, // ### + 0x48, // # # + 0x44, // # # + 0xE6, // ### ## + 0x00, // + 0x00, // + 0x00, // + + // @528 'L' (7 pixels wide) + 0x00, // + 0x70, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x24, // # # + 0x24, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @540 'M' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x6C, // ## ## + 0x6C, // ## ## + 0x54, // # # # + 0x54, // # # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @552 'N' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x64, // ## # + 0x64, // ## # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x4C, // # ## + 0xEC, // ### ## + 0x00, // + 0x00, // + 0x00, // + + // @564 'O' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @576 'P' (7 pixels wide) + 0x00, // + 0x78, // #### + 0x24, // # # + 0x24, // # # + 0x24, // # # + 0x38, // ### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @588 'Q' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x1C, // ### + 0x00, // + 0x00, // + + // @600 'R' (7 pixels wide) + 0x00, // + 0xF8, // ##### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x48, // # # + 0x44, // # # + 0xE2, // ### # + 0x00, // + 0x00, // + 0x00, // + + // @612 'S' (7 pixels wide) + 0x00, // + 0x34, // ## # + 0x4C, // # ## + 0x40, // # + 0x38, // ### + 0x04, // # + 0x04, // # + 0x64, // ## # + 0x58, // # ## + 0x00, // + 0x00, // + 0x00, // + + // @624 'T' (7 pixels wide) + 0x00, // + 0xFE, // ####### + 0x92, // # # # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @636 'U' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @648 'V' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @660 'W' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + + // @672 'X' (7 pixels wide) + 0x00, // + 0xC6, // ## ## + 0x44, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x28, // # # + 0x44, // # # + 0xC6, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @684 'Y' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @696 'Z' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x44, // # # + 0x08, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @708 '[' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x38, // ### + 0x00, // + + // @720 '\' (7 pixels wide) + 0x00, // + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x00, // + 0x00, // + + // @732 ']' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x38, // ### + 0x00, // + + // @744 '^' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x28, // # # + 0x44, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @756 '_' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0xFE, // ####### + + // @768 '`' (7 pixels wide) + 0x00, // + 0x10, // # + 0x08, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @780 'a' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x3C, // #### + 0x44, // # # + 0x44, // # # + 0x3E, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @792 'b' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @804 'c' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @816 'd' (7 pixels wide) + 0x00, // + 0x0C, // ## + 0x04, // # + 0x34, // ## # + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3E, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @828 'e' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x7C, // ##### + 0x40, // # + 0x40, // # + 0x3C, // #### + 0x00, // + 0x00, // + 0x00, // + + // @840 'f' (7 pixels wide) + 0x00, // + 0x1C, // ### + 0x20, // # + 0x7C, // ##### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @852 'g' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x36, // ## ## + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x38, // ### + 0x00, // + + // @864 'h' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @876 'i' (7 pixels wide) + 0x00, // + 0x10, // # + 0x00, // + 0x70, // ### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @888 'j' (7 pixels wide) + 0x00, // + 0x10, // # + 0x00, // + 0x78, // #### + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x70, // ### + 0x00, // + + // @900 'k' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x5C, // # ### + 0x48, // # # + 0x70, // ### + 0x50, // # # + 0x48, // # # + 0xDC, // ## ### + 0x00, // + 0x00, // + 0x00, // + + // @912 'l' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @924 'm' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xE8, // ### # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0xFE, // ####### + 0x00, // + 0x00, // + 0x00, // + + // @936 'n' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @948 'o' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @960 'p' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x40, // # + 0xE0, // ### + 0x00, // + + // @972 'q' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x36, // ## ## + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x0E, // ### + 0x00, // + + // @984 'r' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x6C, // ## ## + 0x30, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @996 's' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x38, // ### + 0x04, // # + 0x44, // # # + 0x78, // #### + 0x00, // + 0x00, // + 0x00, // + + // @1008 't' (7 pixels wide) + 0x00, // + 0x00, // + 0x20, // # + 0x7C, // ##### + 0x20, // # + 0x20, // # + 0x20, // # + 0x22, // # # + 0x1C, // ### + 0x00, // + 0x00, // + 0x00, // + + // @1020 'u' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xCC, // ## ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x4C, // # ## + 0x36, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @1032 'v' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @1044 'w' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + + // @1056 'x' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xCC, // ## ## + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x48, // # # + 0xCC, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @1068 'y' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x24, // # # + 0x28, // # # + 0x18, // ## + 0x10, // # + 0x10, // # + 0x78, // #### + 0x00, // + + // @1080 'z' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x48, // # # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @1092 '{' (7 pixels wide) + 0x00, // + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x00, // + + // @1104 '|' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @1116 '}' (7 pixels wide) + 0x00, // + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x00, // + + // @1128 '~' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x24, // # # + 0x58, // # ## + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // +}; + +sFONT Font12 = { + Font12_Table, + 7, /* Width */ + 12, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Utilities/Fonts/font16.c b/project/Utilities/Fonts/font16.c new file mode 100644 index 0000000..97d2d31 --- /dev/null +++ b/project/Utilities/Fonts/font16.c @@ -0,0 +1,1844 @@ +/** + ****************************************************************************** + * @file font16.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font16 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file provides text font16 for STM32xx-EVAL's LCD driver. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ +// +// Font data for Courier New 12pt +// + +const uint8_t Font16_Table[] = +{ + // @0 ' ' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @32 '!' (11 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @64 '"' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x1D, 0xC0, // ### ### + 0x08, 0x80, // # # + 0x08, 0x80, // # # + 0x08, 0x80, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @96 '#' (11 pixels wide) + 0x00, 0x00, // + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x3F, 0xC0, // ######## + 0x1B, 0x00, // ## ## + 0x3F, 0xC0, // ######## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @128 '$' (11 pixels wide) + 0x04, 0x00, // # + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x38, 0x00, // ### + 0x1E, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @160 '%' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x24, 0x00, // # # + 0x24, 0x00, // # # + 0x18, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x1E, 0x00, // #### + 0x31, 0x80, // ## ## + 0x02, 0x40, // # # + 0x02, 0x40, // # # + 0x01, 0x80, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @192 '&' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x1D, 0x80, // ### ## + 0x37, 0x00, // ## ### + 0x33, 0x00, // ## ## + 0x1D, 0x80, // ### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @224 ''' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @256 '(' (11 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0E, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0E, 0x00, // ### + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @288 ')' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x1C, 0x00, // ### + 0x18, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @320 '*' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x3F, 0xC0, // ######## + 0x0F, 0x00, // #### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @352 '+' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x3F, 0x80, // ####### + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @384 ',' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x0C, 0x00, // ## + 0x08, 0x00, // # + 0x08, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + + // @416 '-' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @448 '.' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @480 '/' (11 pixels wide) + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @512 '0' (11 pixels wide) + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @544 '1' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x3E, 0x00, // ##### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @576 '2' (11 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x19, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @608 '3' (11 pixels wide) + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x61, 0x80, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x61, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @640 '4' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x0F, 0x00, // #### + 0x0B, 0x00, // # ## + 0x1B, 0x00, // ## ## + 0x13, 0x00, // # ## + 0x33, 0x00, // ## ## + 0x3F, 0x80, // ####### + 0x03, 0x00, // ## + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @672 '5' (11 pixels wide) + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1F, 0x00, // ##### + 0x11, 0x80, // # ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x21, 0x80, // # ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @704 '6' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1C, 0x00, // ### + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @736 '7' (11 pixels wide) + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x43, 0x00, // # ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @768 '8' (11 pixels wide) + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @800 '9' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x07, 0x00, // ### + 0x3C, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @832 ':' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @864 ';' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x08, 0x00, // # + 0x08, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @896 '<' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0xC0, // ## + 0x03, 0x00, // ## + 0x04, 0x00, // # + 0x18, 0x00, // ## + 0x60, 0x00, // ## + 0x18, 0x00, // ## + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @928 '=' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @960 '>' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x60, 0x00, // ## + 0x18, 0x00, // ## + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0xC0, // ## + 0x03, 0x00, // ## + 0x04, 0x00, // # + 0x18, 0x00, // ## + 0x60, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @992 '?' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x01, 0x80, // ## + 0x07, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1024 '@' (11 pixels wide) + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x11, 0x00, // # # + 0x21, 0x00, // # # + 0x21, 0x00, // # # + 0x27, 0x00, // # ### + 0x29, 0x00, // # # # + 0x29, 0x00, // # # # + 0x27, 0x00, // # ### + 0x20, 0x00, // # + 0x11, 0x00, // # # + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1056 'A' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x0F, 0x00, // #### + 0x09, 0x00, // # # + 0x19, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x79, 0xE0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1088 'B' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1120 'C' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x40, // ##### # + 0x30, 0xC0, // ## ## + 0x60, 0x40, // ## # + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x60, 0x40, // ## # + 0x30, 0x80, // ## # + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1152 'D' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1184 'E' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x30, 0x80, // ## # + 0x30, 0x80, // ## # + 0x32, 0x00, // ## # + 0x3E, 0x00, // ##### + 0x32, 0x00, // ## # + 0x30, 0x80, // ## # + 0x30, 0x80, // ## # + 0x7F, 0x80, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1216 'F' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x30, 0x40, // ## # + 0x30, 0x40, // ## # + 0x32, 0x00, // ## # + 0x3E, 0x00, // ##### + 0x32, 0x00, // ## # + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1248 'G' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1E, 0x80, // #### # + 0x31, 0x80, // ## ## + 0x60, 0x80, // ## # + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x67, 0xC0, // ## ##### + 0x61, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1280 'H' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x80, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1312 'I' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1344 'J' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x63, 0x00, // ## ## + 0x63, 0x00, // ## ## + 0x63, 0x00, // ## ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1376 'K' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x33, 0x00, // ## ## + 0x36, 0x00, // ## ## + 0x3C, 0x00, // #### + 0x3E, 0x00, // ##### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x79, 0xC0, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1408 'L' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7E, 0x00, // ###### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x40, // ## # + 0x18, 0x40, // ## # + 0x18, 0x40, // ## # + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1440 'M' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0xE0, 0xE0, // ### ### + 0x60, 0xC0, // ## ## + 0x71, 0xC0, // ### ### + 0x7B, 0xC0, // #### #### + 0x6A, 0xC0, // ## # # ## + 0x6E, 0xC0, // ## ### ## + 0x64, 0xC0, // ## # ## + 0x60, 0xC0, // ## ## + 0xFB, 0xE0, // ##### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1472 'N' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x73, 0xC0, // ### #### + 0x31, 0x80, // ## ## + 0x39, 0x80, // ### ## + 0x3D, 0x80, // #### ## + 0x35, 0x80, // ## # ## + 0x37, 0x80, // ## #### + 0x33, 0x80, // ## ### + 0x31, 0x80, // ## ## + 0x79, 0x80, // #### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1504 'O' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1536 'P' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7E, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1568 'Q' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x0C, 0xC0, // ## ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1600 'R' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3E, 0x00, // ##### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7C, 0xE0, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1632 'S' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x38, 0x00, // ### + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1664 'T' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x4C, 0x80, // # ## # + 0x4C, 0x80, // # ## # + 0x4C, 0x80, // # ## # + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1696 'U' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1728 'V' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x0A, 0x00, // # # + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1760 'W' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0xFB, 0xE0, // ##### ##### + 0x60, 0xC0, // ## ## + 0x64, 0xC0, // ## # ## + 0x6E, 0xC0, // ## ### ## + 0x6E, 0xC0, // ## ### ## + 0x2A, 0x80, // # # # # + 0x3B, 0x80, // ### ### + 0x3B, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1792 'X' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1824 'Y' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x79, 0xE0, // #### #### + 0x30, 0xC0, // ## ## + 0x19, 0x80, // ## ## + 0x0F, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1856 'Z' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x21, 0x80, // # ## + 0x23, 0x00, // # ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x0C, 0x00, // ## + 0x18, 0x80, // ## # + 0x30, 0x80, // ## # + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1888 '[' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1920 '\' (11 pixels wide) + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1952 ']' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1E, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1984 '^' (11 pixels wide) + 0x04, 0x00, // # + 0x0A, 0x00, // # # + 0x0A, 0x00, // # # + 0x11, 0x00, // # # + 0x20, 0x80, // # # + 0x20, 0x80, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2016 '_' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0xFF, 0xE0, // ########### + + // @2048 '`' (11 pixels wide) + 0x08, 0x00, // # + 0x04, 0x00, // # + 0x02, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2080 'a' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2112 'b' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x39, 0x80, // ### ## + 0x77, 0x00, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2144 'c' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1E, 0x80, // #### # + 0x31, 0x80, // ## ## + 0x60, 0x80, // ## # + 0x60, 0x00, // ## + 0x60, 0x80, // ## # + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2176 'd' (11 pixels wide) + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1D, 0x80, // ### ## + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2208 'e' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x7F, 0xC0, // ######### + 0x60, 0x00, // ## + 0x30, 0xC0, // ## ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2240 'f' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0xE0, // ###### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x80, // ####### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2272 'g' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2304 'h' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2336 'i' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2368 'j' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2400 'k' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x80, // ## #### + 0x36, 0x00, // ## ## + 0x3C, 0x00, // #### + 0x3C, 0x00, // #### + 0x36, 0x00, // ## ## + 0x33, 0x00, // ## ## + 0x77, 0xC0, // ### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2432 'l' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2464 'm' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x76, 0xE0, // ### ## ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2496 'n' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x00, // ### ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2528 'o' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2560 'p' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x00, // ### ### + 0x39, 0x80, // ### ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x39, 0x80, // ### ## + 0x37, 0x00, // ## ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2592 'q' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2624 'r' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0x80, // #### ### + 0x1C, 0xC0, // ### ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2656 's' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x3C, 0x00, // #### + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2688 't' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x7F, 0x00, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x80, // ## # + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2720 'u' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x73, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2752 'v' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2784 'w' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0xF1, 0xE0, // #### #### + 0x60, 0xC0, // ## ## + 0x64, 0xC0, // ## # ## + 0x6E, 0xC0, // ## ### ## + 0x3B, 0x80, // ### ### + 0x3B, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2816 'x' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2848 'y' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x79, 0xE0, // #### #### + 0x30, 0xC0, // ## ## + 0x19, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x0B, 0x00, // # ## + 0x0F, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2880 'z' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x21, 0x80, // # ## + 0x03, 0x00, // ## + 0x0E, 0x00, // ### + 0x18, 0x00, // ## + 0x30, 0x80, // ## # + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2912 '{' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2944 '|' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2976 '}' (11 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3008 '~' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x24, 0x80, // # # # + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // +}; + +sFONT Font16 = { + Font16_Table, + 11, /* Width */ + 16, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Utilities/Fonts/font20.c b/project/Utilities/Fonts/font20.c new file mode 100644 index 0000000..9e6fb8a --- /dev/null +++ b/project/Utilities/Fonts/font20.c @@ -0,0 +1,2223 @@ +/** + ****************************************************************************** + * @file font20.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font20 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file provides text font20 for STM32xx-EVAL's LCD driver. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ + +// Character bitmaps for Courier New 15pt +const uint8_t Font20_Table[] = +{ + // @0 ' ' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @40 '!' (14 pixels wide) + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @80 '"' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1C, 0xE0, // ### ### + 0x1C, 0xE0, // ### ### + 0x1C, 0xE0, // ### ### + 0x08, 0x40, // # # + 0x08, 0x40, // # # + 0x08, 0x40, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @120 '#' (14 pixels wide) + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @160 '$' (14 pixels wide) + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x07, 0xE0, // ###### + 0x0F, 0xE0, // ####### + 0x18, 0x60, // ## ## + 0x18, 0x00, // ## + 0x1F, 0x00, // ##### + 0x0F, 0xC0, // ###### + 0x00, 0xE0, // ### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xC0, // ####### + 0x1F, 0x80, // ###### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @200 '%' (14 pixels wide) + 0x00, 0x00, // + 0x1C, 0x00, // ### + 0x22, 0x00, // # # + 0x22, 0x00, // # # + 0x22, 0x00, // # # + 0x1C, 0x60, // ### ## + 0x01, 0xE0, // #### + 0x0F, 0x80, // ##### + 0x3C, 0x00, // #### + 0x31, 0xC0, // ## ### + 0x02, 0x20, // # # + 0x02, 0x20, // # # + 0x02, 0x20, // # # + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @240 '&' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0xE0, // ##### + 0x0F, 0xE0, // ####### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x0F, 0x30, // #### ## + 0x1F, 0xF0, // ######### + 0x19, 0xE0, // ## #### + 0x18, 0xC0, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @280 ''' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x01, 0x00, // # + 0x01, 0x00, // # + 0x01, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @320 '(' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @360 ')' (14 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @400 '*' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1B, 0x60, // ## ## ## + 0x1F, 0xE0, // ######## + 0x07, 0x80, // #### + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x0C, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @440 '+' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @480 ',' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @520 '-' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @560 '.' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @600 '/' (14 pixels wide) + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @640 '0' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x1F, 0xC0, // ####### + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @680 '1' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @720 '2' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @760 '3' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x3F, 0xC0, // ######## + 0x30, 0xE0, // ## ### + 0x00, 0x60, // ## + 0x00, 0xE0, // ### + 0x07, 0xC0, // ##### + 0x07, 0xC0, // ##### + 0x00, 0xE0, // ### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x60, 0xE0, // ## ### + 0x7F, 0xC0, // ######### + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @800 '4' (14 pixels wide) + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x06, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0xC0, // ## + 0x03, 0xE0, // ##### + 0x03, 0xE0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @840 '5' (14 pixels wide) + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1F, 0x80, // ###### + 0x1F, 0xC0, // ####### + 0x18, 0xE0, // ## ### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x30, 0xE0, // ## ### + 0x3F, 0xC0, // ######## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @880 '6' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xE0, // ##### + 0x0F, 0xE0, // ####### + 0x1E, 0x00, // #### + 0x18, 0x00, // ## + 0x38, 0x00, // ### + 0x37, 0x80, // ## #### + 0x3F, 0xC0, // ######## + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xC0, // ####### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @920 '7' (14 pixels wide) + 0x00, 0x00, // + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x30, 0x60, // ## ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @960 '8' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xC0, // ####### + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1000 '9' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x1F, 0xC0, // ####### + 0x38, 0xC0, // ### ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xE0, // ######## + 0x0F, 0x60, // #### ## + 0x00, 0xE0, // ### + 0x00, 0xC0, // ## + 0x03, 0xC0, // #### + 0x3F, 0x80, // ####### + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1040 ':' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1080 ';' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x01, 0xC0, // ### + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1120 '<' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x30, // ## + 0x00, 0xF0, // #### + 0x03, 0xC0, // #### + 0x07, 0x00, // ### + 0x1C, 0x00, // ### + 0x78, 0x00, // #### + 0x1C, 0x00, // ### + 0x07, 0x00, // ### + 0x03, 0xC0, // #### + 0x00, 0xF0, // #### + 0x00, 0x30, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1160 '=' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xF0, // ########### + 0x7F, 0xF0, // ########### + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xF0, // ########### + 0x7F, 0xF0, // ########### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1200 '>' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x30, 0x00, // ## + 0x3C, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x80, // ### + 0x00, 0xE0, // ### + 0x00, 0x78, // #### + 0x00, 0xE0, // ### + 0x03, 0x80, // ### + 0x0F, 0x00, // #### + 0x3C, 0x00, // #### + 0x30, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1240 '?' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x00, 0x60, // ## + 0x01, 0xC0, // ### + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1280 '@' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x0C, 0x80, // ## # + 0x08, 0x40, // # # + 0x10, 0x40, // # # + 0x10, 0x40, // # # + 0x11, 0xC0, // # ### + 0x12, 0x40, // # # # + 0x12, 0x40, // # # # + 0x12, 0x40, // # # # + 0x11, 0xC0, // # ### + 0x10, 0x00, // # + 0x08, 0x00, // # + 0x08, 0x40, // # # + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1320 'A' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x03, 0x80, // ### + 0x06, 0xC0, // ## ## + 0x06, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x30, 0x30, // ## ## + 0x78, 0x78, // #### #### + 0x78, 0x78, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1360 'B' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x3F, 0xC0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xC0, // ####### + 0x1F, 0xE0, // ######## + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1400 'C' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x0F, 0xF0, // ######## + 0x1C, 0x70, // ### ### + 0x38, 0x30, // ### ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x38, 0x30, // ### ## + 0x1C, 0x70, // ### ### + 0x0F, 0xE0, // ####### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1440 'D' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x7F, 0xC0, // ######### + 0x30, 0xE0, // ## ### + 0x30, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x70, // ## ### + 0x30, 0xE0, // ## ### + 0x7F, 0xC0, // ######### + 0x7F, 0x80, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1480 'E' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1520 'F' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1560 'G' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x31, 0xF8, // ## ###### + 0x31, 0xF8, // ## ###### + 0x30, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1600 'H' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1640 'I' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1680 'J' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0xF8, // ####### + 0x03, 0xF8, // ####### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0xE0, // ## ### + 0x3F, 0xC0, // ######## + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1720 'K' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3E, 0xF8, // ##### ##### + 0x3E, 0xF8, // ##### ##### + 0x18, 0xE0, // ## ### + 0x19, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1F, 0x00, // ##### + 0x1D, 0x80, // ### ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0x60, // ## ## + 0x3E, 0x78, // ##### #### + 0x3E, 0x38, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1760 'L' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x30, // ## ## + 0x0C, 0x30, // ## ## + 0x0C, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1800 'M' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0x78, // #### #### + 0x78, 0x78, // #### #### + 0x38, 0x70, // ### ### + 0x3C, 0xF0, // #### #### + 0x34, 0xB0, // ## # # ## + 0x37, 0xB0, // ## #### ## + 0x37, 0xB0, // ## #### ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x30, 0x30, // ## ## + 0x7C, 0xF8, // ##### ##### + 0x7C, 0xF8, // ##### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1840 'N' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x39, 0xF0, // ### ##### + 0x3D, 0xF0, // #### ##### + 0x1C, 0x60, // ### ## + 0x1E, 0x60, // #### ## + 0x1E, 0x60, // #### ## + 0x1B, 0x60, // ## ## ## + 0x1B, 0x60, // ## ## ## + 0x19, 0xE0, // ## #### + 0x19, 0xE0, // ## #### + 0x18, 0xE0, // ## ### + 0x3E, 0xE0, // ##### ### + 0x3E, 0x60, // ##### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1880 'O' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x1C, 0xE0, // ### ### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1920 'P' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x3F, 0xE0, // ######### + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xE0, // ######## + 0x1F, 0xC0, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1960 'Q' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x1C, 0xE0, // ### ### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x07, 0xB0, // #### ## + 0x0F, 0xF0, // ######## + 0x0C, 0xE0, // ## ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2000 'R' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x3F, 0xE0, // ######### + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xE0, // ######## + 0x1F, 0xC0, // ####### + 0x18, 0xE0, // ## ### + 0x18, 0x60, // ## ## + 0x18, 0x70, // ## ### + 0x3E, 0x38, // ##### ### + 0x3E, 0x18, // ##### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2040 'S' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0xB0, // ##### ## + 0x1F, 0xF0, // ######### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x38, 0x00, // ### + 0x1F, 0x80, // ###### + 0x07, 0xE0, // ###### + 0x00, 0x70, // ### + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x3F, 0xE0, // ######### + 0x37, 0xC0, // ## ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2080 'T' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0xC0, // ###### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2120 'U' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2160 'V' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2200 'W' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7C, 0x7C, // ##### ##### + 0x7C, 0x7C, // ##### ##### + 0x30, 0x18, // ## ## + 0x33, 0x98, // ## ### ## + 0x33, 0x98, // ## ### ## + 0x33, 0x98, // ## ### ## + 0x36, 0xD8, // ## ## ## ## + 0x16, 0xD0, // # ## ## # + 0x1C, 0x70, // ### ### + 0x1C, 0x70, // ### ### + 0x1C, 0x70, // ### ### + 0x18, 0x30, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2240 'X' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x0D, 0x80, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2280 'Y' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x0C, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x07, 0x80, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0xC0, // ###### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2320 'Z' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2360 '[' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2400 '\' (14 pixels wide) + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2440 ']' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0x00, // #### + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2480 '^' (14 pixels wide) + 0x00, 0x00, // + 0x02, 0x00, // # + 0x07, 0x00, // ### + 0x0D, 0x80, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x20, 0x20, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2520 '_' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0xFF, 0xFC, // ############## + 0xFF, 0xFC, // ############## + + // @2560 '`' (14 pixels wide) + 0x00, 0x00, // + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0x80, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2600 'a' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0xC0, // ###### + 0x1F, 0xE0, // ######## + 0x00, 0x60, // ## + 0x0F, 0xE0, // ####### + 0x1F, 0xE0, // ######## + 0x38, 0x60, // ### ## + 0x30, 0xE0, // ## ### + 0x3F, 0xF0, // ########## + 0x1F, 0x70, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2640 'b' (14 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x80, // ## #### + 0x3F, 0xE0, // ######### + 0x38, 0x60, // ### ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x60, // ### ## + 0x7F, 0xE0, // ########## + 0x77, 0x80, // ### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2680 'c' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x38, 0x30, // ### ## + 0x1F, 0xF0, // ######### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2720 'd' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x70, // ### + 0x00, 0x70, // ### + 0x00, 0x30, // ## + 0x00, 0x30, // ## + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1F, 0xF8, // ########## + 0x07, 0xB8, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2760 'e' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x30, 0x00, // ## + 0x18, 0x30, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2800 'f' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xF0, // ###### + 0x07, 0xF0, // ####### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2840 'g' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB8, // #### ### + 0x1F, 0xF8, // ########## + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x30, // ## + 0x00, 0x70, // ### + 0x0F, 0xE0, // ####### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2880 'h' (14 pixels wide) + 0x00, 0x00, // + 0x38, 0x00, // ### + 0x38, 0x00, // ### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1B, 0xC0, // ## #### + 0x1F, 0xE0, // ######## + 0x1C, 0x60, // ### ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2920 'i' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2960 'j' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0xC0, // ### + 0x3F, 0x80, // ####### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3000 'k' (14 pixels wide) + 0x00, 0x00, // + 0x38, 0x00, // ### + 0x38, 0x00, // ### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1B, 0xE0, // ## ##### + 0x1B, 0xE0, // ## ##### + 0x1B, 0x00, // ## ## + 0x1E, 0x00, // #### + 0x1E, 0x00, // #### + 0x1B, 0x00, // ## ## + 0x19, 0x80, // ## ## + 0x39, 0xF0, // ### ##### + 0x39, 0xF0, // ### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3040 'l' (14 pixels wide) + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3080 'm' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7E, 0xE0, // ###### ### + 0x7F, 0xF0, // ########### + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x7B, 0xB8, // #### ### ### + 0x7B, 0xB8, // #### ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3120 'n' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3B, 0xC0, // ### #### + 0x3F, 0xE0, // ######### + 0x1C, 0x60, // ### ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3160 'o' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3200 'p' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x80, // ### #### + 0x7F, 0xE0, // ########## + 0x38, 0x60, // ### ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x60, // ### ## + 0x3F, 0xE0, // ######### + 0x37, 0x80, // ## #### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3240 'q' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB8, // #### ### + 0x1F, 0xF8, // ########## + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x30, // ## + 0x00, 0x30, // ## + 0x00, 0xF8, // ##### + 0x00, 0xF8, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3280 'r' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xE0, // #### ### + 0x3D, 0xF0, // #### ##### + 0x0F, 0x30, // #### ## + 0x0E, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3320 's' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xE0, // ###### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x1E, 0x00, // #### + 0x0F, 0xC0, // ###### + 0x01, 0xE0, // #### + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3360 't' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x30, // ## ## + 0x0F, 0xF0, // ######## + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3400 'u' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x38, 0xE0, // ### ### + 0x38, 0xE0, // ### ### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xF0, // ######### + 0x0F, 0x70, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3440 'v' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3480 'w' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x32, 0x60, // ## # ## + 0x32, 0x60, // ## # ## + 0x37, 0xE0, // ## ###### + 0x1D, 0xC0, // ### ### + 0x1D, 0xC0, // ### ### + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3520 'x' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x0C, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x03, 0x00, // ## + 0x07, 0x80, // #### + 0x0C, 0xC0, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3560 'y' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0F, 0x80, // ##### + 0x07, 0x00, // ### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x7F, 0x00, // ####### + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3600 'z' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0xC0, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3640 '{' (14 pixels wide) + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x03, 0xC0, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x07, 0x00, // ### + 0x0E, 0x00, // ### + 0x07, 0x00, // ### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0xC0, // #### + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3680 '|' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3720 '}' (14 pixels wide) + 0x00, 0x00, // + 0x1C, 0x00, // ### + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x07, 0x00, // ### + 0x03, 0x80, // ### + 0x07, 0x00, // ### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1E, 0x00, // #### + 0x1C, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3760 '~' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x3F, 0x30, // ###### ## + 0x33, 0xF0, // ## ###### + 0x01, 0xE0, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // +}; + + +sFONT Font20 = { + Font20_Table, + 14, /* Width */ + 20, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Utilities/Fonts/font24.c b/project/Utilities/Fonts/font24.c new file mode 100644 index 0000000..6a04ba1 --- /dev/null +++ b/project/Utilities/Fonts/font24.c @@ -0,0 +1,2600 @@ +/** + ****************************************************************************** + * @file font24.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font24 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file provides text font24 for STM32xx-EVAL's LCD driver. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ +const uint8_t Font24_Table [] = +{ + // @0 ' ' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @72 '!' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @144 '"' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0E, 0x70, 0x00, // ### ### + 0x0E, 0x70, 0x00, // ### ### + 0x0E, 0x70, 0x00, // ### ### + 0x04, 0x20, 0x00, // # # + 0x04, 0x20, 0x00, // # # + 0x04, 0x20, 0x00, // # # + 0x04, 0x20, 0x00, // # # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @216 '#' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @288 '$' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x07, 0xB0, 0x00, // #### ## + 0x0F, 0xF0, 0x00, // ######## + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x70, 0x00, // ## ### + 0x1C, 0x00, 0x00, // ### + 0x0F, 0x80, 0x00, // ##### + 0x07, 0xE0, 0x00, // ###### + 0x00, 0xF0, 0x00, // #### + 0x18, 0x30, 0x00, // ## ## + 0x1C, 0x30, 0x00, // ### ## + 0x1C, 0x70, 0x00, // ### ### + 0x1F, 0xE0, 0x00, // ######## + 0x1B, 0xC0, 0x00, // ## #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @360 '%' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x80, 0x00, // #### + 0x0F, 0xC0, 0x00, // ###### + 0x1C, 0xE0, 0x00, // ### ### + 0x18, 0x60, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x1C, 0xE0, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x07, 0xE0, 0x00, // ###### + 0x1F, 0xF0, 0x00, // ######### + 0x07, 0x38, 0x00, // ### ### + 0x06, 0x18, 0x00, // ## ## + 0x06, 0x18, 0x00, // ## ## + 0x07, 0x38, 0x00, // ### ### + 0x03, 0xF0, 0x00, // ###### + 0x01, 0xE0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @432 '&' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xF0, 0x00, // ###### + 0x07, 0xF0, 0x00, // ####### + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x07, 0x00, 0x00, // ### + 0x0F, 0x9C, 0x00, // ##### ### + 0x1D, 0xFC, 0x00, // ### ####### + 0x18, 0xF0, 0x00, // ## #### + 0x18, 0x70, 0x00, // ## ### + 0x0F, 0xFC, 0x00, // ########## + 0x07, 0xDC, 0x00, // ##### ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @504 ''' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @576 '(' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0xF0, 0x00, // #### + 0x00, 0xE0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0x38, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @648 ')' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x18, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x0F, 0x00, 0x00, // #### + 0x0E, 0x00, 0x00, // ### + 0x1C, 0x00, 0x00, // ### + 0x18, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @720 '*' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1D, 0xB8, 0x00, // ### ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @792 '+' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @864 ',' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @936 '-' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1008 '.' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1080 '/' (17 pixels wide) + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x0E, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1152 '0' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x07, 0xE0, 0x00, // ###### + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1224 '1' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x80, 0x00, // # + 0x07, 0x80, 0x00, // #### + 0x1F, 0x80, 0x00, // ###### + 0x1D, 0x80, 0x00, // ### ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1296 '2' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x1F, 0xF0, 0x00, // ######### + 0x38, 0x30, 0x00, // ### ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1368 '3' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xE0, 0x00, // ####### + 0x0C, 0x70, 0x00, // ## ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x70, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1440 '4' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xE0, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x03, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x30, 0x60, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x60, 0x00, // ## + 0x03, 0xF8, 0x00, // ####### + 0x03, 0xF8, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1512 '5' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF0, 0x00, // ######### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xC0, 0x00, // ## #### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x30, 0x00, // ### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x30, 0x30, 0x00, // ## ## + 0x3F, 0xF0, 0x00, // ########## + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1584 '6' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xF8, 0x00, // ##### + 0x03, 0xF8, 0x00, // ####### + 0x07, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xC0, 0x00, // ## #### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x30, 0x00, // ### ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x38, 0x00, // ## ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1656 '7' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0xE0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1728 '8' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xE0, 0x00, // ###### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x07, 0xE0, 0x00, // ###### + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x07, 0xE0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1800 '9' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x30, 0x00, // ### ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x38, 0x00, // ## ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xD8, 0x00, // #### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x1F, 0xC0, 0x00, // ####### + 0x1F, 0x00, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1872 ':' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1944 ';' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xF0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x02, 0x00, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2016 '<' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x1C, 0x00, // ### + 0x00, 0x3C, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x0F, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0xF0, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0x0F, 0x00, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0x3C, 0x00, // #### + 0x00, 0x1C, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2088 '=' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 0x00, // ############# + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 0x00, // ############# + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2160 '>' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x70, 0x00, 0x00, // ### + 0x78, 0x00, 0x00, // #### + 0x1E, 0x00, 0x00, // #### + 0x07, 0x80, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x00, 0x1E, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x07, 0x80, 0x00, // #### + 0x1E, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x70, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2232 '?' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x0F, 0xE0, 0x00, // ####### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x30, 0x00, // ## ## + 0x00, 0x70, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x03, 0xC0, 0x00, // #### + 0x03, 0x80, 0x00, // ### + 0x03, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2304 '@' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xE0, 0x00, // ##### + 0x07, 0xF0, 0x00, // ####### + 0x0E, 0x38, 0x00, // ### ### + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x78, 0x00, // ## #### + 0x18, 0xF8, 0x00, // ## ##### + 0x19, 0xD8, 0x00, // ## ### ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x18, 0xF8, 0x00, // ## ##### + 0x18, 0x78, 0x00, // ## #### + 0x18, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0E, 0x18, 0x00, // ### ## + 0x07, 0xF8, 0x00, // ######## + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2376 'A' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0xC0, 0x00, // ####### + 0x01, 0xC0, 0x00, // ### + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0F, 0xF8, 0x00, // ######### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0xFC, 0x7F, 0x00, // ###### ####### + 0xFC, 0x7F, 0x00, // ###### ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2448 'B' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xE0, 0x00, // ########## + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x1C, 0x00, // ## ### + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF0, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2520 'C' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2592 'D' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xC0, 0x00, // ######### + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0xF0, 0x00, // ########### + 0x7F, 0xE0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2664 'E' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF8, 0x00, // ############ + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x80, 0x00, // ## ## + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x19, 0x80, 0x00, // ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF8, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2736 'F' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0xCC, 0x00, // ## ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0F, 0xC0, 0x00, // ###### + 0x0F, 0xC0, 0x00, // ###### + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2808 'G' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0xFE, 0x00, // ## ####### + 0x30, 0xFE, 0x00, // ## ####### + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x0C, 0x00, // ### ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xFC, 0x00, // ########## + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2880 'H' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2952 'I' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3024 'J' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xFE, 0x00, // ########## + 0x07, 0xFE, 0x00, // ########## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x60, 0x00, // ## ## + 0x3F, 0xE0, 0x00, // ######### + 0x0F, 0x80, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3096 'K' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x3E, 0x00, // ####### ##### + 0x7F, 0x3E, 0x00, // ####### ##### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x18, 0xC0, 0x00, // ## ## + 0x19, 0x80, 0x00, // ## ## + 0x1B, 0x80, 0x00, // ## ### + 0x1F, 0xC0, 0x00, // ####### + 0x1C, 0xE0, 0x00, // ### ### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x1F, 0x00, // ####### ##### + 0x7F, 0x1F, 0x00, // ####### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3168 'L' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x80, 0x00, // ######## + 0x7F, 0x80, 0x00, // ######## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 0x00, // ############# + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3240 'M' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xF0, 0x0F, 0x00, // #### #### + 0xF8, 0x1F, 0x00, // ##### ##### + 0x38, 0x1C, 0x00, // ### ### + 0x3C, 0x3C, 0x00, // #### #### + 0x3C, 0x3C, 0x00, // #### #### + 0x36, 0x6C, 0x00, // ## ## ## ## + 0x36, 0x6C, 0x00, // ## ## ## ## + 0x33, 0xCC, 0x00, // ## #### ## + 0x33, 0xCC, 0x00, // ## #### ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0xFE, 0x7F, 0x00, // ####### ####### + 0xFE, 0x7F, 0x00, // ####### ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3312 'N' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0xFE, 0x00, // #### ####### + 0x78, 0xFE, 0x00, // #### ####### + 0x1C, 0x18, 0x00, // ### ## + 0x1E, 0x18, 0x00, // #### ## + 0x1F, 0x18, 0x00, // ##### ## + 0x1B, 0x18, 0x00, // ## ## ## + 0x1B, 0x98, 0x00, // ## ### ## + 0x19, 0xD8, 0x00, // ## ### ## + 0x18, 0xD8, 0x00, // ## ## ## + 0x18, 0xF8, 0x00, // ## ##### + 0x18, 0x78, 0x00, // ## #### + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x18, 0x00, // ####### ## + 0x7F, 0x18, 0x00, // ####### ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3384 'O' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3456 'P' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF8, 0x00, // ########### + 0x0C, 0x1C, 0x00, // ## ### + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0F, 0xF8, 0x00, // ######### + 0x0F, 0xE0, 0x00, // ####### + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3528 'Q' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x07, 0xC0, 0x00, // ##### + 0x07, 0xCC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x0C, 0x38, 0x00, // ## ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3600 'R' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xE0, 0x00, // ########## + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xC0, 0x00, // ####### + 0x18, 0xE0, 0x00, // ## ### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x1E, 0x00, // ####### #### + 0x7F, 0x0E, 0x00, // ####### ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3672 'S' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xD8, 0x00, // ##### ## + 0x0F, 0xF8, 0x00, // ######### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1E, 0x00, 0x00, // #### + 0x0F, 0xC0, 0x00, // ###### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x78, 0x00, // #### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x1F, 0xF0, 0x00, // ######### + 0x1B, 0xE0, 0x00, // ## ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3744 'T' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3816 'U' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3888 'V' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x7F, 0x00, // ####### ####### + 0x7F, 0x7F, 0x00, // ####### ####### + 0x18, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x00, 0x80, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3960 'W' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xFE, 0x3F, 0x80, // ####### ####### + 0xFE, 0x3F, 0x80, // ####### ####### + 0x30, 0x06, 0x00, // ## ## + 0x30, 0x06, 0x00, // ## ## + 0x30, 0x86, 0x00, // ## # ## + 0x19, 0xCC, 0x00, // ## ### ## + 0x19, 0xCC, 0x00, // ## ### ## + 0x1B, 0x6C, 0x00, // ## ## ## ## + 0x1B, 0x6C, 0x00, // ## ## ## ## + 0x1E, 0x7C, 0x00, // #### ##### + 0x0E, 0x38, 0x00, // ### ### + 0x0E, 0x38, 0x00, // ### ### + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4032 'X' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4104 'Y' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7C, 0x7E, 0x00, // ##### ###### + 0x7C, 0x7E, 0x00, // ##### ###### + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4176 'Z' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x18, 0xC0, 0x00, // ## ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4248 '[' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0xF0, 0x00, // ##### + 0x01, 0xF0, 0x00, // ##### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xF0, 0x00, // ##### + 0x01, 0xF0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4320 '\' (17 pixels wide) + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x0E, 0x00, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4392 ']' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x80, 0x00, // ##### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x80, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4464 '^' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x80, 0x00, // # + 0x01, 0xC0, 0x00, // ### + 0x03, 0xE0, 0x00, // ##### + 0x07, 0x70, 0x00, // ### ### + 0x06, 0x30, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x10, 0x04, 0x00, // # # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4536 '_' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xFF, 0xFF, 0x00, // ################ + 0xFF, 0xFF, 0x00, // ################ + + // @4608 '`' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x03, 0x00, 0x00, // ## + 0x03, 0x80, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x60, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4680 'a' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0F, 0xC0, 0x00, // ###### + 0x1F, 0xE0, 0x00, // ######## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x07, 0xF0, 0x00, // ####### + 0x1F, 0xF0, 0x00, // ######### + 0x38, 0x30, 0x00, // ### ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x70, 0x00, // ## ### + 0x1F, 0xFC, 0x00, // ########### + 0x0F, 0xBC, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4752 'b' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xE0, 0x00, // ## ##### + 0x1F, 0xF8, 0x00, // ########## + 0x1C, 0x18, 0x00, // ### ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x18, 0x00, // ### ## + 0x7F, 0xF8, 0x00, // ############ + 0x7B, 0xE0, 0x00, // #### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4824 'c' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x38, 0x0C, 0x00, // ### ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x38, 0x0C, 0x00, // ### ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4896 'd' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x78, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x07, 0xD8, 0x00, // ##### ## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xFE, 0x00, // ############ + 0x07, 0xDE, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4968 'e' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xE0, 0x00, // ###### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x18, 0x0C, 0x00, // ## ## + 0x1F, 0xFC, 0x00, // ########### + 0x07, 0xF0, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5040 'f' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0xFC, 0x00, // ####### + 0x03, 0xFC, 0x00, // ######## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5112 'g' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xDE, 0x00, // ##### #### + 0x1F, 0xFE, 0x00, // ############ + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xD8, 0x00, // ##### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5184 'h' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xE0, 0x00, // ## ##### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5256 'i' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5328 'j' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF0, 0x00, // ######### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x1F, 0xE0, 0x00, // ######## + 0x1F, 0x80, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5400 'k' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3C, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0xF8, 0x00, // ## ##### + 0x0C, 0xF8, 0x00, // ## ##### + 0x0C, 0xC0, 0x00, // ## ## + 0x0D, 0x80, 0x00, // ## ## + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x00, 0x00, // #### + 0x0F, 0x80, 0x00, // ##### + 0x0D, 0xC0, 0x00, // ## ### + 0x0C, 0xE0, 0x00, // ## ### + 0x3C, 0x7C, 0x00, // #### ##### + 0x3C, 0x7C, 0x00, // #### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5472 'l' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5544 'm' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xF7, 0x78, 0x00, // #### ### #### + 0xFF, 0xFC, 0x00, // ############## + 0x39, 0xCC, 0x00, // ### ### ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0xFD, 0xEF, 0x00, // ###### #### #### + 0xFD, 0xEF, 0x00, // ###### #### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5616 'n' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7B, 0xE0, 0x00, // #### ##### + 0x7F, 0xF0, 0x00, // ########### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5688 'o' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5760 'p' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7B, 0xE0, 0x00, // #### ##### + 0x7F, 0xF8, 0x00, // ############ + 0x1C, 0x18, 0x00, // ### ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x18, 0x00, // ### ## + 0x1F, 0xF8, 0x00, // ########## + 0x1B, 0xE0, 0x00, // ## ##### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x7F, 0x00, 0x00, // ####### + 0x7F, 0x00, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5832 'q' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xDE, 0x00, // ##### #### + 0x1F, 0xFE, 0x00, // ############ + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xD8, 0x00, // ##### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0xFE, 0x00, // ####### + 0x00, 0xFE, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5904 'r' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3E, 0x78, 0x00, // ##### #### + 0x3E, 0xFC, 0x00, // ##### ###### + 0x07, 0xCC, 0x00, // ##### ## + 0x07, 0x00, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5976 's' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xF8, 0x00, // ######## + 0x0F, 0xF8, 0x00, // ######### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1F, 0x80, 0x00, // ###### + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0xF8, 0x00, // ##### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xE0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6048 't' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x1C, 0x00, // ## ### + 0x07, 0xFC, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6120 'u' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x78, 0x00, // #### #### + 0x78, 0x78, 0x00, // #### #### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x0F, 0xFE, 0x00, // ########### + 0x07, 0xDE, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6192 'v' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7C, 0x3E, 0x00, // ##### ##### + 0x7C, 0x3E, 0x00, // ##### ##### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6264 'w' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x3C, 0x00, // #### #### + 0x78, 0x3C, 0x00, // #### #### + 0x31, 0x18, 0x00, // ## # ## + 0x33, 0x98, 0x00, // ## ### ## + 0x33, 0x98, 0x00, // ## ### ## + 0x1A, 0xB0, 0x00, // ## # # ## + 0x1E, 0xF0, 0x00, // #### #### + 0x1E, 0xF0, 0x00, // #### #### + 0x1C, 0x60, 0x00, // ### ## + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6336 'x' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3E, 0x7C, 0x00, // ##### ##### + 0x3E, 0x7C, 0x00, // ##### ##### + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x3E, 0x7C, 0x00, // ##### ##### + 0x3E, 0x7C, 0x00, // ##### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6408 'y' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x1F, 0x00, // ###### ##### + 0x7E, 0x1F, 0x00, // ###### ##### + 0x18, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0xE0, 0x00, // ##### + 0x01, 0xC0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6480 'z' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6552 '{' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xE0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x80, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xE0, 0x00, // #### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6624 '|' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6696 '}' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x00, 0x00, // ### + 0x07, 0x80, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x07, 0x80, 0x00, // #### + 0x07, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6768 '~' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0E, 0x00, 0x00, // ### + 0x1F, 0x18, 0x00, // ##### ## + 0x3B, 0xB8, 0x00, // ### ### ### + 0x31, 0xF0, 0x00, // ## ##### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // +}; + +sFONT Font24 = { + Font24_Table, + 17, /* Width */ + 24, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Utilities/Fonts/font8.c b/project/Utilities/Fonts/font8.c new file mode 100644 index 0000000..7c150a7 --- /dev/null +++ b/project/Utilities/Fonts/font8.c @@ -0,0 +1,1084 @@ +/** + ****************************************************************************** + * @file Font8.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver. + * @{ + */ + +/** @defgroup FONTS_Private_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Variables + * @{ + */ +// +// Font data for Courier New 12pt +// + +const uint8_t Font8_Table[] = +{ + // @0 ' ' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @8 '!' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @16 '"' (5 pixels wide) + 0x50, // # # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @24 '#' (5 pixels wide) + 0x28, // # # + 0x50, // # # + 0xF8, // ##### + 0x50, // # # + 0xF8, // ##### + 0x50, // # # + 0xA0, // # # + 0x00, // + + // @32 '$' (5 pixels wide) + 0x20, // # + 0x30, // ## + 0x60, // ## + 0x30, // ## + 0x10, // # + 0x60, // ## + 0x20, // # + 0x00, // + + // @40 '%' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x18, // ## + 0x60, // ## + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @48 '&' (5 pixels wide) + 0x00, // + 0x38, // ### + 0x20, // # + 0x60, // ## + 0x50, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @56 ''' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @64 '(' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @72 ')' (5 pixels wide) + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + + // @80 '*' (5 pixels wide) + 0x20, // # + 0x70, // ### + 0x20, // # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @88 '+' (5 pixels wide) + 0x00, // + 0x20, // # + 0x20, // # + 0xF8, // ##### + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + + // @96 ',' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x10, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @104 '-' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @112 '.' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @120 '/' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x40, // # + 0x80, // # + 0x00, // + + // @128 '0' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x50, // # # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @136 '1' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @144 '2' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x40, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @152 '3' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x10, // # + 0x20, // # + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @160 '4' (5 pixels wide) + 0x10, // # + 0x30, // ## + 0x50, // # # + 0x78, // #### + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + + // @168 '5' (5 pixels wide) + 0x70, // ### + 0x40, // # + 0x60, // ## + 0x10, // # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @176 '6' (5 pixels wide) + 0x30, // ## + 0x40, // # + 0x60, // ## + 0x50, // # # + 0x50, // # # + 0x60, // ## + 0x00, // + 0x00, // + + // @184 '7' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + + // @192 '8' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x20, // # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @200 '9' (5 pixels wide) + 0x30, // ## + 0x50, // # # + 0x50, // # # + 0x30, // ## + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @208 ':' (5 pixels wide) + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @216 ';' (5 pixels wide) + 0x00, // + 0x00, // + 0x10, // # + 0x00, // + 0x10, // # + 0x20, // # + 0x00, // + 0x00, // + + // @224 '<' (5 pixels wide) + 0x00, // + 0x10, // # + 0x20, // # + 0xC0, // ## + 0x20, // # + 0x10, // # + 0x00, // + 0x00, // + + // @232 '=' (5 pixels wide) + 0x00, // + 0x70, // ### + 0x00, // + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @240 '>' (5 pixels wide) + 0x00, // + 0x40, // # + 0x20, // # + 0x18, // ## + 0x20, // # + 0x40, // # + 0x00, // + 0x00, // + + // @248 '?' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x10, // # + 0x20, // # + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @256 '@' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x58, // # ## + 0x48, // # # + 0x40, // # + 0x38, // ### + 0x00, // + + // @264 'A' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x50, // # # + 0x70, // ### + 0x88, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @272 'B' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @280 'C' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x40, // # + 0x40, // # + 0x40, // # + 0x30, // ## + 0x00, // + 0x00, // + + // @288 'D' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @296 'E' (5 pixels wide) + 0xF8, // ##### + 0x48, // # # + 0x60, // ## + 0x40, // # + 0x48, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @304 'F' (5 pixels wide) + 0xF8, // ##### + 0x48, // # # + 0x60, // ## + 0x40, // # + 0x40, // # + 0xE0, // ### + 0x00, // + 0x00, // + + // @312 'G' (5 pixels wide) + 0x70, // ### + 0x40, // # + 0x40, // # + 0x58, // # ## + 0x50, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @320 'H' (5 pixels wide) + 0xE8, // ### # + 0x48, // # # + 0x78, // #### + 0x48, // # # + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @328 'I' (5 pixels wide) + 0x70, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @336 'J' (5 pixels wide) + 0x38, // ### + 0x10, // # + 0x10, // # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @344 'K' (5 pixels wide) + 0xD8, // ## ## + 0x50, // # # + 0x60, // ## + 0x70, // ### + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @352 'L' (5 pixels wide) + 0xE0, // ### + 0x40, // # + 0x40, // # + 0x40, // # + 0x48, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @360 'M' (5 pixels wide) + 0xD8, // ## ## + 0xD8, // ## ## + 0xD8, // ## ## + 0xA8, // # # # + 0x88, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @368 'N' (5 pixels wide) + 0xD8, // ## ## + 0x68, // ## # + 0x68, // ## # + 0x58, // # ## + 0x58, // # ## + 0xE8, // ### # + 0x00, // + 0x00, // + + // @376 'O' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @384 'P' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x40, // # + 0xE0, // ### + 0x00, // + 0x00, // + + // @392 'Q' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x18, // ## + 0x00, // + + // @400 'R' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @408 'S' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x20, // # + 0x10, // # + 0x50, // # # + 0x70, // ### + 0x00, // + 0x00, // + + // @416 'T' (5 pixels wide) + 0xF8, // ##### + 0xA8, // # # # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @424 'U' (5 pixels wide) + 0xD8, // ## ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @432 'V' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0x48, // # # + 0x50, // # # + 0x50, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @440 'W' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0xA8, // # # # + 0xA8, // # # # + 0xA8, // # # # + 0x50, // # # + 0x00, // + 0x00, // + + // @448 'X' (5 pixels wide) + 0xD8, // ## ## + 0x50, // # # + 0x20, // # + 0x20, // # + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @456 'Y' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @464 'Z' (5 pixels wide) + 0x78, // #### + 0x48, // # # + 0x10, // # + 0x20, // # + 0x48, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @472 '[' (5 pixels wide) + 0x30, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x30, // ## + 0x00, // + + // @480 '\' (5 pixels wide) + 0x80, // # + 0x40, // # + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @488 ']' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x60, // ## + 0x00, // + + // @496 '^' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @504 '_' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0xF8, // ##### + + // @512 '`' (5 pixels wide) + 0x20, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @520 'a' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x10, // # + 0x70, // ### + 0x78, // #### + 0x00, // + 0x00, // + + // @528 'b' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @536 'c' (5 pixels wide) + 0x00, // + 0x00, // + 0x70, // ### + 0x40, // # + 0x40, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @544 'd' (5 pixels wide) + 0x18, // ## + 0x08, // # + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @552 'e' (5 pixels wide) + 0x00, // + 0x00, // + 0x70, // ### + 0x70, // ### + 0x40, // # + 0x30, // ## + 0x00, // + 0x00, // + + // @560 'f' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x70, // ### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @568 'g' (5 pixels wide) + 0x00, // + 0x00, // + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x08, // # + 0x30, // ## + + // @576 'h' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @584 'i' (5 pixels wide) + 0x20, // # + 0x00, // + 0x60, // ## + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @592 'j' (5 pixels wide) + 0x20, // # + 0x00, // + 0x70, // ### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x70, // ### + + // @600 'k' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x70, // ### + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @608 'l' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @616 'm' (5 pixels wide) + 0x00, // + 0x00, // + 0xD0, // ## # + 0xA8, // # # # + 0xA8, // # # # + 0xA8, // # # # + 0x00, // + 0x00, // + + // @624 'n' (5 pixels wide) + 0x00, // + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0xC8, // ## # + 0x00, // + 0x00, // + + // @632 'o' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @640 'p' (5 pixels wide) + 0x00, // + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x40, // # + 0xE0, // ### + + // @648 'q' (5 pixels wide) + 0x00, // + 0x00, // + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x08, // # + 0x18, // ## + + // @656 'r' (5 pixels wide) + 0x00, // + 0x00, // + 0x78, // #### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @664 's' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x20, // # + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @672 't' (5 pixels wide) + 0x00, // + 0x40, // # + 0xF0, // #### + 0x40, // # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @680 'u' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @688 'v' (5 pixels wide) + 0x00, // + 0x00, // + 0xC8, // ## # + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + + // @696 'w' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0xA8, // # # # + 0xA8, // # # # + 0x50, // # # + 0x00, // + 0x00, // + + // @704 'x' (5 pixels wide) + 0x00, // + 0x00, // + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x48, // # # + 0x00, // + 0x00, // + + // @712 'y' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x60, // ## + + // @720 'z' (5 pixels wide) + 0x00, // + 0x00, // + 0x78, // #### + 0x50, // # # + 0x28, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @728 '{' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x60, // ## + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @736 '|' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @744 '}' (5 pixels wide) + 0x40, // # + 0x20, // # + 0x20, // # + 0x30, // ## + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + + // @752 '~' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x28, // # # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // +}; + +sFONT Font8 = { + Font8_Table, + 5, /* Width */ + 8, /* Height */ +}; + +/** + * @} + */ + + +/** @defgroup FONTS_Private_Function_Prototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup FONTS_Private_Functions + * @{ + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/Utilities/Fonts/fonts.h b/project/Utilities/Fonts/fonts.h new file mode 100644 index 0000000..3276d28 --- /dev/null +++ b/project/Utilities/Fonts/fonts.h @@ -0,0 +1,134 @@ +/** + ****************************************************************************** + * @file fonts.h + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief Header for fonts.c file + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2014 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 __FONTS_H +#define __FONTS_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include + +/** @addtogroup Utilities + * @{ + */ + +/** @addtogroup STM32_EVAL + * @{ + */ + +/** @addtogroup Common + * @{ + */ + +/** @addtogroup FONTS + * @{ + */ + +/** @defgroup FONTS_Exported_Types + * @{ + */ +typedef struct _tFont +{ + const uint8_t *table; + uint16_t Width; + uint16_t Height; + +} sFONT; + +extern sFONT Font24; +extern sFONT Font20; +extern sFONT Font16; +extern sFONT Font12; +extern sFONT Font8; +/** + * @} + */ + +/** @defgroup FONTS_Exported_Constants + * @{ + */ +#define LINE(x) ((x) * (((sFONT *)BSP_LCD_GetFont())->Height)) + +/** + * @} + */ + +/** @defgroup FONTS_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup FONTS_Exported_Functions + * @{ + */ +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __FONTS_H */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/project/project.ioc b/project/project.ioc index 074907e..ccb9d73 100644 --- a/project/project.ioc +++ b/project/project.ioc @@ -57,106 +57,113 @@ Mcu.CPN=STM32F746NGH6 Mcu.Family=STM32F7 Mcu.IP0=CORTEX_M7 Mcu.IP1=DMA2D +Mcu.IP10=USART1 Mcu.IP2=ETH Mcu.IP3=FMC Mcu.IP4=LTDC Mcu.IP5=LWIP Mcu.IP6=NVIC -Mcu.IP7=RCC -Mcu.IP8=SYS -Mcu.IP9=USART1 -Mcu.IPNb=10 +Mcu.IP7=QUADSPI +Mcu.IP8=RCC +Mcu.IP9=SYS +Mcu.IPNb=11 Mcu.Name=STM32F746NGHx Mcu.Package=TFBGA216 Mcu.Pin0=PE4 -Mcu.Pin1=PG14 -Mcu.Pin10=PK7 -Mcu.Pin11=PK6 -Mcu.Pin12=PK5 -Mcu.Pin13=PG12 -Mcu.Pin14=PJ14 -Mcu.Pin15=PD1 -Mcu.Pin16=PF0 -Mcu.Pin17=PI10 -Mcu.Pin18=PK4 -Mcu.Pin19=PK3 -Mcu.Pin2=PE1 -Mcu.Pin20=PJ15 -Mcu.Pin21=PI1 -Mcu.Pin22=PC14/OSC32_IN -Mcu.Pin23=PF1 -Mcu.Pin24=PI12 -Mcu.Pin25=PI9 -Mcu.Pin26=PA9 -Mcu.Pin27=PC15/OSC32_OUT -Mcu.Pin28=PI11 -Mcu.Pin29=PK1 -Mcu.Pin3=PE0 -Mcu.Pin30=PK2 -Mcu.Pin31=PH0/OSC_IN -Mcu.Pin32=PF2 -Mcu.Pin33=PI15 -Mcu.Pin34=PJ11 -Mcu.Pin35=PK0 -Mcu.Pin36=PH1/OSC_OUT -Mcu.Pin37=PF3 -Mcu.Pin38=PI14 -Mcu.Pin39=PJ8 -Mcu.Pin4=PG13 -Mcu.Pin40=PJ10 -Mcu.Pin41=PG8 -Mcu.Pin42=PF4 -Mcu.Pin43=PH5 -Mcu.Pin44=PH3 -Mcu.Pin45=PJ7 -Mcu.Pin46=PJ9 -Mcu.Pin47=PF5 -Mcu.Pin48=PH2 -Mcu.Pin49=PJ6 -Mcu.Pin5=PB7 -Mcu.Pin50=PD15 -Mcu.Pin51=PD10 -Mcu.Pin52=PD14 -Mcu.Pin53=PD9 -Mcu.Pin54=PD8 -Mcu.Pin55=PC1 -Mcu.Pin56=PF12 -Mcu.Pin57=PG1 -Mcu.Pin58=PF15 -Mcu.Pin59=PJ4 -Mcu.Pin6=PG15 -Mcu.Pin60=PJ5 -Mcu.Pin61=PA1 -Mcu.Pin62=PC4 -Mcu.Pin63=PF13 -Mcu.Pin64=PG0 -Mcu.Pin65=PJ3 -Mcu.Pin66=PE8 -Mcu.Pin67=PG5 -Mcu.Pin68=PG4 -Mcu.Pin69=PA2 -Mcu.Pin7=PG11 -Mcu.Pin70=PC5 -Mcu.Pin71=PF14 -Mcu.Pin72=PJ2 -Mcu.Pin73=PF11 -Mcu.Pin74=PE9 -Mcu.Pin75=PE11 -Mcu.Pin76=PE14 -Mcu.Pin77=PA7 -Mcu.Pin78=PJ0 -Mcu.Pin79=PJ1 -Mcu.Pin8=PJ13 -Mcu.Pin80=PE7 -Mcu.Pin81=PE10 -Mcu.Pin82=PE12 -Mcu.Pin83=PE15 -Mcu.Pin84=PE13 -Mcu.Pin85=VP_DMA2D_VS_DMA2D -Mcu.Pin86=VP_LWIP_VS_Enabled -Mcu.Pin87=VP_SYS_VS_Systick -Mcu.Pin9=PD0 -Mcu.PinsNb=88 +Mcu.Pin1=PE2 +Mcu.Pin10=PJ13 +Mcu.Pin11=PD0 +Mcu.Pin12=PK7 +Mcu.Pin13=PK6 +Mcu.Pin14=PK5 +Mcu.Pin15=PG12 +Mcu.Pin16=PJ14 +Mcu.Pin17=PD1 +Mcu.Pin18=PF0 +Mcu.Pin19=PI10 +Mcu.Pin2=PG14 +Mcu.Pin20=PK4 +Mcu.Pin21=PK3 +Mcu.Pin22=PJ15 +Mcu.Pin23=PI1 +Mcu.Pin24=PC14/OSC32_IN +Mcu.Pin25=PF1 +Mcu.Pin26=PI12 +Mcu.Pin27=PI9 +Mcu.Pin28=PA9 +Mcu.Pin29=PC15/OSC32_OUT +Mcu.Pin3=PE1 +Mcu.Pin30=PI11 +Mcu.Pin31=PK1 +Mcu.Pin32=PK2 +Mcu.Pin33=PH0/OSC_IN +Mcu.Pin34=PF2 +Mcu.Pin35=PI15 +Mcu.Pin36=PJ11 +Mcu.Pin37=PK0 +Mcu.Pin38=PH1/OSC_OUT +Mcu.Pin39=PF3 +Mcu.Pin4=PE0 +Mcu.Pin40=PI14 +Mcu.Pin41=PJ8 +Mcu.Pin42=PJ10 +Mcu.Pin43=PG8 +Mcu.Pin44=PF4 +Mcu.Pin45=PH5 +Mcu.Pin46=PH3 +Mcu.Pin47=PJ7 +Mcu.Pin48=PJ9 +Mcu.Pin49=PF5 +Mcu.Pin5=PG13 +Mcu.Pin50=PH2 +Mcu.Pin51=PJ6 +Mcu.Pin52=PD15 +Mcu.Pin53=PD10 +Mcu.Pin54=PD14 +Mcu.Pin55=PD9 +Mcu.Pin56=PD8 +Mcu.Pin57=PC1 +Mcu.Pin58=PB2 +Mcu.Pin59=PF12 +Mcu.Pin6=PB7 +Mcu.Pin60=PG1 +Mcu.Pin61=PF15 +Mcu.Pin62=PJ4 +Mcu.Pin63=PD12 +Mcu.Pin64=PD13 +Mcu.Pin65=PJ5 +Mcu.Pin66=PA1 +Mcu.Pin67=PC4 +Mcu.Pin68=PF13 +Mcu.Pin69=PG0 +Mcu.Pin7=PB6 +Mcu.Pin70=PJ3 +Mcu.Pin71=PE8 +Mcu.Pin72=PD11 +Mcu.Pin73=PG5 +Mcu.Pin74=PG4 +Mcu.Pin75=PA2 +Mcu.Pin76=PC5 +Mcu.Pin77=PF14 +Mcu.Pin78=PJ2 +Mcu.Pin79=PF11 +Mcu.Pin8=PG15 +Mcu.Pin80=PE9 +Mcu.Pin81=PE11 +Mcu.Pin82=PE14 +Mcu.Pin83=PA7 +Mcu.Pin84=PJ0 +Mcu.Pin85=PJ1 +Mcu.Pin86=PE7 +Mcu.Pin87=PE10 +Mcu.Pin88=PE12 +Mcu.Pin89=PE15 +Mcu.Pin9=PG11 +Mcu.Pin90=PE13 +Mcu.Pin91=VP_DMA2D_VS_DMA2D +Mcu.Pin92=VP_LWIP_VS_Enabled +Mcu.Pin93=VP_SYS_VS_Systick +Mcu.PinsNb=94 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F746NGHx @@ -182,6 +189,10 @@ PA7.Signal=ETH_CRS_DV PA9.Locked=true PA9.Mode=Asynchronous PA9.Signal=USART1_TX +PB2.Mode=Single Bank 1 +PB2.Signal=QUADSPI_CLK +PB6.Mode=Single Bank 1 +PB6.Signal=QUADSPI_BK1_NCS PB7.Mode=Asynchronous PB7.Signal=USART1_RX PC1.Mode=RMII @@ -197,6 +208,15 @@ PC5.Signal=ETH_RXD1 PD0.Signal=FMC_D2_DA2 PD1.Signal=FMC_D3_DA3 PD10.Signal=FMC_D15_DA15 +PD11.Locked=true +PD11.Mode=Single Bank 1 +PD11.Signal=QUADSPI_BK1_IO0 +PD12.Locked=true +PD12.Mode=Single Bank 1 +PD12.Signal=QUADSPI_BK1_IO1 +PD13.Locked=true +PD13.Mode=Single Bank 1 +PD13.Signal=QUADSPI_BK1_IO3 PD14.Signal=FMC_D0_DA0 PD15.Signal=FMC_D1_DA1 PD8.Signal=FMC_D13_DA13 @@ -209,6 +229,8 @@ PE12.Signal=FMC_D9_DA9 PE13.Signal=FMC_D10_DA10 PE14.Signal=FMC_D11_DA11 PE15.Signal=FMC_D12_DA12 +PE2.Mode=Single Bank 1 +PE2.Signal=QUADSPI_BK1_IO2 PE4.Mode=RGB888 PE4.Signal=LTDC_B0 PE7.Signal=FMC_D4_DA4 @@ -369,6 +391,12 @@ ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-true,3-MX_LTDC_Init-LTDC-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_DMA2D_Init-DMA2D-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_LWIP_Init-LWIP-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +QUADSPI.ChipSelectHighTime=QSPI_CS_HIGH_TIME_6_CYCLE +QUADSPI.ClockPrescaler=1 +QUADSPI.FifoThreshold=4 +QUADSPI.FlashSize=16 +QUADSPI.IPParameters=ClockPrescaler,FifoThreshold,SampleShifting,FlashSize,ChipSelectHighTime +QUADSPI.SampleShifting=QSPI_SAMPLE_SHIFTING_HALFCYCLE RCC.AHBFreq_Value=200000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 RCC.APB1Freq_Value=50000000 @@ -514,4 +542,3 @@ VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=STM32F746G-DISCO boardIOC=true -isbadioc=false