├── .github
├── FUNDING.yml
└── workflows
│ └── build-test.yml
├── .gitignore
├── FdsKey
├── .cproject
├── .project
├── Core
│ ├── Inc
│ │ ├── blupdater.h
│ │ ├── browser.h
│ │ ├── buttons.h
│ │ ├── confirm.h
│ │ ├── fatfs
│ │ │ ├── diskio.h
│ │ │ ├── ff.h
│ │ │ └── ffconf.h
│ │ ├── fdsemu.h
│ │ ├── fdsemugui.h
│ │ ├── fileproperties.h
│ │ ├── fonts.h
│ │ ├── fonts
│ │ │ ├── digits_font.h
│ │ │ ├── fontdata.h
│ │ │ ├── fontexterns.h
│ │ │ ├── gamegirl_classic_12_font.h
│ │ │ ├── gamegirl_classic_6_font.h
│ │ │ ├── slimfont_8_font.h
│ │ │ ├── standard_6_font.h
│ │ │ ├── ultraslimfont_8_font.h
│ │ │ ├── verdana_12_bold_font.h
│ │ │ └── verdana_14_bold_font.h
│ │ ├── images.h
│ │ ├── images
│ │ │ ├── card_1a.h
│ │ │ ├── card_1b.h
│ │ │ ├── card_2a.h
│ │ │ ├── card_2b.h
│ │ │ ├── card_3a.h
│ │ │ ├── card_3b.h
│ │ │ ├── card_4a.h
│ │ │ ├── card_4b.h
│ │ │ ├── card_a.h
│ │ │ ├── card_b.h
│ │ │ ├── card_single.h
│ │ │ ├── card_unknown.h
│ │ │ ├── cursor.h
│ │ │ ├── cursor_down.h
│ │ │ ├── cursor_down_w.h
│ │ │ ├── cursor_up.h
│ │ │ ├── cursor_up_w.h
│ │ │ ├── disk_flip_frame_0.h
│ │ │ ├── disk_flip_frame_1.h
│ │ │ ├── disk_flip_frame_2.h
│ │ │ ├── disk_flip_frame_3.h
│ │ │ ├── disk_flip_frame_4.h
│ │ │ ├── disk_flip_frame_5.h
│ │ │ ├── disk_flip_frame_6.h
│ │ │ ├── disk_flip_frame_7.h
│ │ │ ├── disk_flip_frame_8.h
│ │ │ ├── disk_flip_frame_9.h
│ │ │ ├── folder6.h
│ │ │ ├── head_cursor.h
│ │ │ ├── imagedata.h
│ │ │ ├── imageexterns.h
│ │ │ ├── large_cursor.h
│ │ │ ├── medium_cursor.h
│ │ │ ├── microsd_hor.h
│ │ │ ├── state_ff.h
│ │ │ ├── state_pause.h
│ │ │ ├── state_play.h
│ │ │ ├── state_rec.h
│ │ │ └── state_rewind.h
│ │ ├── main.h
│ │ ├── mainmenu.h
│ │ ├── md5.h
│ │ ├── newdisk.h
│ │ ├── oled.h
│ │ ├── sdcard.h
│ │ ├── servicemenu.h
│ │ ├── settings.h
│ │ ├── sideselect.h
│ │ ├── splash.h
│ │ ├── stm32g0xx_hal_conf.h
│ │ └── stm32g0xx_it.h
│ ├── Src
│ │ ├── blupdater.c
│ │ ├── browser.c
│ │ ├── buttons.c
│ │ ├── confirm.c
│ │ ├── fatfs
│ │ │ ├── diskio.c
│ │ │ ├── ff.c
│ │ │ ├── ffsystem.c
│ │ │ └── ffunicode.c
│ │ ├── fdsemu.c
│ │ ├── fdsemugui.c
│ │ ├── fileproperties.c
│ │ ├── fonts.c
│ │ ├── images.c
│ │ ├── main.c
│ │ ├── mainmenu.c
│ │ ├── md5.c
│ │ ├── newdisk.c
│ │ ├── oled.c
│ │ ├── sdcard.c
│ │ ├── servicemenu.c
│ │ ├── settings.c
│ │ ├── sideselect.c
│ │ ├── splash.c
│ │ ├── stm32g0xx_hal_msp.c
│ │ ├── stm32g0xx_it.c
│ │ ├── syscalls.c
│ │ ├── sysmem.c
│ │ └── system_stm32g0xx.c
│ └── Startup
│ │ └── startup_stm32g0b0cetx.s
├── Drivers
│ ├── CMSIS
│ │ ├── Device
│ │ │ └── ST
│ │ │ │ └── STM32G0xx
│ │ │ │ ├── Include
│ │ │ │ ├── stm32g0b0xx.h
│ │ │ │ ├── stm32g0xx.h
│ │ │ │ └── system_stm32g0xx.h
│ │ │ │ └── LICENSE.txt
│ │ ├── Include
│ │ │ ├── cmsis_armcc.h
│ │ │ ├── cmsis_armclang.h
│ │ │ ├── cmsis_armclang_ltm.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_iccarm.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_armv81mml.h
│ │ │ ├── core_armv8mbl.h
│ │ │ ├── core_armv8mml.h
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm1.h
│ │ │ ├── core_cm23.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm33.h
│ │ │ ├── core_cm35p.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_sc000.h
│ │ │ ├── core_sc300.h
│ │ │ ├── mpu_armv7.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ └── LICENSE.txt
│ └── STM32G0xx_HAL_Driver
│ │ ├── Inc
│ │ ├── Legacy
│ │ │ └── stm32_hal_legacy.h
│ │ ├── stm32g0xx_hal.h
│ │ ├── stm32g0xx_hal_cortex.h
│ │ ├── stm32g0xx_hal_def.h
│ │ ├── stm32g0xx_hal_dma.h
│ │ ├── stm32g0xx_hal_dma_ex.h
│ │ ├── stm32g0xx_hal_exti.h
│ │ ├── stm32g0xx_hal_flash.h
│ │ ├── stm32g0xx_hal_flash_ex.h
│ │ ├── stm32g0xx_hal_gpio.h
│ │ ├── stm32g0xx_hal_gpio_ex.h
│ │ ├── stm32g0xx_hal_i2c.h
│ │ ├── stm32g0xx_hal_i2c_ex.h
│ │ ├── stm32g0xx_hal_pwr.h
│ │ ├── stm32g0xx_hal_pwr_ex.h
│ │ ├── stm32g0xx_hal_rcc.h
│ │ ├── stm32g0xx_hal_rcc_ex.h
│ │ ├── stm32g0xx_hal_spi.h
│ │ ├── stm32g0xx_hal_spi_ex.h
│ │ ├── stm32g0xx_hal_tim.h
│ │ ├── stm32g0xx_hal_tim_ex.h
│ │ ├── stm32g0xx_ll_bus.h
│ │ ├── stm32g0xx_ll_cortex.h
│ │ ├── stm32g0xx_ll_crs.h
│ │ ├── stm32g0xx_ll_dma.h
│ │ ├── stm32g0xx_ll_dmamux.h
│ │ ├── stm32g0xx_ll_exti.h
│ │ ├── stm32g0xx_ll_gpio.h
│ │ ├── stm32g0xx_ll_i2c.h
│ │ ├── stm32g0xx_ll_pwr.h
│ │ ├── stm32g0xx_ll_rcc.h
│ │ ├── stm32g0xx_ll_system.h
│ │ ├── stm32g0xx_ll_tim.h
│ │ └── stm32g0xx_ll_utils.h
│ │ ├── LICENSE.txt
│ │ └── Src
│ │ ├── stm32g0xx_hal.c
│ │ ├── stm32g0xx_hal_cortex.c
│ │ ├── stm32g0xx_hal_dma.c
│ │ ├── stm32g0xx_hal_dma_ex.c
│ │ ├── stm32g0xx_hal_exti.c
│ │ ├── stm32g0xx_hal_flash.c
│ │ ├── stm32g0xx_hal_flash_ex.c
│ │ ├── stm32g0xx_hal_gpio.c
│ │ ├── stm32g0xx_hal_i2c.c
│ │ ├── stm32g0xx_hal_i2c_ex.c
│ │ ├── stm32g0xx_hal_pwr.c
│ │ ├── stm32g0xx_hal_pwr_ex.c
│ │ ├── stm32g0xx_hal_rcc.c
│ │ ├── stm32g0xx_hal_rcc_ex.c
│ │ ├── stm32g0xx_hal_spi.c
│ │ ├── stm32g0xx_hal_spi_ex.c
│ │ ├── stm32g0xx_hal_tim.c
│ │ ├── stm32g0xx_hal_tim_ex.c
│ │ ├── stm32g0xx_ll_dma.c
│ │ └── stm32g0xx_ll_rcc.c
├── FdsKey.ioc
├── STM32G0B0CETX_FLASH.ld
├── STM32G0B0CETX_FLASH_debug.ld
└── interim
│ ├── Makefile
│ └── nano.specs
├── FdsKey_bom.png
├── FdsKey_bootloader
├── .cproject
├── .project
├── Core
│ ├── Inc
│ │ ├── buttons.h
│ │ ├── confirm.h
│ │ ├── fatfs
│ │ │ ├── diskio.h
│ │ │ ├── ff.h
│ │ │ └── ffconf.h
│ │ ├── fonts.h
│ │ ├── fonts
│ │ │ ├── fontdata.h
│ │ │ ├── fontexterns.h
│ │ │ ├── gamegirl_classic_6_font.h
│ │ │ ├── standard_6_font.h
│ │ │ └── verdana_12_bold_font.h
│ │ ├── images.h
│ │ ├── images
│ │ │ ├── cogs.h
│ │ │ ├── imagedata.h
│ │ │ ├── imageexterns.h
│ │ │ └── medium_cursor.h
│ │ ├── main.h
│ │ ├── oled.h
│ │ ├── sdcard.h
│ │ ├── servicemenu.h
│ │ ├── settings.h
│ │ ├── splash.h
│ │ ├── stm32g0xx_hal_conf.h
│ │ └── stm32g0xx_it.h
│ ├── Src
│ │ ├── buttons.c
│ │ ├── confirm.c
│ │ ├── fatfs
│ │ │ ├── diskio.c
│ │ │ ├── ff.c
│ │ │ ├── ffsystem.c
│ │ │ └── ffunicode.c
│ │ ├── fonts.c
│ │ ├── images.c
│ │ ├── main.c
│ │ ├── oled.c
│ │ ├── sdcard.c
│ │ ├── servicemenu.c
│ │ ├── settings.c
│ │ ├── splash.c
│ │ ├── stm32g0xx_hal_msp.c
│ │ ├── stm32g0xx_it.c
│ │ ├── syscalls.c
│ │ ├── sysmem.c
│ │ └── system_stm32g0xx.c
│ └── Startup
│ │ └── startup_stm32g0b0cetx.s
├── Drivers
│ ├── CMSIS
│ │ ├── Device
│ │ │ └── ST
│ │ │ │ └── STM32G0xx
│ │ │ │ ├── Include
│ │ │ │ ├── stm32g0b0xx.h
│ │ │ │ ├── stm32g0xx.h
│ │ │ │ └── system_stm32g0xx.h
│ │ │ │ └── LICENSE.txt
│ │ ├── Include
│ │ │ ├── cmsis_armcc.h
│ │ │ ├── cmsis_armclang.h
│ │ │ ├── cmsis_armclang_ltm.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_iccarm.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_armv81mml.h
│ │ │ ├── core_armv8mbl.h
│ │ │ ├── core_armv8mml.h
│ │ │ ├── core_cm0.h
│ │ │ ├── core_cm0plus.h
│ │ │ ├── core_cm1.h
│ │ │ ├── core_cm23.h
│ │ │ ├── core_cm3.h
│ │ │ ├── core_cm33.h
│ │ │ ├── core_cm35p.h
│ │ │ ├── core_cm4.h
│ │ │ ├── core_cm7.h
│ │ │ ├── core_sc000.h
│ │ │ ├── core_sc300.h
│ │ │ ├── mpu_armv7.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ └── LICENSE.txt
│ └── STM32G0xx_HAL_Driver
│ │ ├── Inc
│ │ ├── Legacy
│ │ │ └── stm32_hal_legacy.h
│ │ ├── stm32g0xx_hal.h
│ │ ├── stm32g0xx_hal_cortex.h
│ │ ├── stm32g0xx_hal_def.h
│ │ ├── stm32g0xx_hal_dma.h
│ │ ├── stm32g0xx_hal_dma_ex.h
│ │ ├── stm32g0xx_hal_exti.h
│ │ ├── stm32g0xx_hal_flash.h
│ │ ├── stm32g0xx_hal_flash_ex.h
│ │ ├── stm32g0xx_hal_gpio.h
│ │ ├── stm32g0xx_hal_gpio_ex.h
│ │ ├── stm32g0xx_hal_i2c.h
│ │ ├── stm32g0xx_hal_i2c_ex.h
│ │ ├── stm32g0xx_hal_pwr.h
│ │ ├── stm32g0xx_hal_pwr_ex.h
│ │ ├── stm32g0xx_hal_rcc.h
│ │ ├── stm32g0xx_hal_rcc_ex.h
│ │ ├── stm32g0xx_hal_spi.h
│ │ ├── stm32g0xx_hal_spi_ex.h
│ │ ├── stm32g0xx_hal_tim.h
│ │ ├── stm32g0xx_hal_tim_ex.h
│ │ ├── stm32g0xx_ll_bus.h
│ │ ├── stm32g0xx_ll_cortex.h
│ │ ├── stm32g0xx_ll_crs.h
│ │ ├── stm32g0xx_ll_dma.h
│ │ ├── stm32g0xx_ll_dmamux.h
│ │ ├── stm32g0xx_ll_exti.h
│ │ ├── stm32g0xx_ll_gpio.h
│ │ ├── stm32g0xx_ll_i2c.h
│ │ ├── stm32g0xx_ll_pwr.h
│ │ ├── stm32g0xx_ll_rcc.h
│ │ ├── stm32g0xx_ll_system.h
│ │ ├── stm32g0xx_ll_tim.h
│ │ └── stm32g0xx_ll_utils.h
│ │ ├── LICENSE.txt
│ │ └── Src
│ │ ├── stm32g0xx_hal.c
│ │ ├── stm32g0xx_hal_cortex.c
│ │ ├── stm32g0xx_hal_dma.c
│ │ ├── stm32g0xx_hal_dma_ex.c
│ │ ├── stm32g0xx_hal_exti.c
│ │ ├── stm32g0xx_hal_flash.c
│ │ ├── stm32g0xx_hal_flash_ex.c
│ │ ├── stm32g0xx_hal_gpio.c
│ │ ├── stm32g0xx_hal_i2c.c
│ │ ├── stm32g0xx_hal_i2c_ex.c
│ │ ├── stm32g0xx_hal_pwr.c
│ │ ├── stm32g0xx_hal_pwr_ex.c
│ │ ├── stm32g0xx_hal_rcc.c
│ │ ├── stm32g0xx_hal_rcc_ex.c
│ │ ├── stm32g0xx_hal_spi.c
│ │ ├── stm32g0xx_hal_spi_ex.c
│ │ ├── stm32g0xx_hal_tim.c
│ │ ├── stm32g0xx_hal_tim_ex.c
│ │ ├── stm32g0xx_ll_dma.c
│ │ └── stm32g0xx_ll_rcc.c
├── FdsKey_bootloader.ioc
├── STM32G0B0CETX_FLASH.ld
└── interim
│ ├── Makefile
│ └── nano.specs
├── FdsKey_circuit_diagram.dch
├── FdsKey_circuit_diagram.png
├── FdsKey_pcb.dip
├── LICENSE
├── PCB_gerbers
├── 1 - Top.gbr
├── 2 - Bottom.gbr
├── BoardOutline.gbr
├── BottomMask.gbr
├── BottomPaste.gbr
├── BottomSilk.gbr
├── Through.drl
├── TopMask.gbr
├── TopPaste.gbr
└── TopSilk.gbr
├── README.md
├── case_3d_models
├── fdm
│ ├── bottom.stl
│ ├── buttons.stl
│ └── top.stl
└── mjf
│ ├── bottom.stl
│ ├── buttons.stl
│ └── top.stl
├── fonts
├── 1_Minecraft-Regular.otf
├── Arial_Rounded_MT_Bold_20.RHF
├── Berlin_Sans_FB_12.RHF
├── Berlin_Sans_FB_16.RHF
├── Berlin_Sans_FB_20.RHF
├── Berlin_Sans_FB_24.RHF
├── Berlin_Sans_FB_28.RHF
├── Berlin_Sans_FB_8.RHF
├── Digits1.RHF
├── Digits2.RHF
├── Diskun-epmp.ttf
├── Diskun22.RHF
├── Diskun22_bold.RHF
├── Diskun28.RHF
├── Diskun28_bold.RHF
├── Gamegirl_Classic_12.RHF
├── Gamegirl_Classic_6.RHF
├── Haettenschweiler_18.RHF
├── Haettenschweiler_23.RHF
├── Haettenschweiler_28.RHF
├── Impact_12.RHF
├── Impact_12_bold.RHF
├── Impact_14.RHF
├── Impact_14bold.RHF
├── Impact_16.RHF
├── Impact_18.RHF
├── Impact_20.RHF
├── Impact_22.RHF
├── Impact_24.RHF
├── Impact_27.RHF
├── Impact_30.RHF
├── Verdana_12.RHF
├── Verdana_12_bold.RHF
├── Verdana_13_bold.RHF
├── Verdana_14.RHF
├── Verdana_14_bold.RHF
├── Verdana_16.RHF
├── Verdana_16_bold.RHF
├── Verdana_18.RHF
├── Verdana_18_bold.RHF
├── Verdana_20.RHF
├── Verdana_20_bold.RHF
├── Verdana_22.RHF
├── Verdana_22_bold.RHF
├── Verdana_24.RHF
├── Verdana_24_bold.RHF
├── Verdana_26.RHF
├── Verdana_26_bold.RHF
├── Verdana_28.RHF
├── Verdana_28_bold.RHF
├── slim8.RHF
├── stan0753.ttf
├── standard_12.RHF
├── standard_6.RHF
└── ultraslim8.RHF
├── images
├── card_1a.png
├── card_1b.png
├── card_2a.png
├── card_2b.png
├── card_3a.png
├── card_3b.png
├── card_4a.png
├── card_4b.png
├── card_a.png
├── card_b.png
├── card_single.png
├── card_unknown.png
├── cursor.png
├── cursor_down.png
├── cursor_down_w.png
├── cursor_up.png
├── cursor_up_w.png
├── disk_flip_frame_0.png
├── disk_flip_frame_1.png
├── disk_flip_frame_2.png
├── disk_flip_frame_3.png
├── disk_flip_frame_4.png
├── disk_flip_frame_5.png
├── disk_flip_frame_6.png
├── disk_flip_frame_7.png
├── disk_flip_frame_8.png
├── disk_flip_frame_9.png
├── emu_screen.psd
├── folder6.png
├── head_cursor.png
├── large_cursor.png
├── medium_cursor.png
├── microsd_hor.png
├── state_ff.png
├── state_pause.png
├── state_play.png
├── state_rec.png
└── state_rewind.png
├── images_bootloader
├── cogs.png
└── medium_cursor.png
└── tools
├── FontsParser.deps.json
├── FontsParser.dll
├── FontsParser.exe
├── FontsParser.pdb
├── FontsParser.runtimeconfig.json
├── ImageParser.deps.json
├── ImageParser.dll
├── ImageParser.exe
├── ImageParser.pdb
├── ImageParser.runtimeconfig.json
├── Images2Code.deps.json
├── Images2Code.dll
├── Images2Code.exe
├── Images2Code.pdb
├── Images2Code.runtimeconfig.json
├── SkiaSharp.dll
├── images.bat
└── runtimes
├── linux-arm
└── native
│ └── libSkiaSharp.so
├── linux-arm64
└── native
│ └── libSkiaSharp.so
├── linux-musl-x64
└── native
│ └── libSkiaSharp.so
├── linux-x64
└── native
│ └── libSkiaSharp.so
├── osx
└── native
│ └── libSkiaSharp.dylib
├── win-arm64
└── native
│ └── libSkiaSharp.dll
├── win-x64
└── native
│ └── libSkiaSharp.dll
└── win-x86
└── native
└── libSkiaSharp.dll
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [ClusterM]
2 | custom: ["https://www.buymeacoffee.com/cluster", "https://boosty.to/cluster"]
3 |
--------------------------------------------------------------------------------
/.github/workflows/build-test.yml:
--------------------------------------------------------------------------------
1 | name: Build, test, upload
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | pull_request:
7 | branches: [ master ]
8 | workflow_dispatch:
9 |
10 | permissions:
11 | contents: read
12 | pages: write
13 | id-token: write
14 |
15 | jobs:
16 | build:
17 | runs-on: [ubuntu-latest]
18 | env:
19 | APP_NAME: fdskey
20 | OUT_DIR: fdskey
21 | steps:
22 |
23 | - name: Checkout
24 | uses: actions/checkout@v3
25 |
26 | - name: Install compiler
27 | run: sudo apt-get install gcc-arm-none-eabi
28 |
29 | - name: Build bootloader
30 | run: |
31 | mkdir -p ${{ env.OUT_DIR }}
32 | make -C FdsKey_bootloader/interim/ OBJCOPY_BIN=../../${{ env.OUT_DIR }}/bootloader.bin EXECUTABLES=../../${{ env.OUT_DIR }}/bootloader.elf
33 |
34 | - name: Build firmware
35 | run: |
36 | mkdir -p ${{ env.OUT_DIR }}
37 | make -C FdsKey/interim/ OBJCOPY_BIN=../../${{ env.OUT_DIR }}/${{ env.APP_NAME }}.bin EXECUTABLES=../../${{ env.OUT_DIR }}/${{ env.APP_NAME }}.elf
38 |
39 | - name: Archive
40 | working-directory: ${{ env.OUT_DIR }}
41 | run: |
42 | tar -czvf ../${{ env.APP_NAME }}.tar.gz *
43 |
44 | - name: Upload artifact
45 | uses: actions/upload-artifact@v4
46 | with:
47 | name: ${{ env.APP_NAME }}
48 | path: ${{ env.OUT_DIR }}
49 |
50 | upload-to-pages:
51 | needs: build
52 | runs-on: ubuntu-latest
53 | steps:
54 |
55 | - name: Download artifacts
56 | uses: actions/download-artifact@v4.1.7
57 |
58 | - name: Move files to the root
59 | run: find -mindepth 2 -exec mv {} . \;
60 |
61 | - name: Calculate and save MD5 for each file
62 | run: |
63 | for file in *; do
64 | if [ -f "$file" ]; then
65 | md5sum "$file" | awk '{print $1}' > "${file}.md5"
66 | fi
67 | done
68 |
69 | - name: Generate index.html
70 | run: |
71 | echo "
FDSKey" > index.html
72 | echo "Updated: `date`
" >> index.html
73 | echo "Main firmware (.bin): fdskey.bin
(MD5: `cat fdskey.bin.md5`)Put the fdskey.bin file on a microSD card and hold all four buttons during power-on to update the firmware. Or use a programmer and write it to the 0x08020000 address.
" >> index.html
74 | echo "Main firmware (.elf): fdskey.elf
(MD5: `cat fdskey.elf.md5`)Use this file to write firmware using programmer.
" >> index.html
75 | echo "Bootloader (.bin): bootloader.bin
(MD5: `cat bootloader.bin.md5`)You can use it to update the bootloader via the service menu. Or use a programmer and write it to the 0x08000000 address.
" >> index.html
76 | echo "Bootloader (.elf): bootloader.elf
(MD5: `cat bootloader.elf.md5`)Use this file to write the bootloader using programmer.
" >> index.html
77 | echo "" >> index.html
78 |
79 | - name: Upload artifact
80 | uses: actions/upload-pages-artifact@v3
81 | with:
82 | path: '.'
83 |
84 | - name: Deploy to GitHub Pages
85 | id: deployment
86 | uses: actions/deploy-pages@v4
87 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .mxproject
2 | *.bak
3 | .settings/
4 | Debug/
5 | Release/
6 | .metadata/
7 | incremental_db/
8 | db/
9 | output_files/
10 | *.qws
11 | *.launch
12 | ~*~
13 | commit.h
14 |
--------------------------------------------------------------------------------
/FdsKey/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | FdsKey
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.cdt.managedbuilder.core.genmakebuilder
10 | clean,full,incremental,
11 |
12 |
13 |
14 |
15 | org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
16 | full,incremental,
17 |
18 |
19 |
20 |
21 |
22 | com.st.stm32cube.ide.mcu.MCUProjectNature
23 | com.st.stm32cube.ide.mcu.MCUCubeProjectNature
24 | org.eclipse.cdt.core.cnature
25 | com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature
26 | com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature
27 | com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature
28 | com.st.stm32cube.ide.mcu.MCURootProjectNature
29 | org.eclipse.cdt.managedbuilder.core.managedBuildNature
30 | org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
31 |
32 |
33 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/blupdater.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_BLUPDATER_H_
2 | #define INC_BLUPDATER_H_
3 |
4 | #define BOOTLOADER_FILE "bootloader.bin"
5 | #define BOOTLOADER_MD5_FILE "bootloader.bin.md5"
6 | #define BOOTLOADER_ADDRESS FLASH_BASE
7 | #define BOOTLOADER_MAX_SIZE (128 * 1024)
8 |
9 | void update_bootloader();
10 |
11 | #endif /* INC_BLUPDATER_H_ */
12 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/browser.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_BROWSER_H_
2 | #define INC_BROWSER_H_
3 |
4 | #include "ff.h"
5 |
6 | #define BROWSER_FONT FONT_SLIMFONT_8
7 | #define BROWSER_HORIZONTAL_SCROLL_SPEED 6
8 | #define BROWSER_HORIZONTAL_SCROLL_PAUSE 24
9 | #define BROWSER_FOLDER_IMAGE IMAGE_FOLDER6
10 | #define BROWSER_LONGPRESS_TIME 500
11 |
12 | #define BROWSER_USE_RUSSIAN
13 |
14 | typedef enum {
15 | BROWSER_BACK,
16 | BROWSER_BACK_LONGPRESS,
17 | BROWSER_DIRECTORY,
18 | BROWSER_FILE,
19 | BROWSER_FILE_LONGPRESS
20 | } BROWSER_RESULT;
21 |
22 | // struct like FILINFO but with dynamic filename
23 | typedef struct {
24 | char* filename;
25 | FSIZE_t fsize;
26 | uint8_t fattrib;
27 | } DYN_FILINFO;
28 |
29 | BROWSER_RESULT browser_tree(char *directory, int dir_max_len, FILINFO *fno);
30 |
31 | #endif /* INC_BROWSER_H_ */
32 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/buttons.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_BUTTONS_H_
2 | #define INC_BUTTONS_H_
3 |
4 | uint8_t button_up_holding();
5 | uint8_t button_down_holding();
6 | uint8_t button_left_holding();
7 | uint8_t button_right_holding();
8 | uint8_t button_up_newpress();
9 | uint8_t button_down_newpress();
10 | uint8_t button_left_newpress();
11 | uint8_t button_right_newpress();
12 | void button_left_right_repeat_enable(uint8_t enable);
13 | void button_set_up_down_repeat_interval(uint32_t interval);
14 | void button_set_left_right_repeat_interval(uint32_t interval);
15 | uint32_t button_left_hold_time();
16 | uint32_t button_right_hold_time();
17 | void button_check_screen_off();
18 |
19 | #define BUTTONS_REPEAT_TIME 500
20 | #define BUTTONS_DEFAULT_UP_DOWN_REPEAT_INTERVAL 4
21 | #define BUTTONS_DEFAULT_LEFT_RIGHT_REPEAT_INTERVAL 12
22 |
23 | #endif /* INC_BUTTONS_H_ */
24 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/confirm.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_CONFIRM_H_
2 | #define INC_CONFIRM_H_
3 |
4 | uint8_t confirm(char *text);
5 |
6 | #endif /* INC_CONFIRM_H_ */
7 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fatfs/diskio.h:
--------------------------------------------------------------------------------
1 | /*-----------------------------------------------------------------------/
2 | / Low level disk interface modlue include file (C)ChaN, 2019 /
3 | /-----------------------------------------------------------------------*/
4 |
5 | #ifndef _DISKIO_DEFINED
6 | #define _DISKIO_DEFINED
7 |
8 | #ifdef __cplusplus
9 | extern "C" {
10 | #endif
11 |
12 | /* Status of Disk Functions */
13 | typedef BYTE DSTATUS;
14 |
15 | /* Results of Disk Functions */
16 | typedef enum {
17 | RES_OK = 0, /* 0: Successful */
18 | RES_ERROR, /* 1: R/W Error */
19 | RES_WRPRT, /* 2: Write Protected */
20 | RES_NOTRDY, /* 3: Not Ready */
21 | RES_PARERR /* 4: Invalid Parameter */
22 | } DRESULT;
23 |
24 |
25 | /*---------------------------------------*/
26 | /* Prototypes for disk control functions */
27 |
28 |
29 | DSTATUS disk_initialize (BYTE pdrv);
30 | DSTATUS disk_status (BYTE pdrv);
31 | DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count);
32 | DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count);
33 | DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
34 |
35 |
36 | /* Disk Status Bits (DSTATUS) */
37 |
38 | #define STA_NOINIT 0x01 /* Drive not initialized */
39 | #define STA_NODISK 0x02 /* No medium in the drive */
40 | #define STA_PROTECT 0x04 /* Write protected */
41 |
42 |
43 | /* Command code for disk_ioctrl fucntion */
44 |
45 | /* Generic command (Used by FatFs) */
46 | #define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
47 | #define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */
48 | #define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */
49 | #define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */
50 | #define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */
51 |
52 | /* Generic command (Not used by FatFs) */
53 | #define CTRL_POWER 5 /* Get/Set power status */
54 | #define CTRL_LOCK 6 /* Lock/Unlock media removal */
55 | #define CTRL_EJECT 7 /* Eject media */
56 | #define CTRL_FORMAT 8 /* Create physical format on the media */
57 |
58 | /* MMC/SDC specific ioctl command */
59 | #define MMC_GET_TYPE 10 /* Get card type */
60 | #define MMC_GET_CSD 11 /* Get CSD */
61 | #define MMC_GET_CID 12 /* Get CID */
62 | #define MMC_GET_OCR 13 /* Get OCR */
63 | #define MMC_GET_SDSTAT 14 /* Get SD status */
64 | #define ISDIO_READ 55 /* Read data form SD iSDIO register */
65 | #define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
66 | #define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
67 |
68 | /* ATA/CF specific ioctl command */
69 | #define ATA_GET_REV 20 /* Get F/W revision */
70 | #define ATA_GET_MODEL 21 /* Get model name */
71 | #define ATA_GET_SN 22 /* Get serial number */
72 |
73 | #ifdef __cplusplus
74 | }
75 | #endif
76 |
77 | #endif
78 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fdsemu.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_FDSEMU_H_
2 | #define INC_FDSEMU_H_
3 |
4 | #include "main.h"
5 | #include "ff.h"
6 |
7 | #define FDS_USE_DYNAMIC_MEMORY
8 |
9 | // hardware settings
10 | #define FDS_READ_PWM_TIMER htim3
11 | #define FDS_READ_PWM_TIMER_CHANNEL 1
12 | #define FDS_READ_DMA hdma_tim3_up
13 | #define FDS_READ_IMPULSE_LENGTH 32
14 |
15 | #define FDS_WRITE_CAPTURE_TIMER htim17
16 | #define FDS_WRITE_CAPTURE_TIMER_CHANNEL 1
17 | #define FDS_WRITE_DMA hdma_tim17_ch1
18 | #define FDS_THRESHOLD_1 960
19 | #define FDS_THRESHOLD_2 1120
20 |
21 | // FDS emulation settings
22 | #define FDS_MAX_SIDE_SIZE (65 * 1024) // 65000 + some space for gaps and crcs, largest ROM is 66080 bytes including gaps and crcs
23 | #define FDS_MAX_FILE_PATH_LENGTH 4096
24 | #define FDS_MAX_BLOCKS 256
25 | #define FDS_MAX_BLOCK_SIZE FDS_MAX_SIDE_SIZE
26 | #define FDS_READ_BUFFER_SIZE 128 // bits
27 | #define FDS_WRITE_BUFFER_SIZE 32 // impulses
28 | #define FDS_FIRST_GAP_READ_BITS 28300 // first gap size, bits
29 | #define FDS_NEXT_GAPS_READ_BITS 976 // next gap size, bits
30 | #define FDS_WRITE_GAP_SKIP_BITS 32 // dispose bits before writing
31 | #define FDS_NOT_READY_TIME 1000 // disk rewind time, milliseconds
32 | #define FDS_NOT_READY_TIME_ORIGINAL 5000 // disk rewind time for original speed mode
33 | #define FDS_NOT_READY_BYTES 1024 // fast rewind after this amount of bytes of used data
34 | #define FDS_MULTI_WRITE_UNLICENSED_BITS 32 // some unlicensed software can write multiple blocks at once
35 | #define FDS_AUTOSAVE_DELAY 1000
36 |
37 | // do not touch it
38 | #define FDS_ROM_HEADER_SIZE 16 // header in ROM
39 | #define FDS_ROM_SIDE_SIZE 65500 // disk side size in ROM
40 |
41 | // special subdefines
42 | #define FDS_GLUE(a, b) a##b
43 | #define FDS_TIMER_CHANNEL_REG(v) FDS_GLUE(CCR, v)
44 | #define FDS_TIMER_CHANNEL_CONST(v) FDS_GLUE(TIM_CHANNEL_, v)
45 | #define FDS_TIMER_DMA_TRIGGER_CONST(v) FDS_GLUE(TIM_DMA_CC, v)
46 | #define FDS_READ_PWM_TIMER_CHANNEL_REG FDS_TIMER_CHANNEL_REG(FDS_READ_PWM_TIMER_CHANNEL)
47 | #define FDS_READ_PWM_TIMER_CHANNEL_CONST FDS_TIMER_CHANNEL_CONST(FDS_READ_PWM_TIMER_CHANNEL)
48 | #define FDS_WRITE_CAPTURE_TIMER_CHANNEL_REG FDS_TIMER_CHANNEL_REG(FDS_WRITE_CAPTURE_TIMER_CHANNEL)
49 | #define FDS_WRITE_CAPTURE_TIMER_CHANNEL_CONST FDS_TIMER_CHANNEL_CONST(FDS_WRITE_CAPTURE_TIMER_CHANNEL)
50 | #define FDS_WRITE_CAPTURE_DMA_TRIGGER_CONST FDS_TIMER_DMA_TRIGGER_CONST(FDS_WRITE_CAPTURE_TIMER_CHANNEL)
51 |
52 | typedef enum {
53 | FDS_OFF, // disk image is not loaded
54 | FDS_IDLE, // disk stopped
55 | FDS_READ_WAIT_READY, // waiting for disk rewinding
56 | FDS_READ_WAIT_READY_TIMER, // not-ready timer
57 | FDS_READING, // reading data
58 | FDS_WRITING_GAP, // waiting for gap terminator before writing
59 | FDS_WRITING, // writing data
60 | FDS_WRITING_STOPPING, // end of useful data, writing garbage
61 | FDS_SAVE_PENDING // saving image
62 | } FDS_STATE;
63 |
64 | #define FDSR_WRONG_CRC 0x80
65 | #define FDSR_INVALID_ROM 0x81
66 | #define FDSR_OUT_OF_MEMORY 0x82
67 | #define FDSR_ROM_TOO_LARGE 0x83
68 | #define FDSR_READ_ONLY 0x84
69 | #define FDSR_CANCELLED 0x85
70 |
71 | FRESULT fds_load_side(char *filename, uint8_t side, uint8_t ro);
72 | FRESULT fds_close(uint8_t save);
73 | FRESULT fds_save();
74 | void fds_check_pins();
75 | FDS_STATE fds_get_state();
76 | uint8_t fds_is_changed();
77 | int fds_get_block();
78 | int fds_get_block_count();
79 | int fds_get_head_position();
80 | int fds_get_max_size();
81 | int fds_get_used_space();
82 |
83 | extern TIM_HandleTypeDef FDS_READ_PWM_TIMER;
84 | extern DMA_HandleTypeDef FDS_READ_DMA;
85 | extern TIM_HandleTypeDef FDS_WRITE_TIMER;
86 | extern DMA_HandleTypeDef FDS_WRITE_DMA;
87 | extern TIM_HandleTypeDef FDS_WRITE_CAPTURE_TIMER;
88 |
89 | #endif /* INC_FDSEMU_H_ */
90 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fdsemugui.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_FDSEMUGUI_H_
2 | #define INC_FDSEMUGUI_H_
3 |
4 | #include "ff.h"
5 |
6 | #define FDS_GUI_GAME_NAME_FONT FONT_SLIMFONT_8
7 | #define FDS_GUI_HORIZONTAL_SCROLL_SPEED 2
8 | #define FDS_GUI_HORIZONTAL_SCROLL_PAUSE 24
9 | #define FDS_GUI_FILE_NUMBER_FONT FONT_DIGITS
10 | #define FDS_GUI_SIDE_SWITCH_DELAY 800
11 |
12 | FRESULT fds_gui_load_side(char *filename, char *game_name, uint8_t *side, uint8_t side_count, uint8_t ro);
13 |
14 | #endif /* INC_FDSEMUGUI_H_ */
15 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fileproperties.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_FILEPROPERTIES_H_
2 | #define INC_FILEPROPERTIES_H_
3 |
4 | #include "ff.h"
5 |
6 | #define FILE_PROPERTIES_WRITE_PROTECT 0
7 | #define FILE_PROPERTIES_RESTORE_BACKUP 1
8 | #define FILE_PROPERTIES_DELETE 2
9 |
10 | void file_properties(char *directory, FILINFO *fno);
11 |
12 | #endif /* INC_FILEPROPERTIES_H_ */
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fonts.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_FONTS_H_
2 | #define INC_FONTS_H_
3 |
4 | #include
5 |
6 | typedef struct DotMatrixFont {
7 | const uint8_t font_type;
8 | const uint8_t start_char;
9 | const uint8_t font_length;
10 | const uint8_t char_width;
11 | const uint8_t char_height;
12 | const uint8_t spacing;
13 | const uint8_t space_length;
14 | const void* font_data;
15 | } DotMatrixFont;
16 |
17 | #include "fonts/fontexterns.h"
18 |
19 | #endif /* INC_FONTS_H_ */
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fonts/fontdata.h:
--------------------------------------------------------------------------------
1 | #include "digits_font.h"
2 | #include "gamegirl_classic_12_font.h"
3 | #include "gamegirl_classic_6_font.h"
4 | #include "slimfont_8_font.h"
5 | #include "standard_6_font.h"
6 | #include "ultraslimfont_8_font.h"
7 | #include "verdana_12_bold_font.h"
8 | #include "verdana_14_bold_font.h"
9 | #include "../fonts.h"
10 |
11 | const DotMatrixFont FONT_DIGITS = {
12 | .font_type = FONT_DIGITS_FONT_TYPE,
13 | .start_char = FONT_DIGITS_START_CHAR,
14 | .font_length = FONT_DIGITS_LENGTH,
15 | .char_width = FONT_DIGITS_CHAR_WIDTH,
16 | .char_height = FONT_DIGITS_CHAR_HEIGHT,
17 | .spacing = 1,
18 | .space_length = 0,
19 | .font_data = font_digits
20 | };
21 |
22 | const DotMatrixFont FONT_GAMEGIRL_CLASSIC_12 = {
23 | .font_type = FONT_GAMEGIRL_CLASSIC_12_FONT_TYPE,
24 | .start_char = FONT_GAMEGIRL_CLASSIC_12_START_CHAR,
25 | .font_length = FONT_GAMEGIRL_CLASSIC_12_LENGTH,
26 | .char_width = FONT_GAMEGIRL_CLASSIC_12_CHAR_WIDTH,
27 | .char_height = FONT_GAMEGIRL_CLASSIC_12_CHAR_HEIGHT,
28 | .spacing = 0,
29 | .space_length = 0,
30 | .font_data = font_gamegirl_classic_12
31 | };
32 |
33 | const DotMatrixFont FONT_GAMEGIRL_CLASSIC_6 = {
34 | .font_type = FONT_GAMEGIRL_CLASSIC_6_FONT_TYPE,
35 | .start_char = FONT_GAMEGIRL_CLASSIC_6_START_CHAR,
36 | .font_length = FONT_GAMEGIRL_CLASSIC_6_LENGTH,
37 | .char_width = FONT_GAMEGIRL_CLASSIC_6_CHAR_WIDTH,
38 | .char_height = FONT_GAMEGIRL_CLASSIC_6_CHAR_HEIGHT,
39 | .spacing = 0,
40 | .space_length = 0,
41 | .font_data = font_gamegirl_classic_6
42 | };
43 |
44 | const DotMatrixFont FONT_SLIMFONT_8 = {
45 | .font_type = FONT_SLIMFONT_8_FONT_TYPE,
46 | .start_char = FONT_SLIMFONT_8_START_CHAR,
47 | .font_length = FONT_SLIMFONT_8_LENGTH,
48 | .char_width = FONT_SLIMFONT_8_CHAR_WIDTH,
49 | .char_height = FONT_SLIMFONT_8_CHAR_HEIGHT,
50 | .spacing = 1,
51 | .space_length = 3,
52 | .font_data = font_slimfont_8
53 | };
54 |
55 | const DotMatrixFont FONT_STANDARD_6 = {
56 | .font_type = FONT_STANDARD_6_FONT_TYPE,
57 | .start_char = FONT_STANDARD_6_START_CHAR,
58 | .font_length = FONT_STANDARD_6_LENGTH,
59 | .char_width = FONT_STANDARD_6_CHAR_WIDTH,
60 | .char_height = FONT_STANDARD_6_CHAR_HEIGHT,
61 | .spacing = 1,
62 | .space_length = 0,
63 | .font_data = font_standard_6
64 | };
65 |
66 | const DotMatrixFont FONT_ULTRASLIMFONT_8 = {
67 | .font_type = FONT_ULTRASLIMFONT_8_FONT_TYPE,
68 | .start_char = FONT_ULTRASLIMFONT_8_START_CHAR,
69 | .font_length = FONT_ULTRASLIMFONT_8_LENGTH,
70 | .char_width = FONT_ULTRASLIMFONT_8_CHAR_WIDTH,
71 | .char_height = FONT_ULTRASLIMFONT_8_CHAR_HEIGHT,
72 | .spacing = 1,
73 | .space_length = 2,
74 | .font_data = font_ultraslimfont_8
75 | };
76 |
77 | const DotMatrixFont FONT_VERDANA_12_BOLD = {
78 | .font_type = FONT_VERDANA_12_BOLD_FONT_TYPE,
79 | .start_char = FONT_VERDANA_12_BOLD_START_CHAR,
80 | .font_length = FONT_VERDANA_12_BOLD_LENGTH,
81 | .char_width = FONT_VERDANA_12_BOLD_CHAR_WIDTH,
82 | .char_height = FONT_VERDANA_12_BOLD_CHAR_HEIGHT,
83 | .spacing = 1,
84 | .space_length = 0,
85 | .font_data = font_verdana_12_bold
86 | };
87 |
88 | const DotMatrixFont FONT_VERDANA_14_BOLD = {
89 | .font_type = FONT_VERDANA_14_BOLD_FONT_TYPE,
90 | .start_char = FONT_VERDANA_14_BOLD_START_CHAR,
91 | .font_length = FONT_VERDANA_14_BOLD_LENGTH,
92 | .char_width = FONT_VERDANA_14_BOLD_CHAR_WIDTH,
93 | .char_height = FONT_VERDANA_14_BOLD_CHAR_HEIGHT,
94 | .spacing = 1,
95 | .space_length = 0,
96 | .font_data = font_verdana_14_bold
97 | };
98 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/fonts/fontexterns.h:
--------------------------------------------------------------------------------
1 | extern const DotMatrixFont FONT_DIGITS;
2 | extern const DotMatrixFont FONT_GAMEGIRL_CLASSIC_12;
3 | extern const DotMatrixFont FONT_GAMEGIRL_CLASSIC_6;
4 | extern const DotMatrixFont FONT_SLIMFONT_8;
5 | extern const DotMatrixFont FONT_STANDARD_6;
6 | extern const DotMatrixFont FONT_ULTRASLIMFONT_8;
7 | extern const DotMatrixFont FONT_VERDANA_12_BOLD;
8 | extern const DotMatrixFont FONT_VERDANA_14_BOLD;
9 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_IMAGES_H_
2 | #define INC_IMAGES_H_
3 |
4 | #include
5 |
6 | typedef struct DotMatrixImage {
7 | const uint8_t width;
8 | const uint8_t height;
9 | const uint8_t *image_data;
10 | } DotMatrixImage;
11 |
12 | #include "images/imageexterns.h"
13 |
14 | #endif /* INC_IMAGES_H_ */
15 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_1a.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_1A_H
2 | #define IMAGE_CARD_1A_H
3 |
4 | #define IMAGE_CARD_1A_WIDTH 33
5 | #define IMAGE_CARD_1A_HEIGHT 30
6 |
7 | const unsigned char image_card_1a[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x88, 0xF8, 0xFF,
11 | 0x7F, 0x1F, 0xF2, 0xFF, 0xFF, 0xA6, 0xEF, 0xFF, 0xFF, 0x65, 0xC0, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x3D, 0x0D, 0xB7, 0xFD, 0x92, 0xEA, 0xFD, 0xFF, 0x27, 0x55, 0x0B, 0xE0, 0xE8, 0xA9,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_1A_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_1b.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_1B_H
2 | #define IMAGE_CARD_1B_H
3 |
4 | #define IMAGE_CARD_1B_WIDTH 33
5 | #define IMAGE_CARD_1B_HEIGHT 30
6 |
7 | const unsigned char image_card_1b[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0xFF, 0xFF, 0xFF, 0x2F, 0x07, 0xFF, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0x1F, 0xF1, 0xFF, 0xFF, 0x26, 0xE4, 0xFF, 0xFF, 0x65, 0xDF, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0xFA, 0xEA, 0xFD, 0xFF, 0x57, 0x55, 0x0B, 0xE0, 0xA8, 0xAB,
13 | 0x16, 0xC0, 0xD5, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x31, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_1B_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_2a.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_2A_H
2 | #define IMAGE_CARD_2A_H
3 |
4 | #define IMAGE_CARD_2A_WIDTH 33
5 | #define IMAGE_CARD_2A_HEIGHT 30
6 |
7 | const unsigned char image_card_2a[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0xE8, 0xFA, 0xFF,
11 | 0x7F, 0x5F, 0xF5, 0xFF, 0xFF, 0xA6, 0xEE, 0xFF, 0xFF, 0x65, 0xC0, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x3D, 0x0D, 0xB7, 0xFD, 0x92, 0xEA, 0xFD, 0xFF, 0x27, 0x55, 0x0B, 0xE0, 0xE8, 0xA9,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_2A_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_2b.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_2B_H
2 | #define IMAGE_CARD_2B_H
3 |
4 | #define IMAGE_CARD_2B_WIDTH 33
5 | #define IMAGE_CARD_2B_HEIGHT 30
6 |
7 | const unsigned char image_card_2b[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0xFF, 0xFF, 0xFF, 0x2F, 0x07, 0xFF, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0xDF, 0xF5, 0xFF, 0xFF, 0xA6, 0xEA, 0xFF, 0xFF, 0x65, 0xDD, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0xFA, 0xEA, 0xFD, 0xFF, 0x57, 0x55, 0x0B, 0xE0, 0xA8, 0xAB,
13 | 0x16, 0xC0, 0xD5, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x31, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_2B_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_3a.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_3A_H
2 | #define IMAGE_CARD_3A_H
3 |
4 | #define IMAGE_CARD_3A_WIDTH 33
5 | #define IMAGE_CARD_3A_HEIGHT 30
6 |
7 | const unsigned char image_card_3a[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0xA8, 0xFA, 0xFF,
11 | 0x7F, 0x5F, 0xF5, 0xFF, 0xFF, 0xA6, 0xEF, 0xFF, 0xFF, 0x65, 0xC0, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x3D, 0x0D, 0xB7, 0xFD, 0x92, 0xEA, 0xFD, 0xFF, 0x27, 0x55, 0x0B, 0xE0, 0xE8, 0xA9,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_3A_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_3b.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_3B_H
2 | #define IMAGE_CARD_3B_H
3 |
4 | #define IMAGE_CARD_3B_WIDTH 33
5 | #define IMAGE_CARD_3B_HEIGHT 30
6 |
7 | const unsigned char image_card_3b[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0xFF, 0xFF, 0xFF, 0x2F, 0x07, 0xFF, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0x5F, 0xF5, 0xFF, 0xFF, 0xA6, 0xEA, 0xFF, 0xFF, 0x65, 0xDF, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0xFA, 0xEA, 0xFD, 0xFF, 0x57, 0x55, 0x0B, 0xE0, 0xA8, 0xAB,
13 | 0x16, 0xC0, 0xD5, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x31, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_3B_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_4a.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_4A_H
2 | #define IMAGE_CARD_4A_H
3 |
4 | #define IMAGE_CARD_4A_WIDTH 33
5 | #define IMAGE_CARD_4A_HEIGHT 30
6 |
7 | const unsigned char image_card_4a[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x88, 0xFB, 0xFF,
11 | 0x7F, 0x1F, 0xF1, 0xFF, 0xFF, 0xA6, 0xEF, 0xFF, 0xFF, 0x65, 0xC0, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x3D, 0x0D, 0xB7, 0xFD, 0x92, 0xEA, 0xFD, 0xFF, 0x27, 0x55, 0x0B, 0xE0, 0xE8, 0xA9,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_4A_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_4b.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_4B_H
2 | #define IMAGE_CARD_4B_H
3 |
4 | #define IMAGE_CARD_4B_WIDTH 33
5 | #define IMAGE_CARD_4B_HEIGHT 30
6 |
7 | const unsigned char image_card_4b[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0xFF, 0xFF, 0xFF, 0x2F, 0x07, 0xFF, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0x1F, 0xF7, 0xFF, 0xFF, 0x26, 0xE2, 0xFF, 0xFF, 0x65, 0xDF, 0x01, 0x00, 0xFA, 0x80, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0xFA, 0xEA, 0xFD, 0xFF, 0x57, 0x55, 0x0B, 0xE0, 0xA8, 0xAB,
13 | 0x16, 0xC0, 0xD5, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x31, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_4B_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_a.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_A_H
2 | #define IMAGE_CARD_A_H
3 |
4 | #define IMAGE_CARD_A_WIDTH 33
5 | #define IMAGE_CARD_A_HEIGHT 30
6 |
7 | const unsigned char image_card_a[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0xDF, 0xF3, 0xFF, 0xFF, 0x26, 0xE9, 0xFF, 0xFF, 0x65, 0xD2, 0x01, 0x00, 0xFA, 0x9E, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0x02, 0xEA, 0xFD, 0xFF, 0x07, 0x54, 0x0B, 0xE0, 0x08, 0xA8,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_A_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_b.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_B_H
2 | #define IMAGE_CARD_B_H
3 |
4 | #define IMAGE_CARD_B_WIDTH 33
5 | #define IMAGE_CARD_B_HEIGHT 30
6 |
7 | const unsigned char image_card_b[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0xFF, 0xFF, 0xFF, 0x2F, 0x07, 0xFF, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0xDF, 0xF7, 0xFF, 0xFF, 0xA6, 0xEA, 0xFF, 0xFF, 0x65, 0xDD, 0x01, 0x00, 0xFA, 0x86, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0x02, 0xEA, 0xFD, 0xFF, 0x07, 0x54, 0x0B, 0xE0, 0x08, 0xA8,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x31, 0xF8, 0xFF, 0xFF, 0xE2, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_B_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_single.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_SINGLE_H
2 | #define IMAGE_CARD_SINGLE_H
3 |
4 | #define IMAGE_CARD_SINGLE_WIDTH 33
5 | #define IMAGE_CARD_SINGLE_HEIGHT 30
6 |
7 | const unsigned char image_card_single[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x47, 0xFC, 0xFF, 0xBF, 0x88, 0xF8, 0xFF,
11 | 0x7F, 0x1F, 0xF1, 0xFF, 0xFF, 0x26, 0xE0, 0xFF, 0xFF, 0x65, 0xC4, 0x01, 0x00, 0xFA, 0x88, 0xFD,
12 | 0xFF, 0x17, 0x01, 0x0D, 0xB7, 0xFD, 0x22, 0xEA, 0xFD, 0xFF, 0x47, 0x54, 0x0B, 0xE0, 0x88, 0xA8,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA2, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x88,
14 | 0x03, 0x00, 0xF4, 0x11, 0xFF, 0xFF, 0x2F, 0x22, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x8F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_SINGLE_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/card_unknown.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CARD_UNKNOWN_H
2 | #define IMAGE_CARD_UNKNOWN_H
3 |
4 | #define IMAGE_CARD_UNKNOWN_WIDTH 33
5 | #define IMAGE_CARD_UNKNOWN_HEIGHT 30
6 |
7 | const unsigned char image_card_unknown[] =
8 | {
9 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF,
10 | 0x3F, 0x83, 0xFF, 0xFF, 0x2F, 0x03, 0xFE, 0xFF, 0xDF, 0x07, 0xFC, 0xFF, 0xBF, 0x08, 0xF8, 0xFF,
11 | 0x7F, 0x1F, 0xF0, 0xFF, 0xFF, 0x26, 0xE5, 0xFF, 0xFF, 0x65, 0xC0, 0x01, 0x00, 0xFA, 0xA2, 0xFD,
12 | 0xFF, 0x17, 0x39, 0x0D, 0xB7, 0xFD, 0x02, 0xEA, 0xFD, 0xFF, 0x07, 0x54, 0x0B, 0xE0, 0x08, 0xA8,
13 | 0x16, 0xC0, 0x15, 0x50, 0xEF, 0xFF, 0x3F, 0xA0, 0x61, 0xDB, 0x4F, 0xC0, 0xFE, 0xFF, 0xCB, 0x80,
14 | 0x03, 0x00, 0xF4, 0x01, 0xFF, 0xFF, 0x2F, 0x02, 0xFE, 0xFF, 0xDF, 0x06, 0xFC, 0xFF, 0xBF, 0x0F,
15 | 0xF8, 0xFF, 0x7F, 0x11, 0xF0, 0xFF, 0xFF, 0x62, 0xF0, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
16 | 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F
17 | };
18 |
19 | #endif // IMAGE_CARD_UNKNOWN_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/cursor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CURSOR_H
2 | #define IMAGE_CURSOR_H
3 |
4 | #define IMAGE_CURSOR_WIDTH 3
5 | #define IMAGE_CURSOR_HEIGHT 8
6 |
7 | const unsigned char image_cursor[] =
8 | {
9 | 0x40, 0xB6, 0x00, 0x00
10 | };
11 |
12 | #endif // IMAGE_CURSOR_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/cursor_down.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CURSOR_DOWN_H
2 | #define IMAGE_CURSOR_DOWN_H
3 |
4 | #define IMAGE_CURSOR_DOWN_WIDTH 5
5 | #define IMAGE_CURSOR_DOWN_HEIGHT 3
6 |
7 | const unsigned char image_cursor_down[] =
8 | {
9 | 0xDF, 0x11
10 | };
11 |
12 | #endif // IMAGE_CURSOR_DOWN_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/cursor_down_w.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CURSOR_DOWN_W_H
2 | #define IMAGE_CURSOR_DOWN_W_H
3 |
4 | #define IMAGE_CURSOR_DOWN_W_WIDTH 6
5 | #define IMAGE_CURSOR_DOWN_W_HEIGHT 3
6 |
7 | const unsigned char image_cursor_down_w[] =
8 | {
9 | 0xBF, 0xC7, 0x00
10 | };
11 |
12 | #endif // IMAGE_CURSOR_DOWN_W_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/cursor_up.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CURSOR_UP_H
2 | #define IMAGE_CURSOR_UP_H
3 |
4 | #define IMAGE_CURSOR_UP_WIDTH 5
5 | #define IMAGE_CURSOR_UP_HEIGHT 3
6 |
7 | const unsigned char image_cursor_up[] =
8 | {
9 | 0xC4, 0x7D
10 | };
11 |
12 | #endif // IMAGE_CURSOR_UP_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/cursor_up_w.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_CURSOR_UP_W_H
2 | #define IMAGE_CURSOR_UP_W_H
3 |
4 | #define IMAGE_CURSOR_UP_W_WIDTH 6
5 | #define IMAGE_CURSOR_UP_W_HEIGHT 3
6 |
7 | const unsigned char image_cursor_up_w[] =
8 | {
9 | 0x8C, 0xF7, 0x03
10 | };
11 |
12 | #endif // IMAGE_CURSOR_UP_W_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_0.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_0_H
2 | #define IMAGE_DISK_FLIP_FRAME_0_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_0_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_0_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_0[] =
8 | {
9 | 0x0F, 0xF0, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0x9F, 0xBF, 0x73, 0x7F, 0xE6, 0xAF, 0xDC, 0x9F, 0xFF,
10 | 0x3B, 0xF5, 0xE7, 0xFF, 0xCE, 0xFD, 0xFF, 0xBF, 0x72, 0xFF, 0xFF, 0xEF, 0xD4, 0xFF, 0xFF, 0x3B,
11 | 0xF7, 0xFF, 0xFF, 0xCA, 0xFD, 0xFF, 0xBF, 0x53, 0xFF, 0xFF, 0xEF, 0xDF, 0xFF, 0xFF, 0x1B, 0xF6,
12 | 0xFF, 0xFF, 0x7A, 0xFD, 0xFF, 0xBF, 0x5E, 0xFF, 0xFF, 0xAF, 0xD4, 0xFF, 0xFF, 0xEB, 0xF5, 0xFF,
13 | 0xFF, 0x86, 0xFD, 0xFF, 0x7F, 0xBF, 0xFF, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
14 | 0x00, 0xC0, 0xFF, 0x01, 0x00, 0xE0, 0x7F, 0x00, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
15 | 0xFF, 0xFF, 0xD6, 0xA4, 0xCD, 0x3F, 0xA5, 0x4D, 0xF2, 0x5F, 0x6B, 0xD6, 0xFC, 0xFF, 0xFF, 0xFF,
16 | 0x0F
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_0_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_1.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_1_H
2 | #define IMAGE_DISK_FLIP_FRAME_1_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_1_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_1_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_1[] =
8 | {
9 | 0x1E, 0xF0, 0x03, 0x9E, 0xFF, 0xFF, 0xFF, 0x27, 0xBF, 0x73, 0x3F, 0xC9, 0xAF, 0xDC, 0x4F, 0xFE,
10 | 0x3B, 0xF5, 0x93, 0xFF, 0xCE, 0xFD, 0xE7, 0xBF, 0x72, 0xFF, 0xF9, 0xEF, 0xD4, 0x7F, 0xFE, 0x3B,
11 | 0xF7, 0x9F, 0xFF, 0xCA, 0xFD, 0xE7, 0xBF, 0x53, 0xFF, 0xF9, 0xEF, 0xDF, 0x7F, 0xFE, 0x1B, 0xF6,
12 | 0x9F, 0xFF, 0x7A, 0xFD, 0xE7, 0xBF, 0x5E, 0xFF, 0xF9, 0xAF, 0xD4, 0x7F, 0xFE, 0xEB, 0xF5, 0x9F,
13 | 0xFF, 0x86, 0xFD, 0xE7, 0x7F, 0xBF, 0xFF, 0xF9, 0x3F, 0xF0, 0x7F, 0xFE, 0xFF, 0xFF, 0x9F, 0x1F,
14 | 0x00, 0xE0, 0xE7, 0x03, 0x00, 0xF0, 0xF9, 0x00, 0x00, 0x7C, 0x7E, 0x00, 0x80, 0x9F, 0xFF, 0xFF,
15 | 0xFF, 0xE7, 0xDD, 0xA4, 0xE5, 0x79, 0xA6, 0x4D, 0x79, 0xBE, 0x6B, 0x56, 0x9E, 0xFF, 0xFF, 0xFF,
16 | 0x07
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_1_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_2.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_2_H
2 | #define IMAGE_DISK_FLIP_FRAME_2_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_2_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_2_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_2[] =
8 | {
9 | 0x1C, 0xF0, 0x03, 0x0E, 0xFF, 0xFF, 0xFF, 0x43, 0x7E, 0xB3, 0x9F, 0x90, 0x9F, 0xEC, 0x27, 0xFC,
10 | 0x37, 0xF9, 0x09, 0xFF, 0xCD, 0xFE, 0xC3, 0x7F, 0xB2, 0xFF, 0xF0, 0xDF, 0xE4, 0x3F, 0xFC, 0x37,
11 | 0xFB, 0x0F, 0xFF, 0xC9, 0xFE, 0xC3, 0x7F, 0x93, 0xFF, 0xF0, 0xDF, 0xEF, 0x3F, 0xFC, 0x17, 0xFA,
12 | 0x0F, 0xFF, 0x79, 0xFE, 0xC3, 0x7F, 0x9E, 0xFF, 0xF0, 0x9F, 0xE4, 0x3F, 0xFC, 0xE7, 0xF9, 0x0F,
13 | 0xFF, 0x85, 0xFE, 0xC3, 0x7F, 0xBF, 0xFF, 0xF0, 0x3F, 0xF0, 0x3F, 0xFC, 0xFF, 0xFF, 0x0F, 0x1F,
14 | 0x00, 0xE0, 0xC3, 0x03, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x3C, 0x7C, 0x00, 0x80, 0x0F, 0xFF, 0xFF,
15 | 0xFF, 0xC3, 0xAD, 0xE4, 0xE6, 0x70, 0x8A, 0x2D, 0x39, 0xBC, 0x66, 0x6A, 0x0E, 0xFF, 0xFF, 0xFF,
16 | 0x03
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_2_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_3.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_3_H
2 | #define IMAGE_DISK_FLIP_FRAME_3_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_3_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_3_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_3[] =
8 | {
9 | 0x70, 0xE0, 0x81, 0x03, 0xFC, 0xFF, 0xFF, 0x00, 0x7D, 0xB3, 0x2F, 0x40, 0x5F, 0xEC, 0x0B, 0xF0,
10 | 0x37, 0xFA, 0x02, 0xFC, 0xCD, 0xFE, 0x00, 0x7F, 0xB1, 0x3F, 0xC0, 0xDF, 0xE8, 0x0F, 0xF0, 0x37,
11 | 0xFB, 0x03, 0xFC, 0xC5, 0xFE, 0x00, 0x7F, 0xA3, 0x3F, 0xC0, 0xDF, 0xEF, 0x0F, 0xF0, 0x37, 0xFB,
12 | 0x03, 0xFC, 0xB5, 0xFE, 0x00, 0x7F, 0xAD, 0x3F, 0xC0, 0x5F, 0xE8, 0x0F, 0xF0, 0xD7, 0xFA, 0x03,
13 | 0xFC, 0xCD, 0xFE, 0x00, 0xFF, 0xDE, 0x3F, 0xC0, 0x7F, 0xF8, 0x0F, 0xF0, 0xFF, 0xFF, 0x03, 0x3C,
14 | 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x3C, 0xC0, 0x03, 0x00, 0x0F, 0xF0, 0x00, 0xC0, 0x03, 0xFC, 0xFF,
15 | 0xFF, 0x00, 0xD7, 0x55, 0x3B, 0xC0, 0x55, 0x85, 0x0E, 0xF0, 0x55, 0xB3, 0x03, 0xFC, 0xFF, 0xFF,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_3_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_4.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_4_H
2 | #define IMAGE_DISK_FLIP_FRAME_4_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_4_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_4_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_4[] =
8 | {
9 | 0xC0, 0xE0, 0xC1, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0xF4, 0xD2, 0x0B, 0x00, 0x3D, 0xF4, 0x02, 0xC0,
10 | 0x2F, 0xBC, 0x00, 0xF0, 0x4B, 0x3F, 0x00, 0xFC, 0xD0, 0x0F, 0x00, 0xBF, 0xF0, 0x03, 0xC0, 0x2F,
11 | 0xFD, 0x00, 0xF0, 0x43, 0x3F, 0x00, 0xFC, 0xC2, 0x0F, 0x00, 0xBF, 0xF7, 0x03, 0xC0, 0x2F, 0xFD,
12 | 0x00, 0xF0, 0x33, 0x3F, 0x00, 0xFC, 0xCC, 0x0F, 0x00, 0x3F, 0xF0, 0x03, 0xC0, 0xCF, 0xFC, 0x00,
13 | 0xF0, 0x4B, 0x3F, 0x00, 0xFC, 0xDE, 0x0F, 0x00, 0x7F, 0xF8, 0x03, 0xC0, 0xFF, 0xFF, 0x00, 0xF0,
14 | 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x03, 0xF0, 0x00, 0xF0, 0xFF,
15 | 0x3F, 0x00, 0x2C, 0xF5, 0x0C, 0x00, 0x03, 0x15, 0x03, 0xC0, 0x49, 0xCD, 0x00, 0xF0, 0xFF, 0x3F,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_4_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_5.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_5_H
2 | #define IMAGE_DISK_FLIP_FRAME_5_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_5_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_5_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_5[] =
8 | {
9 | 0x00, 0xC3, 0x30, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0xE0, 0xED, 0x01, 0x00, 0x78, 0x7B, 0x00, 0x00,
10 | 0xDF, 0x1E, 0x00, 0xC0, 0xB7, 0x0F, 0x00, 0xF0, 0xED, 0x03, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0xDF,
11 | 0x3E, 0x00, 0xC0, 0xB7, 0x0F, 0x00, 0xF0, 0xED, 0x03, 0x00, 0x7C, 0xFB, 0x00, 0x00, 0x1F, 0x3E,
12 | 0x00, 0xC0, 0xB7, 0x0F, 0x00, 0xF0, 0xE1, 0x03, 0x00, 0x7C, 0xF8, 0x00, 0x00, 0xDF, 0x3E, 0x00,
13 | 0xC0, 0x87, 0x0F, 0x00, 0xF0, 0xED, 0x03, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0xC0,
14 | 0x01, 0x0E, 0x00, 0x30, 0x00, 0x03, 0x00, 0x0C, 0xC0, 0x00, 0x00, 0x07, 0x38, 0x00, 0xC0, 0xFF,
15 | 0x0F, 0x00, 0x70, 0x62, 0x03, 0x00, 0x8C, 0xCB, 0x00, 0x00, 0x73, 0x37, 0x00, 0xC0, 0xFF, 0x0F,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_5_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_6.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_6_H
2 | #define IMAGE_DISK_FLIP_FRAME_6_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_6_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_6_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_6[] =
8 | {
9 | 0x00, 0xC4, 0x08, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x80, 0x6D, 0x00, 0x00, 0x60, 0x1B, 0x00, 0x00,
10 | 0xDC, 0x06, 0x00, 0x00, 0xB7, 0x03, 0x00, 0xC0, 0xED, 0x00, 0x00, 0x70, 0x3B, 0x00, 0x00, 0xDC,
11 | 0x0E, 0x00, 0x00, 0xB7, 0x03, 0x00, 0xC0, 0xED, 0x00, 0x00, 0x70, 0x3B, 0x00, 0x00, 0x1C, 0x0E,
12 | 0x00, 0x00, 0xB7, 0x03, 0x00, 0xC0, 0xE1, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, 0xDC, 0x0E, 0x00,
13 | 0x00, 0x87, 0x03, 0x00, 0xC0, 0xED, 0x00, 0x00, 0xF0, 0x3C, 0x00, 0x00, 0xFC, 0x0F, 0x00, 0x00,
14 | 0x03, 0x03, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0xFF,
15 | 0x03, 0x00, 0x40, 0xB2, 0x00, 0x00, 0x10, 0x23, 0x00, 0x00, 0x4C, 0x0A, 0x00, 0x00, 0xFF, 0x03,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_6_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_7.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_7_H
2 | #define IMAGE_DISK_FLIP_FRAME_7_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_7_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_7_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_7[] =
8 | {
9 | 0x00, 0xD0, 0x02, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00,
10 | 0x70, 0x01, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0xC0, 0x0D, 0x00, 0x00, 0xF0,
11 | 0x03, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF0, 0x03,
12 | 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0xC0, 0x0C, 0x00, 0x00, 0x30, 0x03, 0x00,
13 | 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00,
14 | 0x84, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x40, 0x08, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0xFC,
15 | 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x40, 0x0A, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0xFC, 0x00,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_7_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_8.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_8_H
2 | #define IMAGE_DISK_FLIP_FRAME_8_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_8_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_8_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_8[] =
8 | {
9 | 0x00, 0x20, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00,
10 | 0xE0, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xE0,
11 | 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xE0, 0x01,
12 | 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xE0, 0x01, 0x00,
13 | 0x00, 0x78, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00,
14 | 0x48, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x78,
15 | 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00, 0x78, 0x00,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_8_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/disk_flip_frame_9.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_DISK_FLIP_FRAME_9_H
2 | #define IMAGE_DISK_FLIP_FRAME_9_H
3 |
4 | #define IMAGE_DISK_FLIP_FRAME_9_WIDTH 30
5 | #define IMAGE_DISK_FLIP_FRAME_9_HEIGHT 30
6 |
7 | const unsigned char image_disk_flip_frame_9[] =
8 | {
9 | 0x00, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
10 | 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0,
11 | 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00,
12 | 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x00,
13 | 0x00, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
14 | 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x30,
15 | 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00,
16 | 0x00
17 | };
18 |
19 | #endif // IMAGE_DISK_FLIP_FRAME_9_H
20 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/folder6.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_FOLDER6_H
2 | #define IMAGE_FOLDER6_H
3 |
4 | #define IMAGE_FOLDER6_WIDTH 9
5 | #define IMAGE_FOLDER6_HEIGHT 7
6 |
7 | const unsigned char image_folder6[] =
8 | {
9 | 0x0E, 0xE2, 0x07, 0x0C, 0x18, 0x30, 0xE0, 0x7F
10 | };
11 |
12 | #endif // IMAGE_FOLDER6_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/head_cursor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_HEAD_CURSOR_H
2 | #define IMAGE_HEAD_CURSOR_H
3 |
4 | #define IMAGE_HEAD_CURSOR_WIDTH 5
5 | #define IMAGE_HEAD_CURSOR_HEIGHT 3
6 |
7 | const unsigned char image_head_cursor[] =
8 | {
9 | 0xC4, 0x7D
10 | };
11 |
12 | #endif // IMAGE_HEAD_CURSOR_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/imageexterns.h:
--------------------------------------------------------------------------------
1 | extern const DotMatrixImage IMAGE_CARD_1A;
2 | extern const DotMatrixImage IMAGE_CARD_1B;
3 | extern const DotMatrixImage IMAGE_CARD_2A;
4 | extern const DotMatrixImage IMAGE_CARD_2B;
5 | extern const DotMatrixImage IMAGE_CARD_3A;
6 | extern const DotMatrixImage IMAGE_CARD_3B;
7 | extern const DotMatrixImage IMAGE_CARD_4A;
8 | extern const DotMatrixImage IMAGE_CARD_4B;
9 | extern const DotMatrixImage IMAGE_CARD_A;
10 | extern const DotMatrixImage IMAGE_CARD_B;
11 | extern const DotMatrixImage IMAGE_CARD_SINGLE;
12 | extern const DotMatrixImage IMAGE_CARD_UNKNOWN;
13 | extern const DotMatrixImage IMAGE_CURSOR;
14 | extern const DotMatrixImage IMAGE_CURSOR_DOWN;
15 | extern const DotMatrixImage IMAGE_CURSOR_DOWN_W;
16 | extern const DotMatrixImage IMAGE_CURSOR_UP;
17 | extern const DotMatrixImage IMAGE_CURSOR_UP_W;
18 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_0;
19 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_1;
20 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_2;
21 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_3;
22 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_4;
23 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_5;
24 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_6;
25 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_7;
26 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_8;
27 | extern const DotMatrixImage IMAGE_DISK_FLIP_FRAME_9;
28 | extern const DotMatrixImage IMAGE_FOLDER6;
29 | extern const DotMatrixImage IMAGE_HEAD_CURSOR;
30 | extern const DotMatrixImage IMAGE_LARGE_CURSOR;
31 | extern const DotMatrixImage IMAGE_MEDIUM_CURSOR;
32 | extern const DotMatrixImage IMAGE_MICROSD_HOR;
33 | extern const DotMatrixImage IMAGE_STATE_FF;
34 | extern const DotMatrixImage IMAGE_STATE_PAUSE;
35 | extern const DotMatrixImage IMAGE_STATE_PLAY;
36 | extern const DotMatrixImage IMAGE_STATE_REC;
37 | extern const DotMatrixImage IMAGE_STATE_REWIND;
38 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/large_cursor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_LARGE_CURSOR_H
2 | #define IMAGE_LARGE_CURSOR_H
3 |
4 | #define IMAGE_LARGE_CURSOR_WIDTH 4
5 | #define IMAGE_LARGE_CURSOR_HEIGHT 7
6 |
7 | const unsigned char image_large_cursor[] =
8 | {
9 | 0x31, 0xF7, 0x37, 0x01
10 | };
11 |
12 | #endif // IMAGE_LARGE_CURSOR_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/medium_cursor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_MEDIUM_CURSOR_H
2 | #define IMAGE_MEDIUM_CURSOR_H
3 |
4 | #define IMAGE_MEDIUM_CURSOR_WIDTH 3
5 | #define IMAGE_MEDIUM_CURSOR_HEIGHT 6
6 |
7 | const unsigned char image_medium_cursor[] =
8 | {
9 | 0xD9, 0xBF, 0x00
10 | };
11 |
12 | #endif // IMAGE_MEDIUM_CURSOR_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/microsd_hor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_MICROSD_HOR_H
2 | #define IMAGE_MICROSD_HOR_H
3 |
4 | #define IMAGE_MICROSD_HOR_WIDTH 34
5 | #define IMAGE_MICROSD_HOR_HEIGHT 26
6 |
7 | const unsigned char image_microsd_hor[] =
8 | {
9 | 0xFC, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
10 | 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xF7, 0x7D, 0xFF, 0xFF, 0xDF,
11 | 0xF7, 0xFD, 0x03, 0x7F, 0xDF, 0xF7, 0xFF, 0xFF, 0x7D, 0xDF, 0x7F, 0xF0, 0xF7, 0x7D, 0xFF, 0xFF,
12 | 0xDF, 0xF7, 0xFD, 0x03, 0x7F, 0xDF, 0xF7, 0xFF, 0xFF, 0x7D, 0xDF, 0x7F, 0xF0, 0xF7, 0x7D, 0xFF,
13 | 0xFF, 0xDF, 0xF7, 0xFD, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0xFF, 0xFF,
14 | 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x8F,
15 | 0xFF, 0x3F, 0x00, 0x3F, 0xFC, 0xFF, 0x00, 0xF8, 0xE0, 0xFF, 0x01, 0xC0, 0x03, 0xFF, 0x03
16 | };
17 |
18 | #endif // IMAGE_MICROSD_HOR_H
19 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/state_ff.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_STATE_FF_H
2 | #define IMAGE_STATE_FF_H
3 |
4 | #define IMAGE_STATE_FF_WIDTH 10
5 | #define IMAGE_STATE_FF_HEIGHT 10
6 |
7 | const unsigned char image_state_ff[] =
8 | {
9 | 0x21, 0x8C, 0x71, 0xCE, 0x7B, 0xFF, 0xFF, 0xFF, 0xDE, 0x39, 0x63, 0x84, 0x00
10 | };
11 |
12 | #endif // IMAGE_STATE_FF_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/state_pause.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_STATE_PAUSE_H
2 | #define IMAGE_STATE_PAUSE_H
3 |
4 | #define IMAGE_STATE_PAUSE_WIDTH 10
5 | #define IMAGE_STATE_PAUSE_HEIGHT 10
6 |
7 | const unsigned char image_state_pause[] =
8 | {
9 | 0xCF, 0x3F, 0xFF, 0xFC, 0xF3, 0xCF, 0x3F, 0xFF, 0xFC, 0xF3, 0xCF, 0x3F, 0x0F
10 | };
11 |
12 | #endif // IMAGE_STATE_PAUSE_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/state_play.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_STATE_PLAY_H
2 | #define IMAGE_STATE_PLAY_H
3 |
4 | #define IMAGE_STATE_PLAY_WIDTH 10
5 | #define IMAGE_STATE_PLAY_HEIGHT 10
6 |
7 | const unsigned char image_state_play[] =
8 | {
9 | 0x01, 0x0C, 0x70, 0xC0, 0x03, 0x1F, 0x7C, 0xF0, 0xC0, 0x01, 0x03, 0x04, 0x00
10 | };
11 |
12 | #endif // IMAGE_STATE_PLAY_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/state_rec.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_STATE_REC_H
2 | #define IMAGE_STATE_REC_H
3 |
4 | #define IMAGE_STATE_REC_WIDTH 10
5 | #define IMAGE_STATE_REC_HEIGHT 10
6 |
7 | const unsigned char image_state_rec[] =
8 | {
9 | 0x30, 0xF0, 0xE3, 0x9F, 0x7F, 0xFF, 0xFF, 0xEF, 0x9F, 0x7F, 0xFC, 0xC0, 0x00
10 | };
11 |
12 | #endif // IMAGE_STATE_REC_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/images/state_rewind.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_STATE_REWIND_H
2 | #define IMAGE_STATE_REWIND_H
3 |
4 | #define IMAGE_STATE_REWIND_WIDTH 10
5 | #define IMAGE_STATE_REWIND_HEIGHT 10
6 |
7 | const unsigned char image_state_rewind[] =
8 | {
9 | 0x78, 0x10, 0x22, 0x50, 0x80, 0x01, 0x02, 0x08, 0xA0, 0x43, 0x86, 0xE8, 0x01
10 | };
11 |
12 | #endif // IMAGE_STATE_REWIND_H
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/main.h:
--------------------------------------------------------------------------------
1 | /* USER CODE BEGIN Header */
2 | /**
3 | ******************************************************************************
4 | * @file : main.h
5 | * @brief : Header for main.c file.
6 | * This file contains the common defines of the application.
7 | ******************************************************************************
8 | * @attention
9 | *
10 | * Copyright (c) 2023 STMicroelectronics.
11 | * All rights reserved.
12 | *
13 | * This software is licensed under terms that can be found in the LICENSE file
14 | * in the root directory of this software component.
15 | * If no LICENSE file comes with this software, it is provided AS-IS.
16 | *
17 | ******************************************************************************
18 | */
19 | /* USER CODE END Header */
20 |
21 | /* Define to prevent recursive inclusion -------------------------------------*/
22 | #ifndef __MAIN_H
23 | #define __MAIN_H
24 |
25 | #ifdef __cplusplus
26 | extern "C" {
27 | #endif
28 |
29 | /* Includes ------------------------------------------------------------------*/
30 | #include "stm32g0xx_hal.h"
31 |
32 | /* Private includes ----------------------------------------------------------*/
33 | /* USER CODE BEGIN Includes */
34 |
35 | /* USER CODE END Includes */
36 |
37 | /* Exported types ------------------------------------------------------------*/
38 | /* USER CODE BEGIN ET */
39 |
40 | /* USER CODE END ET */
41 |
42 | /* Exported constants --------------------------------------------------------*/
43 | /* USER CODE BEGIN EC */
44 | /* USER CODE END EC */
45 |
46 | /* Exported macro ------------------------------------------------------------*/
47 | /* USER CODE BEGIN EM */
48 | #define FDSKEY_VERION_MAJOR 1
49 | #define FDSKEY_VERION_MINOR 3
50 | #define FDSKEY_VERION_SUFFIX 0
51 | /* USER CODE END EM */
52 |
53 | void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
54 |
55 | /* Exported functions prototypes ---------------------------------------------*/
56 | void Error_Handler(void);
57 |
58 | /* USER CODE BEGIN EFP */
59 | void delay_us(uint16_t us);
60 | /* USER CODE END EFP */
61 |
62 | /* Private defines -----------------------------------------------------------*/
63 | #define FDS_STOP_MOTOR_Pin GPIO_PIN_2
64 | #define FDS_STOP_MOTOR_GPIO_Port GPIOA
65 | #define FDS_READY_Pin GPIO_PIN_3
66 | #define FDS_READY_GPIO_Port GPIOA
67 | #define FDS_MEDIA_SET_Pin GPIO_PIN_4
68 | #define FDS_MEDIA_SET_GPIO_Port GPIOA
69 | #define FDS_WRITABLE_MEDIA_Pin GPIO_PIN_5
70 | #define FDS_WRITABLE_MEDIA_GPIO_Port GPIOA
71 | #define FDS_READ_DATA_Pin GPIO_PIN_6
72 | #define FDS_READ_DATA_GPIO_Port GPIOA
73 | #define FDS_WRITE_DATA_Pin GPIO_PIN_7
74 | #define FDS_WRITE_DATA_GPIO_Port GPIOA
75 | #define FDS_MOTOR_ON_Pin GPIO_PIN_0
76 | #define FDS_MOTOR_ON_GPIO_Port GPIOB
77 | #define FDS_SCAN_MEDIA_Pin GPIO_PIN_1
78 | #define FDS_SCAN_MEDIA_GPIO_Port GPIOB
79 | #define FDS_SCAN_MEDIA_EXTI_IRQn EXTI0_1_IRQn
80 | #define FDS_WRITE_Pin GPIO_PIN_2
81 | #define FDS_WRITE_GPIO_Port GPIOB
82 | #define FDS_WRITE_EXTI_IRQn EXTI2_3_IRQn
83 | #define BUTTON_DOWN_Pin GPIO_PIN_12
84 | #define BUTTON_DOWN_GPIO_Port GPIOA
85 | #define BUTTON_RIGHT_Pin GPIO_PIN_15
86 | #define BUTTON_RIGHT_GPIO_Port GPIOA
87 | #define BUTTON_LEFT_Pin GPIO_PIN_1
88 | #define BUTTON_LEFT_GPIO_Port GPIOD
89 | #define BUTTON_UP_Pin GPIO_PIN_2
90 | #define BUTTON_UP_GPIO_Port GPIOD
91 | #define SD_DTCT_Pin GPIO_PIN_3
92 | #define SD_DTCT_GPIO_Port GPIOD
93 | #define SD_DTCT_EXTI_IRQn EXTI2_3_IRQn
94 | #define SD_CS_Pin GPIO_PIN_6
95 | #define SD_CS_GPIO_Port GPIOB
96 |
97 | /* USER CODE BEGIN Private defines */
98 |
99 | /* USER CODE END Private defines */
100 |
101 | #ifdef __cplusplus
102 | }
103 | #endif
104 |
105 | #endif /* __MAIN_H */
106 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/mainmenu.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_MAINMENU_H_
2 | #define INC_MAINMENU_H_
3 |
4 | #include "ff.h"
5 |
6 | #define MAIN_MENU_FONT FONT_STANDARD_6
7 | #define MAIN_MENU_VERSION_FONT FONT_ULTRASLIMFONT_8
8 |
9 | typedef enum
10 | {
11 | MAIN_MENU_BROWSE_ROMS,
12 | MAIN_MENU_NEW_ROM,
13 | MAIN_MENU_SETTINGS,
14 | MAIN_MENU_SERVICE_MENU,
15 | MAIN_MENU_NONE
16 | } MAIN_MENU_SELECTION;
17 |
18 | void main_menu_loop();
19 |
20 | #endif /* INC_MAINMENU_H_ */
21 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/md5.h:
--------------------------------------------------------------------------------
1 | #ifndef MD5_H
2 | #define MD5_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | typedef struct{
10 | uint64_t size; // Size of input in bytes
11 | uint32_t buffer[4]; // Current accumulation of hash
12 | uint8_t input[64]; // Input to be used in the next step
13 | uint8_t digest[16]; // Result of algorithm
14 | }MD5Context;
15 |
16 | void md5Init(MD5Context *ctx);
17 | void md5Update(MD5Context *ctx, uint8_t *input, size_t input_len);
18 | void md5Finalize(MD5Context *ctx);
19 | void md5Step(uint32_t *buffer, uint32_t *input);
20 |
21 | void md5String(char *input, uint8_t *result);
22 | void md5File(FILE *file, uint8_t *result);
23 |
24 | #endif
25 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/newdisk.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_NEWDISK_H_
2 | #define INC_NEWDISK_H_
3 |
4 | #include "ff.h"
5 |
6 | #define NEW_DISK_FILENAME_LENGTH 10
7 | #define NEW_DISK_FILENAME_START_CHAR 32
8 | #define NEW_DISK_FILENAME_END_CHAR 90
9 |
10 | FRESULT new_disk();
11 |
12 | #endif /* INC_NEWDISK_H_ */
13 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/oled.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_OLED_H_
2 | #define INC_OLED_H_
3 |
4 | #include "main.h"
5 | #include "fonts.h"
6 | #include "images.h"
7 |
8 | #define OLED_I2C hi2c1
9 | #define OLED_ADDRESS 0x3C
10 |
11 | #define OLED_WIDTH 128
12 | #define OLED_HEIGHT 32
13 | #define OLED_PADDING_LEFT 0
14 |
15 | #define OLED_TIMEOUT 100
16 |
17 | typedef enum __attribute__ ((__packed__))
18 | {
19 | OLED_CONTROLLER_SSD1306 = 0,
20 | OLED_CONTROLLER_SH1106
21 | } OLED_CONTROLLER;
22 |
23 | #define OLED_COMMAND_LAST 0x00
24 | #define OLED_COMMAND_NOT_LAST 0x80
25 | #define OLED_COMMAND_DATA 0x40
26 |
27 | #define OLED_CMD_SET_COLUMN_LOW(column) ((column) & 0xF)
28 | #define OLED_CMD_SET_COLUMN_HIGH(column) (0x10 | ((column) >> 8))
29 | #define OLED_CMD_SET_PUMP_VOLTAGE_6_4 0x30
30 | #define OLED_CMD_SET_PUMP_VOLTAGE_7_4 0x31
31 | #define OLED_CMD_SET_PUMP_VOLTAGE_8_0 0x32
32 | #define OLED_CMD_SET_PUMP_VOLTAGE_9_0 0x33
33 | #define OLED_CMD_SET_START_LINE(line) (0x40 | ((line) & 0x3F))
34 | #define OLED_CMD_SET_CONTRAST_MODE 0x81
35 | #define OLED_CMD_SET_HORIZONTAL_FLIP_OFF 0xA0
36 | #define OLED_CMD_SET_HORIZONTAL_FLIP_ON 0xA1
37 | #define OLED_CMD_SET_ENTIRE_OFF 0xA4
38 | #define OLED_CMD_SET_ENTIRE_ON 0xA5
39 | #define OLED_CMD_SET_REVERSE_OFF 0xA6
40 | #define OLED_CMD_SET_REVERSE_ON 0xA7
41 | #define OLED_CMD_SET_MULTIPLEX_RATION_MODE 0xA8
42 | #define OLED_CMD_SET_OFF 0xAE
43 | #define OLED_CMD_SET_ON 0xAF
44 | #define OLED_CMD_SET_PAGE(page) (0xB0 | ((page) & 7))
45 | #define OLED_CMD_SET_VERTICAL_FLIP_OFF 0xC0
46 | #define OLED_CMD_SET_VERTICAL_FLIP_ON 0xC8
47 | #define OLED_CMD_SET_CLOCK_RATIO_MODE 0xD5
48 | #define OLED_CMD_SET_PADS_MODE 0xDA
49 | #define OLED_CMD_SET_PADS_MODE_SEQUENTIAL 0x02
50 | #define OLED_CMD_SET_PADS_MODE_ALTERNATIVE 0x12
51 |
52 | void oled_init(OLED_CONTROLLER oled_controller, uint8_t rotate_screen, uint8_t reverse, uint8_t contrast);
53 | uint8_t* oled_pixel(int x, int y);
54 | void oled_set_pixel(int x, int y, uint8_t value);
55 | uint8_t oled_get_pixel(int x, int y);
56 | HAL_StatusTypeDef oled_send_commands(int len, ...);
57 | HAL_StatusTypeDef oled_send_command(uint8_t command);
58 | HAL_StatusTypeDef oled_write_data(uint8_t *data, uint8_t len);
59 | HAL_StatusTypeDef oled_update(uint8_t start_page, uint8_t end_page);
60 | HAL_StatusTypeDef oled_update_full();
61 | HAL_StatusTypeDef oled_update_invisible();
62 | HAL_StatusTypeDef oled_set_line(int y);
63 | uint8_t oled_get_line();
64 |
65 | void oled_draw_rectangle(int x1, int y1, int x2, int y2, uint8_t fill, uint8_t value);
66 | void oled_draw_line(int x1, int y1, int x2, int y2, uint8_t value);
67 | void oled_copy_to_invisible();
68 | void oled_switch_to_invisible();
69 | void oled_draw_text(const DotMatrixFont *font, char* text, int x, int y, uint8_t replace, uint8_t invert);
70 | void oled_draw_text_cropped(const DotMatrixFont *font, char* text, int x, int y,
71 | uint8_t start_x, uint8_t max_width,
72 | uint8_t start_y, uint8_t max_height,
73 | uint8_t replace, uint8_t invert);
74 | int oled_get_text_length(const DotMatrixFont *font, char *text);
75 | void oled_draw_image(const DotMatrixImage *img, int x, int y, uint8_t replace, uint8_t invert);
76 | void oled_draw_image_cropped(const DotMatrixImage *img, int x, int y,
77 | uint8_t start_x, uint8_t max_width,
78 | uint8_t start_y, uint8_t max_height,
79 | uint8_t replace, uint8_t invert);
80 | void oled_rotate(uint8_t rotate_screen);
81 |
82 | extern I2C_HandleTypeDef OLED_I2C;
83 |
84 | #endif /* INC_OLED_H_ */
85 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/servicemenu.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SERVICEMENU_H_
2 | #define INC_SERVICEMENU_H_
3 |
4 | #include
5 | #include "main.h"
6 | #include "oled.h"
7 |
8 | #define SERVICE_SETTINGS_SIGNATURE "SFDSKEY"
9 |
10 | #define SERVICE_SETTINGS_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 3)
11 | #define HARDWARE_VERSION_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 4)
12 |
13 | #define SERVICE_SETTINGS_ITEM_COUNT 20
14 |
15 | #define DISK_LABEL "FDSKey"
16 |
17 | typedef enum
18 | {
19 | SERVICE_SETTING_OLED_CONTROLLER = 0,
20 | SERVICE_SETTING_VERSION,
21 | SERVICE_SETTING_COMMIT,
22 | SERVICE_SETTING_BUILD_DATE,
23 | SERVICE_SETTING_BUILD_TIME,
24 | SERVICE_SETTING_BL_COMMIT,
25 | SERVICE_SETTING_SD_CAPACITY,
26 | SERVICE_SETTING_FAT_SIZE,
27 | SERVICE_SETTING_FAT_FREE,
28 | SERVICE_SETTING_FILE_SYSTEM,
29 | SERVICE_SETTING_SD_SPI_SPEED,
30 | SERVICE_SETTING_SD_MANUFACTURER_ID,
31 | SERVICE_SETTING_SD_OEM_ID,
32 | SERVICE_SETTING_SD_PROD_NAME,
33 | SERVICE_SETTING_SD_PROD_REV,
34 | SERVICE_SETTING_SD_PROD_SN,
35 | SERVICE_SETTING_SD_PROD_MANUFACT_YEAR,
36 | SERVICE_SETTING_SD_PROD_MANUFACT_MONTH,
37 | SERVICE_SETTING_SD_FORMAT,
38 | SERVICE_SETTING_BL_UPDATE
39 | } SERVICE_SETTING_ID;
40 |
41 | typedef struct __attribute__((packed))
42 | {
43 | char sig[sizeof(SERVICE_SETTINGS_SIGNATURE) + 1];
44 | OLED_CONTROLLER oled_controller;
45 | } FDSKEY_SERVICE_SETTINGS;
46 |
47 | extern FDSKEY_SERVICE_SETTINGS fdskey_service_settings;
48 |
49 | typedef struct __attribute__((packed))
50 | {
51 | uint16_t major;
52 | uint8_t minor;
53 | char suffix;
54 | char bootloader_commit[28];
55 | } FDSKEY_HARDWARE_VERSION;
56 |
57 | extern FDSKEY_HARDWARE_VERSION fdskey_hw_version;
58 |
59 | void service_settings_load();
60 | HAL_StatusTypeDef service_settings_save();
61 | void service_menu();
62 | uint8_t sd_format();
63 |
64 | #endif /* INC_SERVICEMENU_H_ */
65 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/settings.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SETTINGS_H_
2 | #define INC_SETTINGS_H_
3 |
4 | #include
5 | #include "main.h"
6 | #include "ff.h"
7 |
8 | #define SETTINGS_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 2) // reserved two pages
9 | #define SETTINGS_SIGNATURE "FDSKEY"
10 | #define SETTINGS_FONT FONT_SLIMFONT_8
11 | #define SETTINGS_AUTOSAVE_TIME_MAX 10
12 | #define SETTINGS_BRIGHTNESS_MAX 10
13 | #define SETTINGS_AUTO_OFF_SCREEN_TIME_MAX 300
14 | #define SETTINGS_AUTO_OFF_SCREEN_TIME_STEP 5
15 |
16 | #define SETTINGS_ITEM_COUNT 10
17 | typedef enum
18 | {
19 | SETTING_FAST_REWIND = 0,
20 | SETTING_REMEMBER_LAST_STATE,
21 | //SETTING_AUTOSAVE_TIME,
22 | SETTING_BACKUP_ORIGINAL,
23 | SETTING_HIDE_NON_FDS,
24 | SETTING_HIDE_EXTENSIONS,
25 | SETTING_HIDE_HIDDEN,
26 | SETTING_BRIGHTNESS,
27 | SETTING_INVERT_SCREEN,
28 | SETTING_LEFTY_MODE,
29 | SETTING_AUTO_OFF_SCREEN_TIME
30 | } SETTING_ID;
31 |
32 | typedef enum __attribute__ ((__packed__))
33 | {
34 | SAVES_REWRITE = 0,
35 | SAVES_REWRITE_BACKUP = 1,
36 | SAVES_EVERDRIVE
37 | } SAVES_MODE;
38 |
39 | typedef enum __attribute__ ((__packed__))
40 | {
41 | REMEMBER_LAST_STATE_NONE = 0,
42 | REMEMBER_LAST_STATE_BROWSER,
43 | REMEMBER_LAST_STATE_ROM
44 | } REMEMBER_LAST_STATE_MODE;
45 |
46 | typedef enum __attribute__ ((__packed__))
47 | {
48 | LAST_STATE_MAIN_MENU = 0,
49 | LAST_STATE_BROWSER,
50 | LAST_STATE_ROM
51 | } LAST_STATE;
52 |
53 | typedef enum __attribute__ ((__packed__))
54 | {
55 | REWIND_SPEED_ORIGINAL = 0,
56 | REWIND_SPEED_FAST,
57 | REWIND_SPEED_TURBO
58 | } REWIND_SPEED;
59 |
60 | typedef struct __attribute__ ((packed))
61 | {
62 | char sig[sizeof(SETTINGS_SIGNATURE) + 1];
63 | uint8_t version;
64 | REWIND_SPEED rewind_speed;
65 | REMEMBER_LAST_STATE_MODE remember_last_state_mode;
66 | LAST_STATE last_state;
67 | uint8_t hide_non_fds;
68 | uint8_t hide_extensions;
69 | uint8_t hide_hidden;
70 | uint16_t autosave_time;
71 | uint8_t brightness;
72 | uint8_t lefty_mode;
73 | uint8_t invert_screen;
74 | int16_t auto_off_screen_time;
75 | SAVES_MODE backup_original;
76 | char last_directory[3584];
77 | char last_file[FF_MAX_LFN + 1 /* 255 + 1 */];
78 | } FDSKEY_SETTINGS;
79 |
80 | void settings_load();
81 | HAL_StatusTypeDef settings_save();
82 | void settings_menu();
83 |
84 | extern FDSKEY_SETTINGS fdskey_settings;
85 |
86 | #endif /* INC_SETTINGS_H_ */
87 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/sideselect.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SIDESELECT_H_
2 | #define INC_SIDESELECT_H_
3 |
4 | #include "oled.h"
5 | #include "ff.h"
6 |
7 | #define SIDE_SELECT_GAME_NAME_FONT FONT_SLIMFONT_8
8 | #define SIDE_SELECT_SIDE_NAME_FONT FONT_VERDANA_14_BOLD
9 | #define SIDE_SELECT_HORIZONTAL_SCROLL_SPEED 2
10 | #define SIDE_SELECT_HORIZONTAL_SCROLL_PAUSE 24
11 |
12 | void fds_side_select(char *directory, FILINFO *fno, uint8_t load_first);
13 | DotMatrixImage* side_select_get_disk_image(uint8_t side, uint8_t side_count);
14 |
15 | #endif /* INC_SIDESELECT_H_ */
16 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/splash.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SPLASH_H_
2 | #define INC_SPLASH_H_
3 |
4 | #include "ff.h"
5 | #include "sdcard.h"
6 | #include "oled.h"
7 |
8 | #define SPLASH_LOADING_IMAGE IMAGE_MICROSD_HOR
9 | #define SPLASH_REGULAR_FONT FONT_STANDARD_6
10 | #define SPLASH_ERROR_TITLE_FONT FONT_VERDANA_12_BOLD
11 | #define SPLASH_ERROR_FONT FONT_STANDARD_6
12 |
13 | void show_message(char *text, uint8_t wait);
14 | void show_loading_screen();
15 | void show_saving_screen();
16 | void show_error_screen(char *text, uint8_t fatal);
17 | void show_error_screen_fr(FRESULT fr, uint8_t fatal);
18 | void show_error_screen_sd(SD_RESULT r, uint8_t fatal);
19 |
20 | extern I2C_HandleTypeDef OLED_I2C;
21 |
22 | #endif /* INC_SPLASH_H_ */
23 |
--------------------------------------------------------------------------------
/FdsKey/Core/Inc/stm32g0xx_it.h:
--------------------------------------------------------------------------------
1 | /* USER CODE BEGIN Header */
2 | /**
3 | ******************************************************************************
4 | * @file stm32g0xx_it.h
5 | * @brief This file contains the headers of the interrupt handlers.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2023 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 | /* USER CODE END Header */
19 |
20 | /* Define to prevent recursive inclusion -------------------------------------*/
21 | #ifndef __STM32G0xx_IT_H
22 | #define __STM32G0xx_IT_H
23 |
24 | #ifdef __cplusplus
25 | extern "C" {
26 | #endif
27 |
28 | /* Private includes ----------------------------------------------------------*/
29 | /* USER CODE BEGIN Includes */
30 |
31 | /* USER CODE END Includes */
32 |
33 | /* Exported types ------------------------------------------------------------*/
34 | /* USER CODE BEGIN ET */
35 |
36 | /* USER CODE END ET */
37 |
38 | /* Exported constants --------------------------------------------------------*/
39 | /* USER CODE BEGIN EC */
40 |
41 | /* USER CODE END EC */
42 |
43 | /* Exported macro ------------------------------------------------------------*/
44 | /* USER CODE BEGIN EM */
45 |
46 | /* USER CODE END EM */
47 |
48 | /* Exported functions prototypes ---------------------------------------------*/
49 | void NMI_Handler(void);
50 | void HardFault_Handler(void);
51 | void SVC_Handler(void);
52 | void PendSV_Handler(void);
53 | void SysTick_Handler(void);
54 | void EXTI0_1_IRQHandler(void);
55 | void EXTI2_3_IRQHandler(void);
56 | void DMA1_Channel1_IRQHandler(void);
57 | void DMA1_Channel2_3_IRQHandler(void);
58 | void TIM1_BRK_UP_TRG_COM_IRQHandler(void);
59 | /* USER CODE BEGIN EFP */
60 |
61 | /* USER CODE END EFP */
62 |
63 | #ifdef __cplusplus
64 | }
65 | #endif
66 |
67 | #endif /* __STM32G0xx_IT_H */
68 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/confirm.c:
--------------------------------------------------------------------------------
1 | #include "main.h"
2 | #include "oled.h"
3 | #include "buttons.h"
4 |
5 | static void confirm_draw(char *text, uint8_t selection)
6 | {
7 | int line = oled_get_line() + OLED_HEIGHT;
8 |
9 | // clear screen
10 | oled_draw_rectangle(0, line, OLED_WIDTH - 1, line + OLED_HEIGHT - 1, 1, 0);
11 | // title
12 | oled_draw_text(&FONT_STANDARD_6, text,
13 | OLED_WIDTH / 2 - oled_get_text_length(&FONT_STANDARD_6, text) / 2, line + 0,
14 | 0, 0);
15 |
16 | oled_draw_text(&FONT_GAMEGIRL_CLASSIC_6, "NO",
17 | OLED_WIDTH / 2 - 12, line + 11,
18 | 0, 0);
19 | oled_draw_text(&FONT_GAMEGIRL_CLASSIC_6, "YES",
20 | OLED_WIDTH / 2 - 12, line + 21,
21 | 0, 0);
22 |
23 | oled_draw_image(&IMAGE_MEDIUM_CURSOR, OLED_WIDTH / 2 - 18, line + 12 + 10 * selection, 0, 0);
24 |
25 | oled_update_invisible();
26 | oled_switch_to_invisible();
27 | }
28 |
29 | uint8_t confirm(char *text)
30 | {
31 | uint8_t selection = 0;
32 | confirm_draw(text, selection);
33 | while (1)
34 | {
35 | if (button_up_newpress())
36 | {
37 | selection = 0;
38 | confirm_draw(text, selection);
39 | }
40 | if (button_down_newpress())
41 | {
42 | selection = 1;
43 | confirm_draw(text, selection);
44 | }
45 | if (button_left_newpress())
46 | return 0;
47 | if (button_right_newpress())
48 | return selection;
49 | button_check_screen_off();
50 | HAL_Delay(1);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/fatfs/diskio.c:
--------------------------------------------------------------------------------
1 | /*-----------------------------------------------------------------------*/
2 | /* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */
3 | /*-----------------------------------------------------------------------*/
4 | /* If a working storage control module is available, it should be */
5 | /* attached to the FatFs via a glue function rather than modifying it. */
6 | /* This is an example of glue functions to attach various exsisting */
7 | /* storage control modules to the FatFs module with a defined API. */
8 | /*-----------------------------------------------------------------------*/
9 |
10 | #include "ff.h" /* Obtains integer types */
11 | #include "diskio.h" /* Declarations of disk functions */
12 | #include "sdcard.h"
13 | #include "splash.h"
14 |
15 | /* Definitions of physical drive number for each drive */
16 | #define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
17 | #define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */
18 | #define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */
19 |
20 |
21 | /*-----------------------------------------------------------------------*/
22 | /* Get Drive Status */
23 | /*-----------------------------------------------------------------------*/
24 |
25 | DSTATUS disk_status (
26 | BYTE pdrv /* Physical drive nmuber to identify the drive */
27 | )
28 | {
29 | return RES_OK;
30 | }
31 |
32 |
33 |
34 | /*-----------------------------------------------------------------------*/
35 | /* Inidialize a Drive */
36 | /*-----------------------------------------------------------------------*/
37 |
38 | DSTATUS disk_initialize (
39 | BYTE pdrv /* Physical drive nmuber to identify the drive */
40 | )
41 | {
42 | SD_RESULT r = SD_init_try_speed();
43 | if (r != SD_RES_OK)
44 | show_error_screen_sd(r, 1);
45 | return RES_OK;
46 | }
47 |
48 |
49 |
50 | /*-----------------------------------------------------------------------*/
51 | /* Read Sector(s) */
52 | /*-----------------------------------------------------------------------*/
53 |
54 | DRESULT disk_read (
55 | BYTE pdrv, /* Physical drive nmuber to identify the drive */
56 | BYTE *buff, /* Data buffer to store read data */
57 | LBA_t sector, /* Start sector in LBA */
58 | UINT count /* Number of sectors to read */
59 | )
60 | {
61 | SD_RESULT r;
62 | if (count == 1)
63 | {
64 | r = SD_read_single_block(sector, buff);
65 | if (r != SD_RES_OK)
66 | show_error_screen_sd(r, 1);
67 | } else {
68 | r = SD_read_begin(sector);
69 | if (r != SD_RES_OK)
70 | show_error_screen_sd(r, 1);
71 | while (count) {
72 | r = SD_read_data(buff);
73 | if (r != SD_RES_OK)
74 | show_error_screen_sd(r, 1);
75 | buff += FF_MIN_SS;
76 | count--;
77 | }
78 | r = SD_read_end();
79 | if (r != SD_RES_OK)
80 | show_error_screen_sd(r, 1);
81 | }
82 | return RES_OK;
83 | }
84 |
85 |
86 |
87 | /*-----------------------------------------------------------------------*/
88 | /* Write Sector(s) */
89 | /*-----------------------------------------------------------------------*/
90 |
91 | #if FF_FS_READONLY == 0
92 |
93 | DRESULT disk_write (
94 | BYTE pdrv, /* Physical drive nmuber to identify the drive */
95 | const BYTE *buff, /* Data to be written */
96 | LBA_t sector, /* Start sector in LBA */
97 | UINT count /* Number of sectors to write */
98 | )
99 | {
100 | SD_RESULT r;
101 | if (count == 1)
102 | {
103 | r = SD_write_single_block(sector, buff);
104 | if (r != SD_RES_OK)
105 | show_error_screen_sd(r, 1);
106 | } else {
107 | r = SD_write_begin(sector);
108 | if (r != SD_RES_OK)
109 | show_error_screen_sd(r, 1);
110 | while (count) {
111 | r = SD_write_data(buff);
112 | if (r != SD_RES_OK)
113 | show_error_screen_sd(r, 1);
114 | buff += FF_MIN_SS;
115 | count--;
116 | }
117 | r = SD_write_end();
118 | if (r != SD_RES_OK)
119 | show_error_screen_sd(r, 1);
120 | }
121 | return RES_OK;
122 | }
123 |
124 | #endif
125 |
126 |
127 | /*-----------------------------------------------------------------------*/
128 | /* Miscellaneous Functions */
129 | /*-----------------------------------------------------------------------*/
130 |
131 | DRESULT disk_ioctl (
132 | BYTE pdrv, /* Physical drive nmuber (0..) */
133 | BYTE cmd, /* Control code */
134 | void *buff /* Buffer to send/receive control data */
135 | )
136 | {
137 | switch (cmd)
138 | {
139 | case GET_SECTOR_COUNT:
140 | *((DWORD*)buff) = SD_read_capacity() / FF_MIN_SS;
141 | return RES_OK;
142 | case CTRL_SYNC:
143 | return RES_OK;
144 | }
145 | return RES_ERROR;
146 | }
147 |
148 | DWORD get_fattime (void) /* Get current time */
149 | {
150 | return 0;
151 | }
152 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/fonts.c:
--------------------------------------------------------------------------------
1 | #include "fonts.h"
2 | #include "fonts/fontdata.h"
3 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/images.c:
--------------------------------------------------------------------------------
1 | #include "images.h"
2 | #include "images/imagedata.h"
3 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/syscalls.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file syscalls.c
4 | * @author Auto-generated by STM32CubeIDE
5 | * @brief STM32CubeIDE Minimal System calls file
6 | *
7 | * For more information about which c-functions
8 | * need which of these lowlevel functions
9 | * please consult the Newlib libc-manual
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2020-2022 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes */
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 |
33 |
34 | /* Variables */
35 | extern int __io_putchar(int ch) __attribute__((weak));
36 | extern int __io_getchar(void) __attribute__((weak));
37 |
38 |
39 | char *__env[1] = { 0 };
40 | char **environ = __env;
41 |
42 |
43 | /* Functions */
44 | void initialise_monitor_handles()
45 | {
46 | }
47 |
48 | int _getpid(void)
49 | {
50 | return 1;
51 | }
52 |
53 | int _kill(int pid, int sig)
54 | {
55 | (void)pid;
56 | (void)sig;
57 | errno = EINVAL;
58 | return -1;
59 | }
60 |
61 | void _exit (int status)
62 | {
63 | _kill(status, -1);
64 | while (1) {} /* Make sure we hang here */
65 | }
66 |
67 | __attribute__((weak)) int _read(int file, char *ptr, int len)
68 | {
69 | (void)file;
70 | int DataIdx;
71 |
72 | for (DataIdx = 0; DataIdx < len; DataIdx++)
73 | {
74 | *ptr++ = __io_getchar();
75 | }
76 |
77 | return len;
78 | }
79 |
80 | __attribute__((weak)) int _write(int file, char *ptr, int len)
81 | {
82 | (void)file;
83 | int DataIdx;
84 |
85 | for (DataIdx = 0; DataIdx < len; DataIdx++)
86 | {
87 | __io_putchar(*ptr++);
88 | }
89 | return len;
90 | }
91 |
92 | int _close(int file)
93 | {
94 | (void)file;
95 | return -1;
96 | }
97 |
98 |
99 | int _fstat(int file, struct stat *st)
100 | {
101 | (void)file;
102 | st->st_mode = S_IFCHR;
103 | return 0;
104 | }
105 |
106 | int _isatty(int file)
107 | {
108 | (void)file;
109 | return 1;
110 | }
111 |
112 | int _lseek(int file, int ptr, int dir)
113 | {
114 | (void)file;
115 | (void)ptr;
116 | (void)dir;
117 | return 0;
118 | }
119 |
120 | int _open(char *path, int flags, ...)
121 | {
122 | (void)path;
123 | (void)flags;
124 | /* Pretend like we always fail */
125 | return -1;
126 | }
127 |
128 | int _wait(int *status)
129 | {
130 | (void)status;
131 | errno = ECHILD;
132 | return -1;
133 | }
134 |
135 | int _unlink(char *name)
136 | {
137 | (void)name;
138 | errno = ENOENT;
139 | return -1;
140 | }
141 |
142 | int _times(struct tms *buf)
143 | {
144 | (void)buf;
145 | return -1;
146 | }
147 |
148 | int _stat(char *file, struct stat *st)
149 | {
150 | (void)file;
151 | st->st_mode = S_IFCHR;
152 | return 0;
153 | }
154 |
155 | int _link(char *old, char *new)
156 | {
157 | (void)old;
158 | (void)new;
159 | errno = EMLINK;
160 | return -1;
161 | }
162 |
163 | int _fork(void)
164 | {
165 | errno = EAGAIN;
166 | return -1;
167 | }
168 |
169 | int _execve(char *name, char **argv, char **env)
170 | {
171 | (void)name;
172 | (void)argv;
173 | (void)env;
174 | errno = ENOMEM;
175 | return -1;
176 | }
177 |
--------------------------------------------------------------------------------
/FdsKey/Core/Src/sysmem.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file sysmem.c
4 | * @author Generated by STM32CubeIDE
5 | * @brief STM32CubeIDE System Memory calls file
6 | *
7 | * For more information about which C functions
8 | * need which of these lowlevel functions
9 | * please consult the newlib libc manual
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2022 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes */
24 | #include
25 | #include
26 |
27 | /**
28 | * Pointer to the current high watermark of the heap usage
29 | */
30 | static uint8_t *__sbrk_heap_end = NULL;
31 |
32 | /**
33 | * @brief _sbrk() allocates memory to the newlib heap and is used by malloc
34 | * and others from the C library
35 | *
36 | * @verbatim
37 | * ############################################################################
38 | * # .data # .bss # newlib heap # MSP stack #
39 | * # # # # Reserved by _Min_Stack_Size #
40 | * ############################################################################
41 | * ^-- RAM start ^-- _end _estack, RAM end --^
42 | * @endverbatim
43 | *
44 | * This implementation starts allocating at the '_end' linker symbol
45 | * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack
46 | * The implementation considers '_estack' linker symbol to be RAM end
47 | * NOTE: If the MSP stack, at any point during execution, grows larger than the
48 | * reserved size, please increase the '_Min_Stack_Size'.
49 | *
50 | * @param incr Memory size
51 | * @return Pointer to allocated memory
52 | */
53 | void *_sbrk(ptrdiff_t incr)
54 | {
55 | extern uint8_t _end; /* Symbol defined in the linker script */
56 | extern uint8_t _estack; /* Symbol defined in the linker script */
57 | extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
58 | const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
59 | const uint8_t *max_heap = (uint8_t *)stack_limit;
60 | uint8_t *prev_heap_end;
61 |
62 | /* Initialize heap end at first call */
63 | if (NULL == __sbrk_heap_end)
64 | {
65 | __sbrk_heap_end = &_end;
66 | }
67 |
68 | /* Protect heap from growing into the reserved MSP stack */
69 | if (__sbrk_heap_end + incr > max_heap)
70 | {
71 | errno = ENOMEM;
72 | return (void *)-1;
73 | }
74 |
75 | prev_heap_end = __sbrk_heap_end;
76 | __sbrk_heap_end += incr;
77 |
78 | return (void *)prev_heap_end;
79 | }
80 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/CMSIS/Device/ST/STM32G0xx/Include/system_stm32g0xx.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file system_stm32g0xx.h
4 | * @author MCD Application Team
5 | * @brief CMSIS Cortex-M0+ Device System Source File for STM32G0xx devices.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018-2021 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 | /** @addtogroup CMSIS
19 | * @{
20 | */
21 |
22 | /** @addtogroup stm32g0xx_system
23 | * @{
24 | */
25 |
26 | /**
27 | * @brief Define to prevent recursive inclusion
28 | */
29 | #ifndef SYSTEM_STM32G0XX_H
30 | #define SYSTEM_STM32G0XX_H
31 |
32 | #ifdef __cplusplus
33 | extern "C" {
34 | #endif
35 |
36 | /** @addtogroup STM32G0xx_System_Includes
37 | * @{
38 | */
39 |
40 | /**
41 | * @}
42 | */
43 |
44 |
45 | /** @addtogroup STM32G0xx_System_Exported_types
46 | * @{
47 | */
48 | /* This variable is updated in three ways:
49 | 1) by calling CMSIS function SystemCoreClockUpdate()
50 | 2) by calling HAL API function HAL_RCC_GetSysClockFreq()
51 | 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
52 | Note: If you use this function to configure the system clock; then there
53 | is no need to call the 2 first functions listed above, since SystemCoreClock
54 | variable is updated automatically.
55 | */
56 | extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
57 |
58 | extern const uint32_t AHBPrescTable[16]; /*!< AHB prescalers table values */
59 | extern const uint32_t APBPrescTable[8]; /*!< APB prescalers table values */
60 |
61 | /**
62 | * @}
63 | */
64 |
65 | /** @addtogroup STM32G0xx_System_Exported_Constants
66 | * @{
67 | */
68 |
69 | /**
70 | * @}
71 | */
72 |
73 | /** @addtogroup STM32G0xx_System_Exported_Macros
74 | * @{
75 | */
76 |
77 | /**
78 | * @}
79 | */
80 |
81 | /** @addtogroup STM32G0xx_System_Exported_Functions
82 | * @{
83 | */
84 |
85 | extern void SystemInit(void);
86 | extern void SystemCoreClockUpdate(void);
87 | /**
88 | * @}
89 | */
90 |
91 | #ifdef __cplusplus
92 | }
93 | #endif
94 |
95 | #endif /*SYSTEM_STM32G0XX_H */
96 |
97 | /**
98 | * @}
99 | */
100 |
101 | /**
102 | * @}
103 | */
104 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/CMSIS/Device/ST/STM32G0xx/LICENSE.txt:
--------------------------------------------------------------------------------
1 | This software component is provided to you as part of a software package and
2 | applicable license terms are in the Package_license file. If you received this
3 | software component outside of a package or without applicable license terms,
4 | the terms of the Apache-2.0 license shall apply.
5 | You may obtain a copy of the Apache-2.0 at:
6 | https://opensource.org/licenses/Apache-2.0
7 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/CMSIS/Include/cmsis_version.h:
--------------------------------------------------------------------------------
1 | /**************************************************************************//**
2 | * @file cmsis_version.h
3 | * @brief CMSIS Core(M) Version definitions
4 | * @version V5.0.3
5 | * @date 24. June 2019
6 | ******************************************************************************/
7 | /*
8 | * Copyright (c) 2009-2019 ARM Limited. All rights reserved.
9 | *
10 | * SPDX-License-Identifier: Apache-2.0
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the License); you may
13 | * not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | #if defined ( __ICCARM__ )
26 | #pragma system_include /* treat file as system include file for MISRA check */
27 | #elif defined (__clang__)
28 | #pragma clang system_header /* treat file as system include file */
29 | #endif
30 |
31 | #ifndef __CMSIS_VERSION_H
32 | #define __CMSIS_VERSION_H
33 |
34 | /* CMSIS Version definitions */
35 | #define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */
36 | #define __CM_CMSIS_VERSION_SUB ( 3U) /*!< [15:0] CMSIS Core(M) sub version */
37 | #define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \
38 | __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */
39 | #endif
40 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/CMSIS/Include/tz_context.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************
2 | * @file tz_context.h
3 | * @brief Context Management for Armv8-M TrustZone
4 | * @version V1.0.1
5 | * @date 10. January 2018
6 | ******************************************************************************/
7 | /*
8 | * Copyright (c) 2017-2018 Arm Limited. All rights reserved.
9 | *
10 | * SPDX-License-Identifier: Apache-2.0
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the License); you may
13 | * not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | #if defined ( __ICCARM__ )
26 | #pragma system_include /* treat file as system include file for MISRA check */
27 | #elif defined (__clang__)
28 | #pragma clang system_header /* treat file as system include file */
29 | #endif
30 |
31 | #ifndef TZ_CONTEXT_H
32 | #define TZ_CONTEXT_H
33 |
34 | #include
35 |
36 | #ifndef TZ_MODULEID_T
37 | #define TZ_MODULEID_T
38 | /// \details Data type that identifies secure software modules called by a process.
39 | typedef uint32_t TZ_ModuleId_t;
40 | #endif
41 |
42 | /// \details TZ Memory ID identifies an allocated memory slot.
43 | typedef uint32_t TZ_MemoryId_t;
44 |
45 | /// Initialize secure context memory system
46 | /// \return execution status (1: success, 0: error)
47 | uint32_t TZ_InitContextSystem_S (void);
48 |
49 | /// Allocate context memory for calling secure software modules in TrustZone
50 | /// \param[in] module identifies software modules called from non-secure mode
51 | /// \return value != 0 id TrustZone memory slot identifier
52 | /// \return value 0 no memory available or internal error
53 | TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module);
54 |
55 | /// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S
56 | /// \param[in] id TrustZone memory slot identifier
57 | /// \return execution status (1: success, 0: error)
58 | uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id);
59 |
60 | /// Load secure context (called on RTOS thread context switch)
61 | /// \param[in] id TrustZone memory slot identifier
62 | /// \return execution status (1: success, 0: error)
63 | uint32_t TZ_LoadContext_S (TZ_MemoryId_t id);
64 |
65 | /// Store secure context (called on RTOS thread context switch)
66 | /// \param[in] id TrustZone memory slot identifier
67 | /// \return execution status (1: success, 0: error)
68 | uint32_t TZ_StoreContext_S (TZ_MemoryId_t id);
69 |
70 | #endif // TZ_CONTEXT_H
71 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_hal_flash_ex.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_flash_ex.h
4 | * @author MCD Application Team
5 | * @brief Header file of FLASH HAL Extended module.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file in
13 | * the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | ******************************************************************************
16 | */
17 |
18 | /* Define to prevent recursive inclusion -------------------------------------*/
19 | #ifndef STM32G0xx_HAL_FLASH_EX_H
20 | #define STM32G0xx_HAL_FLASH_EX_H
21 |
22 | #ifdef __cplusplus
23 | extern "C" {
24 | #endif
25 |
26 | /* Includes ------------------------------------------------------------------*/
27 | #include "stm32g0xx_hal_def.h"
28 |
29 | /** @addtogroup STM32G0xx_HAL_Driver
30 | * @{
31 | */
32 |
33 | /** @addtogroup FLASHEx
34 | * @{
35 | */
36 |
37 | /* Exported types ------------------------------------------------------------*/
38 | /* Exported constants --------------------------------------------------------*/
39 | /** @defgroup FLASHEx_Exported_Constants FLASH Exported Constants
40 | * @{
41 | */
42 | /** @defgroup FLASHEx_Empty_Check FLASHEx Empty Check
43 | * @{
44 | */
45 | #define FLASH_PROG_NOT_EMPTY 0x00000000u /*!< 1st location in Flash is programmed */
46 | #define FLASH_PROG_EMPTY FLASH_ACR_PROGEMPTY /*!< 1st location in Flash is empty */
47 | /**
48 | * @}
49 | */
50 | /**
51 | * @}
52 | */
53 |
54 | /* Exported macro ------------------------------------------------------------*/
55 | /* Exported functions --------------------------------------------------------*/
56 | /** @addtogroup FLASHEx_Exported_Functions
57 | * @{
58 | */
59 |
60 | /* Extended Program operation functions *************************************/
61 | /** @addtogroup FLASHEx_Exported_Functions_Group1
62 | * @{
63 | */
64 | HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);
65 | HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);
66 | void HAL_FLASHEx_EnableDebugger(void);
67 | void HAL_FLASHEx_DisableDebugger(void);
68 | uint32_t HAL_FLASHEx_FlashEmptyCheck(void);
69 | void HAL_FLASHEx_ForceFlashEmpty(uint32_t FlashEmpty);
70 | #if defined(FLASH_SECURABLE_MEMORY_SUPPORT)
71 | void HAL_FLASHEx_EnableSecMemProtection(uint32_t Banks);
72 | #endif /* FLASH_SECURABLE_MEMORY_SUPPORT */
73 | HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);
74 | void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);
75 | /**
76 | * @}
77 | */
78 |
79 | /**
80 | * @}
81 | */
82 |
83 | /* Private macros ------------------------------------------------------------*/
84 | /** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants
85 | * @{
86 | */
87 | #define FLASH_PCROP_GRANULARITY_OFFSET 9u /*!< FLASH Code Readout Protection granularity offset */
88 | #define FLASH_PCROP_GRANULARITY (1UL << FLASH_PCROP_GRANULARITY_OFFSET) /*!< FLASH Code Readout Protection granularity, 512 Bytes */
89 | /**
90 | * @}
91 | */
92 |
93 |
94 | /** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros
95 | * @{
96 | */
97 | #define IS_FLASH_EMPTY_CHECK(__VALUE__) (((__VALUE__) == FLASH_PROG_EMPTY) || ((__VALUE__) == FLASH_PROG_NOT_EMPTY))
98 | void FLASH_PageErase(uint32_t Banks, uint32_t Page);
99 | /**
100 | * @}
101 | */
102 |
103 | /**
104 | * @}
105 | */
106 |
107 | /**
108 | * @}
109 | */
110 |
111 | #ifdef __cplusplus
112 | }
113 | #endif
114 |
115 | #endif /* STM32G0xx_HAL_FLASH_EX_H */
116 |
117 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_hal_spi_ex.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_spi_ex.h
4 | * @author MCD Application Team
5 | * @brief Header file of SPI HAL Extended module.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 |
19 | /* Define to prevent recursive inclusion -------------------------------------*/
20 | #ifndef STM32G0xx_HAL_SPI_EX_H
21 | #define STM32G0xx_HAL_SPI_EX_H
22 |
23 | #ifdef __cplusplus
24 | extern "C" {
25 | #endif
26 |
27 | /* Includes ------------------------------------------------------------------*/
28 | #include "stm32g0xx_hal_def.h"
29 |
30 | /** @addtogroup STM32G0xx_HAL_Driver
31 | * @{
32 | */
33 |
34 | /** @addtogroup SPIEx
35 | * @{
36 | */
37 |
38 | /* Exported types ------------------------------------------------------------*/
39 | /* Exported constants --------------------------------------------------------*/
40 | /* Exported macros -----------------------------------------------------------*/
41 | /* Exported functions --------------------------------------------------------*/
42 | /** @addtogroup SPIEx_Exported_Functions
43 | * @{
44 | */
45 |
46 | /* Initialization and de-initialization functions ****************************/
47 | /* IO operation functions *****************************************************/
48 | /** @addtogroup SPIEx_Exported_Functions_Group1
49 | * @{
50 | */
51 | HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi);
52 | /**
53 | * @}
54 | */
55 |
56 | /**
57 | * @}
58 | */
59 |
60 | /**
61 | * @}
62 | */
63 |
64 | /**
65 | * @}
66 | */
67 |
68 | #ifdef __cplusplus
69 | }
70 | #endif
71 |
72 | #endif /* STM32G0xx_HAL_SPI_EX_H */
73 |
74 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/STM32G0xx_HAL_Driver/LICENSE.txt:
--------------------------------------------------------------------------------
1 | This software component is provided to you as part of a software package and
2 | applicable license terms are in the Package_license file. If you received this
3 | software component outside of a package or without applicable license terms,
4 | the terms of the BSD-3-Clause license shall apply.
5 | You may obtain a copy of the BSD-3-Clause at:
6 | https://opensource.org/licenses/BSD-3-Clause
7 |
--------------------------------------------------------------------------------
/FdsKey/Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal_spi_ex.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_spi_ex.c
4 | * @author MCD Application Team
5 | * @brief Extended SPI HAL module driver.
6 | * This file provides firmware functions to manage the following
7 | * SPI peripheral extended functionalities :
8 | * + IO operation functions
9 | *
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2018 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes ------------------------------------------------------------------*/
24 | #include "stm32g0xx_hal.h"
25 |
26 | /** @addtogroup STM32G0xx_HAL_Driver
27 | * @{
28 | */
29 |
30 | /** @defgroup SPIEx SPIEx
31 | * @brief SPI Extended HAL module driver
32 | * @{
33 | */
34 | #ifdef HAL_SPI_MODULE_ENABLED
35 |
36 | /* Private typedef -----------------------------------------------------------*/
37 | /* Private defines -----------------------------------------------------------*/
38 | /** @defgroup SPIEx_Private_Constants SPIEx Private Constants
39 | * @{
40 | */
41 | #define SPI_FIFO_SIZE 4UL
42 | /**
43 | * @}
44 | */
45 |
46 | /* Private macros ------------------------------------------------------------*/
47 | /* Private variables ---------------------------------------------------------*/
48 | /* Private function prototypes -----------------------------------------------*/
49 | /* Exported functions --------------------------------------------------------*/
50 |
51 | /** @defgroup SPIEx_Exported_Functions SPIEx Exported Functions
52 | * @{
53 | */
54 |
55 | /** @defgroup SPIEx_Exported_Functions_Group1 IO operation functions
56 | * @brief Data transfers functions
57 | *
58 | @verbatim
59 | ==============================================================================
60 | ##### IO operation functions #####
61 | ===============================================================================
62 | [..]
63 | This subsection provides a set of extended functions to manage the SPI
64 | data transfers.
65 |
66 | (#) Rx data flush function:
67 | (++) HAL_SPIEx_FlushRxFifo()
68 |
69 | @endverbatim
70 | * @{
71 | */
72 |
73 | /**
74 | * @brief Flush the RX fifo.
75 | * @param hspi pointer to a SPI_HandleTypeDef structure that contains
76 | * the configuration information for the specified SPI module.
77 | * @retval HAL status
78 | */
79 | HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi)
80 | {
81 | __IO uint32_t tmpreg;
82 | uint8_t count = 0U;
83 | while ((hspi->Instance->SR & SPI_FLAG_FRLVL) != SPI_FRLVL_EMPTY)
84 | {
85 | count++;
86 | tmpreg = hspi->Instance->DR;
87 | UNUSED(tmpreg); /* To avoid GCC warning */
88 | if (count == SPI_FIFO_SIZE)
89 | {
90 | return HAL_TIMEOUT;
91 | }
92 | }
93 | return HAL_OK;
94 | }
95 |
96 | /**
97 | * @}
98 | */
99 |
100 | /**
101 | * @}
102 | */
103 |
104 | #endif /* HAL_SPI_MODULE_ENABLED */
105 |
106 | /**
107 | * @}
108 | */
109 |
110 | /**
111 | * @}
112 | */
113 |
--------------------------------------------------------------------------------
/FdsKey/interim/Makefile:
--------------------------------------------------------------------------------
1 | BUILD_ARTIFACT_NAME := FdsKey
2 |
3 | # Add inputs and outputs from these tool invocations to the build variables
4 | EXECUTABLES += $(BUILD_ARTIFACT_NAME).elf
5 |
6 | OBJCOPY_BIN += $(BUILD_ARTIFACT_NAME).bin
7 |
8 | COMMIT_FILE := ../Core/Inc/commit.h
9 | LINKER_SCRIPT := ../STM32G0B0CETX_FLASH.ld
10 | SOURCES := $(shell find .. -type f -name '*.c' | sort -u)
11 | OBJS := $(patsubst %.c,%.o,$(SOURCES))
12 | ASM_SOURCES := $(shell find .. -type f -name '*.s' | sort -u)
13 | ASM_OBJS := $(patsubst %.s,%.o,$(ASM_SOURCES))
14 | H_DIRS= := $(shell find .. -type f -name '*.h' -exec dirname {} \; | sort -u)
15 | INCLUDES := $(addprefix -I,$(H_DIRS))
16 |
17 | # Main-build Target
18 | all: $(EXECUTABLES) $(OBJCOPY_BIN)
19 |
20 | # Tool invocations
21 | $(EXECUTABLES): $(OBJS) $(ASM_OBJS)
22 | arm-none-eabi-gcc -o "$(EXECUTABLES)" $(OBJS) $(ASM_OBJS) $(LIBS) -mcpu=cortex-m0plus -T"$(LINKER_SCRIPT)" --specs=nosys.specs -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
23 |
24 | $(OBJS): %.o: %.c pre-build
25 | arm-none-eabi-gcc "$<" $(INCLUDES) -mcpu=cortex-m0plus -std=gnu11 -DUSE_HAL_DRIVER -DSTM32G0B0xx -c -Ofast -ffunction-sections -fdata-sections -Wall -fstack-usage --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@"
26 |
27 | $(ASM_OBJS): %.o: %.s
28 | arm-none-eabi-gcc -x assembler-with-cpp "$<" -mcpu=cortex-m0plus -c --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@"
29 |
30 | $(OBJCOPY_BIN): $(EXECUTABLES)
31 | arm-none-eabi-objcopy -O binary $(EXECUTABLES) "$(OBJCOPY_BIN)"
32 |
33 | clean:
34 | rm -rf $(EXECUTABLES) $(OBJCOPY_BIN) $(COMMIT_FILE)
35 | find .. -name *.o -delete
36 | find .. -name *.d -delete
37 |
38 | pre-build:
39 | echo "#define COMMIT \"$$(git rev-parse --short HEAD)$$(git diff-index --quiet HEAD -- || echo ' (dirty)')\"\n#define BUILD_DATE \"$$(TZ=UTC date +'%Y-%m-%d')\"\n#define BUILD_TIME \"$$(TZ=UTC date +'%H:%M:%S')\"\n#define INTERIM\n" > $(COMMIT_FILE)
40 |
41 | .PHONY: all clean pre-build
42 |
--------------------------------------------------------------------------------
/FdsKey/interim/nano.specs:
--------------------------------------------------------------------------------
1 | %rename link nano_link
2 | %rename link_gcc_c_sequence nano_link_gcc_c_sequence
3 | %rename cpp_unique_options nano_cpp_unique_options
4 |
5 | *cpp_unique_options:
6 | -isystem =/include/newlib-nano %(nano_cpp_unique_options)
7 |
8 | *nano_libc:
9 | -lc_nano
10 |
11 | *nano_libgloss:
12 | %{specs=rdimon.specs:-lrdimon_nano} %{specs=nosys.specs:-lnosys}
13 |
14 | *link_gcc_c_sequence:
15 | %(nano_link_gcc_c_sequence) --start-group %G %(nano_libc) %(nano_libgloss) --end-group
16 |
17 | *link:
18 | %(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano) %:replace-outfile(-lrdimon -lrdimon_nano) %:replace-outfile(-lstdc++ -lstdc++_nano) %:replace-outfile(-lsupc++ -lsupc++_nano)
19 |
20 | *lib:
21 | %{!shared:%{g*:-lg_nano} %{!p:%{!pg:-lc_nano}}%{p:-lc_p}%{pg:-lc_p}}
22 |
23 |
--------------------------------------------------------------------------------
/FdsKey_bom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/FdsKey_bom.png
--------------------------------------------------------------------------------
/FdsKey_bootloader/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | FdsKey_bootloader
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.cdt.managedbuilder.core.genmakebuilder
10 | clean,full,incremental,
11 |
12 |
13 |
14 |
15 | org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
16 | full,incremental,
17 |
18 |
19 |
20 |
21 |
22 | com.st.stm32cube.ide.mcu.MCUProjectNature
23 | com.st.stm32cube.ide.mcu.MCUCubeProjectNature
24 | org.eclipse.cdt.core.cnature
25 | com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature
26 | com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature
27 | com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature
28 | com.st.stm32cube.ide.mcu.MCURootProjectNature
29 | org.eclipse.cdt.managedbuilder.core.managedBuildNature
30 | org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
31 |
32 |
33 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/buttons.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_BUTTONS_H_
2 | #define INC_BUTTONS_H_
3 |
4 | uint8_t button_up_holding();
5 | uint8_t button_down_holding();
6 | uint8_t button_left_holding();
7 | uint8_t button_right_holding();
8 | uint8_t button_up_newpress();
9 | uint8_t button_down_newpress();
10 | uint8_t button_left_newpress();
11 | uint8_t button_right_newpress();
12 | uint32_t button_left_hold_time();
13 | uint32_t button_right_hold_time();
14 |
15 | #define BUTTONS_REPEAT_TIME 500
16 |
17 | #endif /* INC_BUTTONS_H_ */
18 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/confirm.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_CONFIRM_H_
2 | #define INC_CONFIRM_H_
3 |
4 | uint8_t confirm(char *text);
5 |
6 | #endif /* INC_CONFIRM_H_ */
7 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/fatfs/diskio.h:
--------------------------------------------------------------------------------
1 | /*-----------------------------------------------------------------------/
2 | / Low level disk interface modlue include file (C)ChaN, 2019 /
3 | /-----------------------------------------------------------------------*/
4 |
5 | #ifndef _DISKIO_DEFINED
6 | #define _DISKIO_DEFINED
7 |
8 | #ifdef __cplusplus
9 | extern "C" {
10 | #endif
11 |
12 | /* Status of Disk Functions */
13 | typedef BYTE DSTATUS;
14 |
15 | /* Results of Disk Functions */
16 | typedef enum {
17 | RES_OK = 0, /* 0: Successful */
18 | RES_ERROR, /* 1: R/W Error */
19 | RES_WRPRT, /* 2: Write Protected */
20 | RES_NOTRDY, /* 3: Not Ready */
21 | RES_PARERR /* 4: Invalid Parameter */
22 | } DRESULT;
23 |
24 |
25 | /*---------------------------------------*/
26 | /* Prototypes for disk control functions */
27 |
28 |
29 | DSTATUS disk_initialize (BYTE pdrv);
30 | DSTATUS disk_status (BYTE pdrv);
31 | DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count);
32 | DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count);
33 | DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
34 |
35 |
36 | /* Disk Status Bits (DSTATUS) */
37 |
38 | #define STA_NOINIT 0x01 /* Drive not initialized */
39 | #define STA_NODISK 0x02 /* No medium in the drive */
40 | #define STA_PROTECT 0x04 /* Write protected */
41 |
42 |
43 | /* Command code for disk_ioctrl fucntion */
44 |
45 | /* Generic command (Used by FatFs) */
46 | #define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
47 | #define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */
48 | #define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */
49 | #define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */
50 | #define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */
51 |
52 | /* Generic command (Not used by FatFs) */
53 | #define CTRL_POWER 5 /* Get/Set power status */
54 | #define CTRL_LOCK 6 /* Lock/Unlock media removal */
55 | #define CTRL_EJECT 7 /* Eject media */
56 | #define CTRL_FORMAT 8 /* Create physical format on the media */
57 |
58 | /* MMC/SDC specific ioctl command */
59 | #define MMC_GET_TYPE 10 /* Get card type */
60 | #define MMC_GET_CSD 11 /* Get CSD */
61 | #define MMC_GET_CID 12 /* Get CID */
62 | #define MMC_GET_OCR 13 /* Get OCR */
63 | #define MMC_GET_SDSTAT 14 /* Get SD status */
64 | #define ISDIO_READ 55 /* Read data form SD iSDIO register */
65 | #define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
66 | #define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
67 |
68 | /* ATA/CF specific ioctl command */
69 | #define ATA_GET_REV 20 /* Get F/W revision */
70 | #define ATA_GET_MODEL 21 /* Get model name */
71 | #define ATA_GET_SN 22 /* Get serial number */
72 |
73 | #ifdef __cplusplus
74 | }
75 | #endif
76 |
77 | #endif
78 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/fonts.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_FONTS_H_
2 | #define INC_FONTS_H_
3 |
4 | #include
5 |
6 | typedef struct DotMatrixFont {
7 | const uint8_t font_type;
8 | const uint8_t start_char;
9 | const uint8_t font_length;
10 | const uint8_t char_width;
11 | const uint8_t char_height;
12 | const uint8_t spacing;
13 | const uint8_t space_length;
14 | const void* font_data;
15 | } DotMatrixFont;
16 |
17 | #include "fonts/fontexterns.h"
18 |
19 | #endif /* INC_FONTS_H_ */
20 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/fonts/fontdata.h:
--------------------------------------------------------------------------------
1 | #include "standard_6_font.h"
2 | #include "verdana_12_bold_font.h"
3 | #include "gamegirl_classic_6_font.h"
4 | #include "../fonts.h"
5 |
6 | const DotMatrixFont FONT_STANDARD_6 = {
7 | .font_type = FONT_STANDARD_6_FONT_TYPE,
8 | .start_char = FONT_STANDARD_6_START_CHAR,
9 | .font_length = FONT_STANDARD_6_LENGTH,
10 | .char_width = FONT_STANDARD_6_CHAR_WIDTH,
11 | .char_height = FONT_STANDARD_6_CHAR_HEIGHT,
12 | .spacing = 1,
13 | .space_length = 0,
14 | .font_data = font_standard_6
15 | };
16 |
17 | const DotMatrixFont FONT_VERDANA_12_BOLD = {
18 | .font_type = FONT_VERDANA_12_BOLD_FONT_TYPE,
19 | .start_char = FONT_VERDANA_12_BOLD_START_CHAR,
20 | .font_length = FONT_VERDANA_12_BOLD_LENGTH,
21 | .char_width = FONT_VERDANA_12_BOLD_CHAR_WIDTH,
22 | .char_height = FONT_VERDANA_12_BOLD_CHAR_HEIGHT,
23 | .spacing = 1,
24 | .space_length = 0,
25 | .font_data = font_verdana_12_bold
26 | };
27 |
28 | const DotMatrixFont FONT_GAMEGIRL_CLASSIC_6 = {
29 | .font_type = FONT_GAMEGIRL_CLASSIC_6_FONT_TYPE,
30 | .start_char = FONT_GAMEGIRL_CLASSIC_6_START_CHAR,
31 | .font_length = FONT_GAMEGIRL_CLASSIC_6_LENGTH,
32 | .char_width = FONT_GAMEGIRL_CLASSIC_6_CHAR_WIDTH,
33 | .char_height = FONT_GAMEGIRL_CLASSIC_6_CHAR_HEIGHT,
34 | .spacing = 0,
35 | .space_length = 0,
36 | .font_data = font_gamegirl_classic_6
37 | };
38 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/fonts/fontexterns.h:
--------------------------------------------------------------------------------
1 | extern const DotMatrixFont FONT_STANDARD_6;
2 | extern const DotMatrixFont FONT_VERDANA_12_BOLD;
3 | extern const DotMatrixFont FONT_GAMEGIRL_CLASSIC_6;
4 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/images.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_IMAGES_H_
2 | #define INC_IMAGES_H_
3 |
4 | #include
5 |
6 | typedef struct DotMatrixImage {
7 | const uint8_t width;
8 | const uint8_t height;
9 | const uint8_t *image_data;
10 | } DotMatrixImage;
11 |
12 | #include "images/imageexterns.h"
13 |
14 | #endif /* INC_IMAGES_H_ */
15 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/images/cogs.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_COGS_H
2 | #define IMAGE_COGS_H
3 |
4 | #define IMAGE_COGS_WIDTH 41
5 | #define IMAGE_COGS_HEIGHT 26
6 |
7 | const unsigned char image_cogs[] =
8 | {
9 | 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0xC0, 0x48, 0x0C, 0x00, 0x00, 0x40,
10 | 0x0E, 0x27, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x06, 0x80, 0x00, 0x00, 0x01, 0x12, 0x00, 0xC2,
11 | 0x0F, 0x61, 0x24, 0x06, 0x44, 0x20, 0x22, 0x87, 0x13, 0x48, 0x80, 0x24, 0x00, 0x40, 0x8C, 0x00,
12 | 0x71, 0x00, 0x80, 0x04, 0x01, 0x82, 0xE1, 0x87, 0x08, 0x02, 0x04, 0x23, 0x10, 0x61, 0x04, 0x88,
13 | 0x27, 0x40, 0x02, 0x09, 0x90, 0x47, 0x80, 0x18, 0x22, 0x10, 0x83, 0x00, 0x41, 0x84, 0x1F, 0x06,
14 | 0x01, 0x82, 0x04, 0x00, 0x38, 0x02, 0xC4, 0x08, 0x00, 0x90, 0x04, 0x48, 0x20, 0x87, 0x13, 0x11,
15 | 0x88, 0x80, 0x91, 0x18, 0xC2, 0x0F, 0x01, 0x20, 0x01, 0x02, 0x00, 0x04, 0x80, 0x01, 0x04, 0x00,
16 | 0x08, 0x00, 0x00, 0x90, 0xC3, 0x09, 0x00, 0x00, 0xC0, 0x48, 0x0C, 0x00, 0x00, 0x00, 0x90, 0x00,
17 | 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00
18 | };
19 |
20 | #endif // IMAGE_COGS_H
21 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/images/imagedata.h:
--------------------------------------------------------------------------------
1 | #include "cogs.h"
2 | #include "medium_cursor.h"
3 | #include "../images.h"
4 |
5 | const DotMatrixImage IMAGE_COGS = {
6 | .width = IMAGE_COGS_WIDTH,
7 | .height = IMAGE_COGS_HEIGHT,
8 | .image_data = image_cogs
9 | };
10 |
11 | const DotMatrixImage IMAGE_MEDIUM_CURSOR = {
12 | .width = IMAGE_MEDIUM_CURSOR_WIDTH,
13 | .height = IMAGE_MEDIUM_CURSOR_HEIGHT,
14 | .image_data = image_medium_cursor
15 | };
16 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/images/imageexterns.h:
--------------------------------------------------------------------------------
1 | extern const DotMatrixImage IMAGE_COGS;
2 | extern const DotMatrixImage IMAGE_MEDIUM_CURSOR;
3 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/images/medium_cursor.h:
--------------------------------------------------------------------------------
1 | #ifndef IMAGE_MEDIUM_CURSOR_H
2 | #define IMAGE_MEDIUM_CURSOR_H
3 |
4 | #define IMAGE_MEDIUM_CURSOR_WIDTH 3
5 | #define IMAGE_MEDIUM_CURSOR_HEIGHT 6
6 |
7 | const unsigned char image_medium_cursor[] =
8 | {
9 | 0xD9, 0xBF, 0x00
10 | };
11 |
12 | #endif // IMAGE_MEDIUM_CURSOR_H
13 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/main.h:
--------------------------------------------------------------------------------
1 | /* USER CODE BEGIN Header */
2 | /**
3 | ******************************************************************************
4 | * @file : main.h
5 | * @brief : Header for main.c file.
6 | * This file contains the common defines of the application.
7 | ******************************************************************************
8 | * @attention
9 | *
10 | * Copyright (c) 2023 STMicroelectronics.
11 | * All rights reserved.
12 | *
13 | * This software is licensed under terms that can be found in the LICENSE file
14 | * in the root directory of this software component.
15 | * If no LICENSE file comes with this software, it is provided AS-IS.
16 | *
17 | ******************************************************************************
18 | */
19 | /* USER CODE END Header */
20 |
21 | /* Define to prevent recursive inclusion -------------------------------------*/
22 | #ifndef __MAIN_H
23 | #define __MAIN_H
24 |
25 | #ifdef __cplusplus
26 | extern "C" {
27 | #endif
28 |
29 | /* Includes ------------------------------------------------------------------*/
30 | #include "stm32g0xx_hal.h"
31 |
32 | /* Private includes ----------------------------------------------------------*/
33 | /* USER CODE BEGIN Includes */
34 |
35 | /* USER CODE END Includes */
36 |
37 | /* Exported types ------------------------------------------------------------*/
38 | /* USER CODE BEGIN ET */
39 |
40 | /* USER CODE END ET */
41 |
42 | /* Exported constants --------------------------------------------------------*/
43 | /* USER CODE BEGIN EC */
44 | /* USER CODE END EC */
45 |
46 | /* Exported macro ------------------------------------------------------------*/
47 | /* USER CODE BEGIN EM */
48 | #define APP_ADDRESS 0x08020000
49 | #define FIRMWARE_FILE "fdskey.bin"
50 | #define FIRMWARE_MAX_SIZE (384 * 1024 - FLASH_PAGE_SIZE * 4)
51 | /* USER CODE END EM */
52 |
53 | /* Exported functions prototypes ---------------------------------------------*/
54 | void Error_Handler(void);
55 |
56 | /* USER CODE BEGIN EFP */
57 | void delay_us(uint16_t us);
58 | /* USER CODE END EFP */
59 |
60 | /* Private defines -----------------------------------------------------------*/
61 | #define BUTTON_DOWN_Pin GPIO_PIN_12
62 | #define BUTTON_DOWN_GPIO_Port GPIOA
63 | #define BUTTON_RIGHT_Pin GPIO_PIN_15
64 | #define BUTTON_RIGHT_GPIO_Port GPIOA
65 | #define BUTTON_LEFT_Pin GPIO_PIN_1
66 | #define BUTTON_LEFT_GPIO_Port GPIOD
67 | #define BUTTON_UP_Pin GPIO_PIN_2
68 | #define BUTTON_UP_GPIO_Port GPIOD
69 | #define SD_DTCT_Pin GPIO_PIN_3
70 | #define SD_DTCT_GPIO_Port GPIOD
71 | #define SD_CS_Pin GPIO_PIN_6
72 | #define SD_CS_GPIO_Port GPIOB
73 |
74 | /* USER CODE BEGIN Private defines */
75 |
76 | /* USER CODE END Private defines */
77 |
78 | #ifdef __cplusplus
79 | }
80 | #endif
81 |
82 | #endif /* __MAIN_H */
83 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/oled.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_OLED_H_
2 | #define INC_OLED_H_
3 |
4 | #include "main.h"
5 | #include "fonts.h"
6 | #include "images.h"
7 |
8 | #define OLED_I2C hi2c1
9 | #define OLED_ADDRESS 0x3C
10 |
11 | #define OLED_WIDTH 128
12 | #define OLED_HEIGHT 32
13 | #define OLED_PADDING_LEFT 0
14 |
15 | #define OLED_TIMEOUT 100
16 |
17 | typedef enum __attribute__ ((__packed__))
18 | {
19 | OLED_CONTROLLER_SSD1306 = 0,
20 | OLED_CONTROLLER_SH1106
21 | } OLED_CONTROLLER;
22 |
23 | #define OLED_COMMAND_LAST 0x00
24 | #define OLED_COMMAND_NOT_LAST 0x80
25 | #define OLED_COMMAND_DATA 0x40
26 |
27 | #define OLED_CMD_SET_COLUMN_LOW(column) ((column) & 0xF)
28 | #define OLED_CMD_SET_COLUMN_HIGH(column) (0x10 | ((column) >> 8))
29 | #define OLED_CMD_SET_PUMP_VOLTAGE_6_4 0x30
30 | #define OLED_CMD_SET_PUMP_VOLTAGE_7_4 0x31
31 | #define OLED_CMD_SET_PUMP_VOLTAGE_8_0 0x32
32 | #define OLED_CMD_SET_PUMP_VOLTAGE_9_0 0x33
33 | #define OLED_CMD_SET_START_LINE(line) (0x40 | ((line) & 0x3F))
34 | #define OLED_CMD_SET_CONTRAST_MODE 0x81
35 | #define OLED_CMD_SET_HORIZONTAL_FLIP_OFF 0xA0
36 | #define OLED_CMD_SET_HORIZONTAL_FLIP_ON 0xA1
37 | #define OLED_CMD_SET_ENTIRE_OFF 0xA4
38 | #define OLED_CMD_SET_ENTIRE_ON 0xA5
39 | #define OLED_CMD_SET_REVERSE_OFF 0xA6
40 | #define OLED_CMD_SET_REVERSE_ON 0xA7
41 | #define OLED_CMD_SET_MULTIPLEX_RATION_MODE 0xA8
42 | #define OLED_CMD_SET_OFF 0xAE
43 | #define OLED_CMD_SET_ON 0xAF
44 | #define OLED_CMD_SET_PAGE(page) (0xB0 | ((page) & 7))
45 | #define OLED_CMD_SET_VERTICAL_FLIP_OFF 0xC0
46 | #define OLED_CMD_SET_VERTICAL_FLIP_ON 0xC8
47 | #define OLED_CMD_SET_CLOCK_RATIO_MODE 0xD5
48 | #define OLED_CMD_SET_PADS_MODE 0xDA
49 | #define OLED_CMD_SET_PADS_MODE_SEQUENTIAL 0x02
50 | #define OLED_CMD_SET_PADS_MODE_ALTERNATIVE 0x12
51 |
52 | void oled_init(OLED_CONTROLLER oled_controller, uint8_t rotate_screen, uint8_t reverse, uint8_t contrast);
53 | uint8_t* oled_pixel(int x, int y);
54 | void oled_set_pixel(int x, int y, uint8_t value);
55 | uint8_t oled_get_pixel(int x, int y);
56 | HAL_StatusTypeDef oled_send_commands(int len, ...);
57 | HAL_StatusTypeDef oled_send_command(uint8_t command);
58 | HAL_StatusTypeDef oled_write_data(uint8_t *data, uint8_t len);
59 | HAL_StatusTypeDef oled_update(uint8_t start_page, uint8_t end_page);
60 | HAL_StatusTypeDef oled_update_full();
61 | HAL_StatusTypeDef oled_update_invisible();
62 | HAL_StatusTypeDef oled_set_line(int y);
63 | uint8_t oled_get_line();
64 |
65 | void oled_draw_rectangle(int x1, int y1, int x2, int y2, uint8_t fill, uint8_t value);
66 | void oled_draw_line(int x1, int y1, int x2, int y2, uint8_t value);
67 | void oled_copy_to_invisible();
68 | void oled_switch_to_invisible();
69 | void oled_draw_text(const DotMatrixFont *font, char* text, int x, int y, uint8_t replace, uint8_t invert);
70 | void oled_draw_text_cropped(const DotMatrixFont *font, char* text, int x, int y,
71 | uint8_t start_x, uint8_t max_width,
72 | uint8_t start_y, uint8_t max_height,
73 | uint8_t replace, uint8_t invert);
74 | int oled_get_text_length(const DotMatrixFont *font, char *text);
75 | void oled_draw_image(const DotMatrixImage *img, int x, int y, uint8_t replace, uint8_t invert);
76 | void oled_draw_image_cropped(const DotMatrixImage *img, int x, int y,
77 | uint8_t start_x, uint8_t max_width,
78 | uint8_t start_y, uint8_t max_height,
79 | uint8_t replace, uint8_t invert);
80 | void oled_rotate(uint8_t rotate_screen);
81 |
82 | extern I2C_HandleTypeDef OLED_I2C;
83 |
84 | #endif /* INC_OLED_H_ */
85 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/servicemenu.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SERVICEMENU_H_
2 | #define INC_SERVICEMENU_H_
3 |
4 | #include
5 | #include "main.h"
6 | #include "oled.h"
7 |
8 | #define SERVICE_SETTINGS_SIGNATURE "SFDSKEY"
9 | #define SERVICE_SETTINGS_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 3)
10 | #define HARDWARE_VERSION_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 4)
11 |
12 | typedef struct __attribute__((packed))
13 | {
14 | char sig[sizeof(SERVICE_SETTINGS_SIGNATURE) + 1];
15 | OLED_CONTROLLER oled_controller;
16 | } FDSKEY_SERVICE_SETTINGS;
17 |
18 | extern FDSKEY_SERVICE_SETTINGS fdskey_service_settings;
19 |
20 | typedef struct __attribute__((packed))
21 | {
22 | uint16_t major;
23 | uint8_t minor;
24 | char suffix;
25 | char bootloader_commit[28];
26 | } FDSKEY_HARDWARE_VERSION;
27 |
28 | void service_settings_load();
29 | HAL_StatusTypeDef write_hardware_version();
30 |
31 | #endif /* INC_SERVICEMENU_H_ */
32 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/settings.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SETTINGS_H_
2 | #define INC_SETTINGS_H_
3 |
4 | #include
5 | #include "main.h"
6 | #include "ff.h"
7 |
8 | #define SETTINGS_FLASH_OFFSET (0x08080000 - FLASH_PAGE_SIZE * 2) // reserved two pages
9 | #define SETTINGS_SIGNATURE "FDSKEY"
10 |
11 | typedef enum __attribute__ ((__packed__))
12 | {
13 | REMEMBER_LAST_STATE_NONE = 0,
14 | REMEMBER_LAST_STATE_BROWSER,
15 | REMEMBER_LAST_STATE_ROM
16 | } REMEMBER_LAST_STATE_MODE;
17 |
18 | typedef enum __attribute__ ((__packed__))
19 | {
20 | LAST_STATE_MAIN_MENU = 0,
21 | LAST_STATE_BROWSER,
22 | LAST_STATE_ROM
23 | } LAST_STATE;
24 |
25 | typedef enum __attribute__ ((__packed__))
26 | {
27 | REWIND_SPEED_ORIGINAL = 0,
28 | REWIND_SPEED_FAST,
29 | REWIND_SPEED_TURBO
30 | } REWIND_SPEED;
31 |
32 | typedef struct __attribute__((packed))
33 | {
34 | char sig[sizeof(SETTINGS_SIGNATURE) + 1];
35 | uint8_t version;
36 | REWIND_SPEED rewind_speed;
37 | REMEMBER_LAST_STATE_MODE remember_last_state_mode;
38 | LAST_STATE last_state;
39 | uint8_t hide_non_fds;
40 | uint8_t hide_extensions;
41 | uint8_t hide_hidden;
42 | uint16_t autosave_time;
43 | uint8_t brightness;
44 | uint8_t lefty_mode;
45 | uint8_t invert_screen;
46 | int16_t auto_off_screen_time;
47 | uint8_t backup_original;
48 | char last_directory[3584];
49 | char last_file[FF_MAX_LFN + 1 /* 255 + 1 */];
50 | } FDSKEY_SETTINGS;
51 |
52 | void settings_load();
53 | HAL_StatusTypeDef settings_save();
54 | void settings_menu();
55 |
56 | extern FDSKEY_SETTINGS fdskey_settings;
57 |
58 | #endif /* INC_SETTINGS_H_ */
59 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/splash.h:
--------------------------------------------------------------------------------
1 | #ifndef INC_SPLASH_H_
2 | #define INC_SPLASH_H_
3 |
4 | #include "ff.h"
5 | #include "sdcard.h"
6 | #include "oled.h"
7 |
8 | #define SPLASH_UPDATING_IMAGE IMAGE_COGS
9 | #define SPLASH_REGULAR_FONT FONT_STANDARD_6
10 | #define SPLASH_ERROR_TITLE_FONT FONT_VERDANA_12_BOLD
11 | #define SPLASH_ERROR_FONT FONT_STANDARD_6
12 |
13 | void show_message(char *text, uint8_t wait);
14 | void show_updating_screen();
15 | void show_error_screen(char *text, uint8_t fatal);
16 | void show_error_screen_fr(FRESULT fr, uint8_t fatal);
17 | void show_error_screen_sd(SD_RESULT r, uint8_t fatal);
18 | void show_free_memory();
19 |
20 | extern I2C_HandleTypeDef OLED_I2C;
21 |
22 | #endif /* INC_SPLASH_H_ */
23 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Inc/stm32g0xx_it.h:
--------------------------------------------------------------------------------
1 | /* USER CODE BEGIN Header */
2 | /**
3 | ******************************************************************************
4 | * @file stm32g0xx_it.h
5 | * @brief This file contains the headers of the interrupt handlers.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2023 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 | /* USER CODE END Header */
19 |
20 | /* Define to prevent recursive inclusion -------------------------------------*/
21 | #ifndef __STM32G0xx_IT_H
22 | #define __STM32G0xx_IT_H
23 |
24 | #ifdef __cplusplus
25 | extern "C" {
26 | #endif
27 |
28 | /* Private includes ----------------------------------------------------------*/
29 | /* USER CODE BEGIN Includes */
30 |
31 | /* USER CODE END Includes */
32 |
33 | /* Exported types ------------------------------------------------------------*/
34 | /* USER CODE BEGIN ET */
35 |
36 | /* USER CODE END ET */
37 |
38 | /* Exported constants --------------------------------------------------------*/
39 | /* USER CODE BEGIN EC */
40 |
41 | /* USER CODE END EC */
42 |
43 | /* Exported macro ------------------------------------------------------------*/
44 | /* USER CODE BEGIN EM */
45 |
46 | /* USER CODE END EM */
47 |
48 | /* Exported functions prototypes ---------------------------------------------*/
49 | void NMI_Handler(void);
50 | void HardFault_Handler(void);
51 | void SVC_Handler(void);
52 | void PendSV_Handler(void);
53 | void SysTick_Handler(void);
54 | /* USER CODE BEGIN EFP */
55 |
56 | /* USER CODE END EFP */
57 |
58 | #ifdef __cplusplus
59 | }
60 | #endif
61 |
62 | #endif /* __STM32G0xx_IT_H */
63 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/buttons.c:
--------------------------------------------------------------------------------
1 | #include "main.h"
2 | #include "buttons.h"
3 | #include "settings.h"
4 |
5 | static uint8_t up_pressed = 0;
6 | static uint8_t down_pressed = 0;
7 | static uint8_t left_pressed = 0;
8 | static uint8_t right_pressed = 0;
9 |
10 | uint8_t button_up_holding()
11 | {
12 | uint8_t v = !HAL_GPIO_ReadPin(!fdskey_settings.lefty_mode ? BUTTON_UP_GPIO_Port : BUTTON_DOWN_GPIO_Port, !fdskey_settings.lefty_mode ? BUTTON_UP_Pin : BUTTON_DOWN_Pin);
13 | return v;
14 | }
15 |
16 | uint8_t button_down_holding()
17 | {
18 | uint8_t v = !HAL_GPIO_ReadPin(!fdskey_settings.lefty_mode ? BUTTON_DOWN_GPIO_Port : BUTTON_UP_GPIO_Port, !fdskey_settings.lefty_mode ? BUTTON_DOWN_Pin : BUTTON_UP_Pin);
19 | return v;
20 | }
21 |
22 | uint8_t button_left_holding()
23 | {
24 | uint8_t v = !HAL_GPIO_ReadPin(!fdskey_settings.lefty_mode ? BUTTON_LEFT_GPIO_Port : BUTTON_RIGHT_GPIO_Port, !fdskey_settings.lefty_mode ? BUTTON_LEFT_Pin : BUTTON_RIGHT_Pin);
25 | return v;
26 | }
27 |
28 | uint8_t button_right_holding()
29 | {
30 | uint8_t v = !HAL_GPIO_ReadPin(!fdskey_settings.lefty_mode ? BUTTON_RIGHT_GPIO_Port : BUTTON_LEFT_GPIO_Port, !fdskey_settings.lefty_mode ? BUTTON_RIGHT_Pin : BUTTON_LEFT_Pin);
31 | return v;
32 | }
33 |
34 | uint8_t button_up_newpress()
35 | {
36 | uint8_t v = button_up_holding();
37 | uint8_t newpress = v && !up_pressed;
38 | up_pressed = v;
39 | return newpress;
40 | }
41 |
42 | uint8_t button_down_newpress()
43 | {
44 | uint8_t v = button_down_holding();
45 | uint8_t newpress = v && !down_pressed;
46 | down_pressed = v;
47 | return newpress;
48 | }
49 |
50 | uint8_t button_left_newpress()
51 | {
52 | uint8_t v = button_left_holding();
53 | uint8_t newpress = v && !left_pressed;
54 | left_pressed = v;
55 | return newpress;
56 | }
57 |
58 | uint8_t button_right_newpress()
59 | {
60 | uint8_t v = button_right_holding();
61 | uint8_t newpress = v && !right_pressed;
62 | right_pressed = v;
63 | return newpress;
64 | }
65 |
66 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/confirm.c:
--------------------------------------------------------------------------------
1 | #include "main.h"
2 | #include "oled.h"
3 | #include "buttons.h"
4 |
5 | static void confirm_draw(char *text, uint8_t selection)
6 | {
7 | int line = oled_get_line() + OLED_HEIGHT;
8 |
9 | // clear screen
10 | oled_draw_rectangle(0, line, OLED_WIDTH - 1, line + OLED_HEIGHT - 1, 1, 0);
11 | // title
12 | oled_draw_text(&FONT_STANDARD_6, text,
13 | OLED_WIDTH / 2 - oled_get_text_length(&FONT_STANDARD_6, text) / 2, line + 0,
14 | 0, 0);
15 |
16 | oled_draw_text(&FONT_GAMEGIRL_CLASSIC_6, "NO",
17 | OLED_WIDTH / 2 - 12, line + 11,
18 | 0, 0);
19 | oled_draw_text(&FONT_GAMEGIRL_CLASSIC_6, "YES",
20 | OLED_WIDTH / 2 - 12, line + 21,
21 | 0, 0);
22 |
23 | oled_draw_image(&IMAGE_MEDIUM_CURSOR, OLED_WIDTH / 2 - 18, line + 12 + 10 * selection, 0, 0);
24 |
25 | oled_update_invisible();
26 | oled_switch_to_invisible();
27 | }
28 |
29 | uint8_t confirm(char *text)
30 | {
31 | uint8_t selection = 0;
32 | confirm_draw(text, selection);
33 | while (1)
34 | {
35 | if (button_up_newpress())
36 | {
37 | selection = 0;
38 | confirm_draw(text, selection);
39 | }
40 | if (button_down_newpress())
41 | {
42 | selection = 1;
43 | confirm_draw(text, selection);
44 | }
45 | if (button_left_newpress())
46 | return 0;
47 | if (button_right_newpress())
48 | return selection;
49 | HAL_Delay(1);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/fatfs/diskio.c:
--------------------------------------------------------------------------------
1 | /*-----------------------------------------------------------------------*/
2 | /* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */
3 | /*-----------------------------------------------------------------------*/
4 | /* If a working storage control module is available, it should be */
5 | /* attached to the FatFs via a glue function rather than modifying it. */
6 | /* This is an example of glue functions to attach various exsisting */
7 | /* storage control modules to the FatFs module with a defined API. */
8 | /*-----------------------------------------------------------------------*/
9 |
10 | #include "ff.h" /* Obtains integer types */
11 | #include "diskio.h" /* Declarations of disk functions */
12 | #include "sdcard.h"
13 | #include "splash.h"
14 |
15 | /* Definitions of physical drive number for each drive */
16 | #define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
17 | #define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */
18 | #define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */
19 |
20 |
21 | /*-----------------------------------------------------------------------*/
22 | /* Get Drive Status */
23 | /*-----------------------------------------------------------------------*/
24 |
25 | DSTATUS disk_status (
26 | BYTE pdrv /* Physical drive nmuber to identify the drive */
27 | )
28 | {
29 | return RES_OK;
30 | }
31 |
32 |
33 |
34 | /*-----------------------------------------------------------------------*/
35 | /* Inidialize a Drive */
36 | /*-----------------------------------------------------------------------*/
37 |
38 | DSTATUS disk_initialize (
39 | BYTE pdrv /* Physical drive nmuber to identify the drive */
40 | )
41 | {
42 | SD_RESULT r = SD_init_try_speed();
43 | if (r != SD_RES_OK)
44 | show_error_screen_sd(r, 1);
45 | return RES_OK;
46 | }
47 |
48 |
49 |
50 | /*-----------------------------------------------------------------------*/
51 | /* Read Sector(s) */
52 | /*-----------------------------------------------------------------------*/
53 |
54 | DRESULT disk_read (
55 | BYTE pdrv, /* Physical drive nmuber to identify the drive */
56 | BYTE *buff, /* Data buffer to store read data */
57 | LBA_t sector, /* Start sector in LBA */
58 | UINT count /* Number of sectors to read */
59 | )
60 | {
61 | SD_RESULT r;
62 | if (count == 1)
63 | {
64 | r = SD_read_single_block(sector, buff);
65 | if (r != SD_RES_OK)
66 | show_error_screen_sd(r, 1);
67 | } else {
68 | r = SD_read_begin(sector);
69 | if (r != SD_RES_OK)
70 | show_error_screen_sd(r, 1);
71 | while (count) {
72 | r = SD_read_data(buff);
73 | if (r != SD_RES_OK)
74 | show_error_screen_sd(r, 1);
75 | buff += FF_MIN_SS;
76 | count--;
77 | }
78 | r = SD_read_end();
79 | if (r != SD_RES_OK)
80 | show_error_screen_sd(r, 1);
81 | }
82 | return RES_OK;
83 | }
84 |
85 |
86 |
87 | /*-----------------------------------------------------------------------*/
88 | /* Write Sector(s) */
89 | /*-----------------------------------------------------------------------*/
90 |
91 | #if FF_FS_READONLY == 0
92 |
93 | DRESULT disk_write (
94 | BYTE pdrv, /* Physical drive nmuber to identify the drive */
95 | const BYTE *buff, /* Data to be written */
96 | LBA_t sector, /* Start sector in LBA */
97 | UINT count /* Number of sectors to write */
98 | )
99 | {
100 | SD_RESULT r;
101 | if (count == 1)
102 | {
103 | r = SD_write_single_block(sector, buff);
104 | if (r != SD_RES_OK)
105 | show_error_screen_sd(r, 1);
106 | } else {
107 | r = SD_write_begin(sector);
108 | if (r != SD_RES_OK)
109 | show_error_screen_sd(r, 1);
110 | while (count) {
111 | r = SD_write_data(buff);
112 | if (r != SD_RES_OK)
113 | show_error_screen_sd(r, 1);
114 | buff += FF_MIN_SS;
115 | count--;
116 | }
117 | r = SD_write_end();
118 | if (r != SD_RES_OK)
119 | show_error_screen_sd(r, 1);
120 | }
121 | return RES_OK;
122 | }
123 |
124 | #endif
125 |
126 |
127 | /*-----------------------------------------------------------------------*/
128 | /* Miscellaneous Functions */
129 | /*-----------------------------------------------------------------------*/
130 |
131 | DRESULT disk_ioctl (
132 | BYTE pdrv, /* Physical drive nmuber (0..) */
133 | BYTE cmd, /* Control code */
134 | void *buff /* Buffer to send/receive control data */
135 | )
136 | {
137 | switch (cmd)
138 | {
139 | case GET_SECTOR_COUNT:
140 | *((DWORD*)buff) = SD_read_capacity() / FF_MIN_SS;
141 | return RES_OK;
142 | case CTRL_SYNC:
143 | return RES_OK;
144 | }
145 | return RES_ERROR;
146 | }
147 |
148 | DWORD get_fattime (void) /* Get current time */
149 | {
150 | return 0;
151 | }
152 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/fonts.c:
--------------------------------------------------------------------------------
1 | #include "fonts.h"
2 | #include "fonts/fontdata.h"
3 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/images.c:
--------------------------------------------------------------------------------
1 | #include "images.h"
2 | #include "images/imagedata.h"
3 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/servicemenu.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include "servicemenu.h"
4 | #include "main.h"
5 | #include "oled.h"
6 | #include "commit.h"
7 |
8 | FDSKEY_SERVICE_SETTINGS fdskey_service_settings;
9 |
10 | void service_settings_load()
11 | {
12 | memcpy(&fdskey_service_settings, (void*)SERVICE_SETTINGS_FLASH_OFFSET, sizeof(fdskey_service_settings));
13 | fdskey_service_settings.sig[sizeof(fdskey_service_settings.sig) - 1] = 0;
14 | if (strcmp(fdskey_service_settings.sig, SERVICE_SETTINGS_SIGNATURE))
15 | {
16 | // config is empty, load defaults
17 | memset(&fdskey_service_settings, 0, sizeof(fdskey_service_settings));
18 | strcpy(fdskey_service_settings.sig, SERVICE_SETTINGS_SIGNATURE);
19 | fdskey_service_settings.oled_controller = OLED_CONTROLLER_SSD1306;
20 | }
21 | }
22 |
23 | HAL_StatusTypeDef write_hardware_version()
24 | {
25 | FDSKEY_HARDWARE_VERSION hw;
26 | HAL_StatusTypeDef r;
27 | FLASH_EraseInitTypeDef erase_init_struct;
28 | uint32_t sector_error = 0;
29 | int i;
30 | uint64_t buffer[sizeof(hw) / sizeof(uint64_t) + 1];
31 |
32 | memcpy(&hw, (void*)HARDWARE_VERSION_FLASH_OFFSET, sizeof(hw));
33 | if (hw.major == 0
34 | && hw.minor == 0
35 | && hw.suffix == 0
36 | && strcmp(hw.bootloader_commit, COMMIT) == 0)
37 | return HAL_OK;
38 |
39 | hw.major = 0;
40 | hw.minor = 0;
41 | hw.suffix = 0;
42 | strcpy(hw.bootloader_commit, COMMIT);
43 |
44 | // unlock flash
45 | r = HAL_FLASH_Unlock();
46 | if (r != HAL_OK) return r;
47 |
48 | // erase flash page
49 | erase_init_struct.TypeErase = FLASH_TYPEERASE_PAGES;
50 | erase_init_struct.Banks = ((HARDWARE_VERSION_FLASH_OFFSET - 0x08000000) / FLASH_BANK_SIZE == 0) ? FLASH_BANK_1 : FLASH_BANK_2;
51 | erase_init_struct.Page = ((HARDWARE_VERSION_FLASH_OFFSET - 0x08000000) / FLASH_PAGE_SIZE) % FLASH_PAGE_NB;
52 | erase_init_struct.NbPages = 1;
53 | r = HAL_FLASHEx_Erase(&erase_init_struct, §or_error);
54 | if (r != HAL_OK) return r;
55 |
56 | // writing
57 | memcpy(buffer, &hw, sizeof(hw));
58 | for (i = 0; i < sizeof(buffer); i += sizeof(uint64_t))
59 | {
60 | r = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, HARDWARE_VERSION_FLASH_OFFSET + i, buffer[i / sizeof(uint64_t)]);
61 | if (r != HAL_OK)
62 | return r;
63 | }
64 |
65 | return HAL_FLASH_Lock();
66 | }
67 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/settings.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include "settings.h"
4 | #include "main.h"
5 | #include "oled.h"
6 |
7 | FDSKEY_SETTINGS fdskey_settings;
8 |
9 | void settings_load()
10 | {
11 | memcpy(&fdskey_settings, (void*)SETTINGS_FLASH_OFFSET, sizeof(fdskey_settings));
12 | fdskey_settings.sig[sizeof(fdskey_settings.sig) - 1] = 0;
13 | if (strcmp(fdskey_settings.sig, SETTINGS_SIGNATURE))
14 | {
15 | // config is empty, load defaults
16 | memset(&fdskey_settings, 0, sizeof(fdskey_settings));
17 | strcpy(fdskey_settings.sig, SETTINGS_SIGNATURE);
18 | fdskey_settings.version = 0;
19 | fdskey_settings.rewind_speed = REWIND_SPEED_TURBO;
20 | fdskey_settings.remember_last_state_mode = REMEMBER_LAST_STATE_BROWSER;
21 | fdskey_settings.last_state = LAST_STATE_MAIN_MENU;
22 | fdskey_settings.hide_non_fds = 1;
23 | fdskey_settings.hide_extensions = 1;
24 | fdskey_settings.hide_hidden = 1;
25 | fdskey_settings.autosave_time = 1;
26 | fdskey_settings.brightness = 5;
27 | fdskey_settings.lefty_mode = 0;
28 | fdskey_settings.invert_screen = 0;
29 | fdskey_settings.auto_off_screen_time = 60;
30 | fdskey_settings.backup_original = 1;
31 | fdskey_settings.last_directory[0] = 0;
32 | fdskey_settings.last_file[0] = 0;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/stm32g0xx_it.c:
--------------------------------------------------------------------------------
1 | /* USER CODE BEGIN Header */
2 | /**
3 | ******************************************************************************
4 | * @file stm32g0xx_it.c
5 | * @brief Interrupt Service Routines.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2023 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 | /* USER CODE END Header */
19 |
20 | /* Includes ------------------------------------------------------------------*/
21 | #include "main.h"
22 | #include "stm32g0xx_it.h"
23 | /* Private includes ----------------------------------------------------------*/
24 | /* USER CODE BEGIN Includes */
25 | #include "splash.h"
26 | /* USER CODE END Includes */
27 |
28 | /* Private typedef -----------------------------------------------------------*/
29 | /* USER CODE BEGIN TD */
30 |
31 | /* USER CODE END TD */
32 |
33 | /* Private define ------------------------------------------------------------*/
34 | /* USER CODE BEGIN PD */
35 |
36 | /* USER CODE END PD */
37 |
38 | /* Private macro -------------------------------------------------------------*/
39 | /* USER CODE BEGIN PM */
40 |
41 | /* USER CODE END PM */
42 |
43 | /* Private variables ---------------------------------------------------------*/
44 | /* USER CODE BEGIN PV */
45 | extern I2C_HandleTypeDef hi2c1;
46 | /* USER CODE END PV */
47 |
48 | /* Private function prototypes -----------------------------------------------*/
49 | /* USER CODE BEGIN PFP */
50 |
51 | /* USER CODE END PFP */
52 |
53 | /* Private user code ---------------------------------------------------------*/
54 | /* USER CODE BEGIN 0 */
55 |
56 | /* USER CODE END 0 */
57 |
58 | /* External variables --------------------------------------------------------*/
59 |
60 | /* USER CODE BEGIN EV */
61 |
62 | /* USER CODE END EV */
63 |
64 | /******************************************************************************/
65 | /* Cortex-M0+ Processor Interruption and Exception Handlers */
66 | /******************************************************************************/
67 | /**
68 | * @brief This function handles Non maskable interrupt.
69 | */
70 | void NMI_Handler(void)
71 | {
72 | /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
73 |
74 | /* USER CODE END NonMaskableInt_IRQn 0 */
75 | /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
76 | while (1)
77 | {
78 | }
79 | /* USER CODE END NonMaskableInt_IRQn 1 */
80 | }
81 |
82 | /**
83 | * @brief This function handles Hard fault interrupt.
84 | */
85 | void HardFault_Handler(void)
86 | {
87 | /* USER CODE BEGIN HardFault_IRQn 0 */
88 | show_error_screen("Hard fault", 1);
89 | /* USER CODE END HardFault_IRQn 0 */
90 | while (1)
91 | {
92 | /* USER CODE BEGIN W1_HardFault_IRQn 0 */
93 | /* USER CODE END W1_HardFault_IRQn 0 */
94 | }
95 | }
96 |
97 | /**
98 | * @brief This function handles System service call via SWI instruction.
99 | */
100 | void SVC_Handler(void)
101 | {
102 | /* USER CODE BEGIN SVC_IRQn 0 */
103 |
104 | /* USER CODE END SVC_IRQn 0 */
105 | /* USER CODE BEGIN SVC_IRQn 1 */
106 |
107 | /* USER CODE END SVC_IRQn 1 */
108 | }
109 |
110 | /**
111 | * @brief This function handles Pendable request for system service.
112 | */
113 | void PendSV_Handler(void)
114 | {
115 | /* USER CODE BEGIN PendSV_IRQn 0 */
116 |
117 | /* USER CODE END PendSV_IRQn 0 */
118 | /* USER CODE BEGIN PendSV_IRQn 1 */
119 |
120 | /* USER CODE END PendSV_IRQn 1 */
121 | }
122 |
123 | /**
124 | * @brief This function handles System tick timer.
125 | */
126 | void SysTick_Handler(void)
127 | {
128 | /* USER CODE BEGIN SysTick_IRQn 0 */
129 |
130 | /* USER CODE END SysTick_IRQn 0 */
131 | HAL_IncTick();
132 | /* USER CODE BEGIN SysTick_IRQn 1 */
133 |
134 | /* USER CODE END SysTick_IRQn 1 */
135 | }
136 |
137 | /******************************************************************************/
138 | /* STM32G0xx Peripheral Interrupt Handlers */
139 | /* Add here the Interrupt Handlers for the used peripherals. */
140 | /* For the available peripheral interrupt handler names, */
141 | /* please refer to the startup file (startup_stm32g0xx.s). */
142 | /******************************************************************************/
143 |
144 | /* USER CODE BEGIN 1 */
145 |
146 | /* USER CODE END 1 */
147 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/syscalls.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file syscalls.c
4 | * @author Auto-generated by STM32CubeIDE
5 | * @brief STM32CubeIDE Minimal System calls file
6 | *
7 | * For more information about which c-functions
8 | * need which of these lowlevel functions
9 | * please consult the Newlib libc-manual
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2020-2023 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes */
24 | #include
25 | #include
26 | #include
27 | #include
28 | #include
29 | #include
30 | #include
31 | #include
32 |
33 |
34 | /* Variables */
35 | extern int __io_putchar(int ch) __attribute__((weak));
36 | extern int __io_getchar(void) __attribute__((weak));
37 |
38 |
39 | char *__env[1] = { 0 };
40 | char **environ = __env;
41 |
42 |
43 | /* Functions */
44 | void initialise_monitor_handles()
45 | {
46 | }
47 |
48 | int _getpid(void)
49 | {
50 | return 1;
51 | }
52 |
53 | int _kill(int pid, int sig)
54 | {
55 | (void)pid;
56 | (void)sig;
57 | errno = EINVAL;
58 | return -1;
59 | }
60 |
61 | void _exit (int status)
62 | {
63 | _kill(status, -1);
64 | while (1) {} /* Make sure we hang here */
65 | }
66 |
67 | __attribute__((weak)) int _read(int file, char *ptr, int len)
68 | {
69 | (void)file;
70 | int DataIdx;
71 |
72 | for (DataIdx = 0; DataIdx < len; DataIdx++)
73 | {
74 | *ptr++ = __io_getchar();
75 | }
76 |
77 | return len;
78 | }
79 |
80 | __attribute__((weak)) int _write(int file, char *ptr, int len)
81 | {
82 | (void)file;
83 | int DataIdx;
84 |
85 | for (DataIdx = 0; DataIdx < len; DataIdx++)
86 | {
87 | __io_putchar(*ptr++);
88 | }
89 | return len;
90 | }
91 |
92 | int _close(int file)
93 | {
94 | (void)file;
95 | return -1;
96 | }
97 |
98 |
99 | int _fstat(int file, struct stat *st)
100 | {
101 | (void)file;
102 | st->st_mode = S_IFCHR;
103 | return 0;
104 | }
105 |
106 | int _isatty(int file)
107 | {
108 | (void)file;
109 | return 1;
110 | }
111 |
112 | int _lseek(int file, int ptr, int dir)
113 | {
114 | (void)file;
115 | (void)ptr;
116 | (void)dir;
117 | return 0;
118 | }
119 |
120 | int _open(char *path, int flags, ...)
121 | {
122 | (void)path;
123 | (void)flags;
124 | /* Pretend like we always fail */
125 | return -1;
126 | }
127 |
128 | int _wait(int *status)
129 | {
130 | (void)status;
131 | errno = ECHILD;
132 | return -1;
133 | }
134 |
135 | int _unlink(char *name)
136 | {
137 | (void)name;
138 | errno = ENOENT;
139 | return -1;
140 | }
141 |
142 | int _times(struct tms *buf)
143 | {
144 | (void)buf;
145 | return -1;
146 | }
147 |
148 | int _stat(char *file, struct stat *st)
149 | {
150 | (void)file;
151 | st->st_mode = S_IFCHR;
152 | return 0;
153 | }
154 |
155 | int _link(char *old, char *new)
156 | {
157 | (void)old;
158 | (void)new;
159 | errno = EMLINK;
160 | return -1;
161 | }
162 |
163 | int _fork(void)
164 | {
165 | errno = EAGAIN;
166 | return -1;
167 | }
168 |
169 | int _execve(char *name, char **argv, char **env)
170 | {
171 | (void)name;
172 | (void)argv;
173 | (void)env;
174 | errno = ENOMEM;
175 | return -1;
176 | }
177 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Core/Src/sysmem.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file sysmem.c
4 | * @author Generated by STM32CubeIDE
5 | * @brief STM32CubeIDE System Memory calls file
6 | *
7 | * For more information about which C functions
8 | * need which of these lowlevel functions
9 | * please consult the newlib libc manual
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2023 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes */
24 | #include
25 | #include
26 |
27 | /**
28 | * Pointer to the current high watermark of the heap usage
29 | */
30 | static uint8_t *__sbrk_heap_end = NULL;
31 |
32 | /**
33 | * @brief _sbrk() allocates memory to the newlib heap and is used by malloc
34 | * and others from the C library
35 | *
36 | * @verbatim
37 | * ############################################################################
38 | * # .data # .bss # newlib heap # MSP stack #
39 | * # # # # Reserved by _Min_Stack_Size #
40 | * ############################################################################
41 | * ^-- RAM start ^-- _end _estack, RAM end --^
42 | * @endverbatim
43 | *
44 | * This implementation starts allocating at the '_end' linker symbol
45 | * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack
46 | * The implementation considers '_estack' linker symbol to be RAM end
47 | * NOTE: If the MSP stack, at any point during execution, grows larger than the
48 | * reserved size, please increase the '_Min_Stack_Size'.
49 | *
50 | * @param incr Memory size
51 | * @return Pointer to allocated memory
52 | */
53 | void *_sbrk(ptrdiff_t incr)
54 | {
55 | extern uint8_t _end; /* Symbol defined in the linker script */
56 | extern uint8_t _estack; /* Symbol defined in the linker script */
57 | extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
58 | const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
59 | const uint8_t *max_heap = (uint8_t *)stack_limit;
60 | uint8_t *prev_heap_end;
61 |
62 | /* Initialize heap end at first call */
63 | if (NULL == __sbrk_heap_end)
64 | {
65 | __sbrk_heap_end = &_end;
66 | }
67 |
68 | /* Protect heap from growing into the reserved MSP stack */
69 | if (__sbrk_heap_end + incr > max_heap)
70 | {
71 | errno = ENOMEM;
72 | return (void *)-1;
73 | }
74 |
75 | prev_heap_end = __sbrk_heap_end;
76 | __sbrk_heap_end += incr;
77 |
78 | return (void *)prev_heap_end;
79 | }
80 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/CMSIS/Device/ST/STM32G0xx/Include/system_stm32g0xx.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file system_stm32g0xx.h
4 | * @author MCD Application Team
5 | * @brief CMSIS Cortex-M0+ Device System Source File for STM32G0xx devices.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018-2021 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 | /** @addtogroup CMSIS
19 | * @{
20 | */
21 |
22 | /** @addtogroup stm32g0xx_system
23 | * @{
24 | */
25 |
26 | /**
27 | * @brief Define to prevent recursive inclusion
28 | */
29 | #ifndef SYSTEM_STM32G0XX_H
30 | #define SYSTEM_STM32G0XX_H
31 |
32 | #ifdef __cplusplus
33 | extern "C" {
34 | #endif
35 |
36 | /** @addtogroup STM32G0xx_System_Includes
37 | * @{
38 | */
39 |
40 | /**
41 | * @}
42 | */
43 |
44 |
45 | /** @addtogroup STM32G0xx_System_Exported_types
46 | * @{
47 | */
48 | /* This variable is updated in three ways:
49 | 1) by calling CMSIS function SystemCoreClockUpdate()
50 | 2) by calling HAL API function HAL_RCC_GetSysClockFreq()
51 | 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
52 | Note: If you use this function to configure the system clock; then there
53 | is no need to call the 2 first functions listed above, since SystemCoreClock
54 | variable is updated automatically.
55 | */
56 | extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
57 |
58 | extern const uint32_t AHBPrescTable[16]; /*!< AHB prescalers table values */
59 | extern const uint32_t APBPrescTable[8]; /*!< APB prescalers table values */
60 |
61 | /**
62 | * @}
63 | */
64 |
65 | /** @addtogroup STM32G0xx_System_Exported_Constants
66 | * @{
67 | */
68 |
69 | /**
70 | * @}
71 | */
72 |
73 | /** @addtogroup STM32G0xx_System_Exported_Macros
74 | * @{
75 | */
76 |
77 | /**
78 | * @}
79 | */
80 |
81 | /** @addtogroup STM32G0xx_System_Exported_Functions
82 | * @{
83 | */
84 |
85 | extern void SystemInit(void);
86 | extern void SystemCoreClockUpdate(void);
87 | /**
88 | * @}
89 | */
90 |
91 | #ifdef __cplusplus
92 | }
93 | #endif
94 |
95 | #endif /*SYSTEM_STM32G0XX_H */
96 |
97 | /**
98 | * @}
99 | */
100 |
101 | /**
102 | * @}
103 | */
104 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/CMSIS/Device/ST/STM32G0xx/LICENSE.txt:
--------------------------------------------------------------------------------
1 | This software component is provided to you as part of a software package and
2 | applicable license terms are in the Package_license file. If you received this
3 | software component outside of a package or without applicable license terms,
4 | the terms of the Apache-2.0 license shall apply.
5 | You may obtain a copy of the Apache-2.0 at:
6 | https://opensource.org/licenses/Apache-2.0
7 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/CMSIS/Include/cmsis_version.h:
--------------------------------------------------------------------------------
1 | /**************************************************************************//**
2 | * @file cmsis_version.h
3 | * @brief CMSIS Core(M) Version definitions
4 | * @version V5.0.3
5 | * @date 24. June 2019
6 | ******************************************************************************/
7 | /*
8 | * Copyright (c) 2009-2019 ARM Limited. All rights reserved.
9 | *
10 | * SPDX-License-Identifier: Apache-2.0
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the License); you may
13 | * not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | #if defined ( __ICCARM__ )
26 | #pragma system_include /* treat file as system include file for MISRA check */
27 | #elif defined (__clang__)
28 | #pragma clang system_header /* treat file as system include file */
29 | #endif
30 |
31 | #ifndef __CMSIS_VERSION_H
32 | #define __CMSIS_VERSION_H
33 |
34 | /* CMSIS Version definitions */
35 | #define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */
36 | #define __CM_CMSIS_VERSION_SUB ( 3U) /*!< [15:0] CMSIS Core(M) sub version */
37 | #define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \
38 | __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */
39 | #endif
40 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/CMSIS/Include/tz_context.h:
--------------------------------------------------------------------------------
1 | /******************************************************************************
2 | * @file tz_context.h
3 | * @brief Context Management for Armv8-M TrustZone
4 | * @version V1.0.1
5 | * @date 10. January 2018
6 | ******************************************************************************/
7 | /*
8 | * Copyright (c) 2017-2018 Arm Limited. All rights reserved.
9 | *
10 | * SPDX-License-Identifier: Apache-2.0
11 | *
12 | * Licensed under the Apache License, Version 2.0 (the License); you may
13 | * not use this file except in compliance with the License.
14 | * You may obtain a copy of the License at
15 | *
16 | * www.apache.org/licenses/LICENSE-2.0
17 | *
18 | * Unless required by applicable law or agreed to in writing, software
19 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 | * See the License for the specific language governing permissions and
22 | * limitations under the License.
23 | */
24 |
25 | #if defined ( __ICCARM__ )
26 | #pragma system_include /* treat file as system include file for MISRA check */
27 | #elif defined (__clang__)
28 | #pragma clang system_header /* treat file as system include file */
29 | #endif
30 |
31 | #ifndef TZ_CONTEXT_H
32 | #define TZ_CONTEXT_H
33 |
34 | #include
35 |
36 | #ifndef TZ_MODULEID_T
37 | #define TZ_MODULEID_T
38 | /// \details Data type that identifies secure software modules called by a process.
39 | typedef uint32_t TZ_ModuleId_t;
40 | #endif
41 |
42 | /// \details TZ Memory ID identifies an allocated memory slot.
43 | typedef uint32_t TZ_MemoryId_t;
44 |
45 | /// Initialize secure context memory system
46 | /// \return execution status (1: success, 0: error)
47 | uint32_t TZ_InitContextSystem_S (void);
48 |
49 | /// Allocate context memory for calling secure software modules in TrustZone
50 | /// \param[in] module identifies software modules called from non-secure mode
51 | /// \return value != 0 id TrustZone memory slot identifier
52 | /// \return value 0 no memory available or internal error
53 | TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module);
54 |
55 | /// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S
56 | /// \param[in] id TrustZone memory slot identifier
57 | /// \return execution status (1: success, 0: error)
58 | uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id);
59 |
60 | /// Load secure context (called on RTOS thread context switch)
61 | /// \param[in] id TrustZone memory slot identifier
62 | /// \return execution status (1: success, 0: error)
63 | uint32_t TZ_LoadContext_S (TZ_MemoryId_t id);
64 |
65 | /// Store secure context (called on RTOS thread context switch)
66 | /// \param[in] id TrustZone memory slot identifier
67 | /// \return execution status (1: success, 0: error)
68 | uint32_t TZ_StoreContext_S (TZ_MemoryId_t id);
69 |
70 | #endif // TZ_CONTEXT_H
71 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_hal_flash_ex.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_flash_ex.h
4 | * @author MCD Application Team
5 | * @brief Header file of FLASH HAL Extended module.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file in
13 | * the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | ******************************************************************************
16 | */
17 |
18 | /* Define to prevent recursive inclusion -------------------------------------*/
19 | #ifndef STM32G0xx_HAL_FLASH_EX_H
20 | #define STM32G0xx_HAL_FLASH_EX_H
21 |
22 | #ifdef __cplusplus
23 | extern "C" {
24 | #endif
25 |
26 | /* Includes ------------------------------------------------------------------*/
27 | #include "stm32g0xx_hal_def.h"
28 |
29 | /** @addtogroup STM32G0xx_HAL_Driver
30 | * @{
31 | */
32 |
33 | /** @addtogroup FLASHEx
34 | * @{
35 | */
36 |
37 | /* Exported types ------------------------------------------------------------*/
38 | /* Exported constants --------------------------------------------------------*/
39 | /** @defgroup FLASHEx_Exported_Constants FLASH Exported Constants
40 | * @{
41 | */
42 | /** @defgroup FLASHEx_Empty_Check FLASHEx Empty Check
43 | * @{
44 | */
45 | #define FLASH_PROG_NOT_EMPTY 0x00000000u /*!< 1st location in Flash is programmed */
46 | #define FLASH_PROG_EMPTY FLASH_ACR_PROGEMPTY /*!< 1st location in Flash is empty */
47 | /**
48 | * @}
49 | */
50 | /**
51 | * @}
52 | */
53 |
54 | /* Exported macro ------------------------------------------------------------*/
55 | /* Exported functions --------------------------------------------------------*/
56 | /** @addtogroup FLASHEx_Exported_Functions
57 | * @{
58 | */
59 |
60 | /* Extended Program operation functions *************************************/
61 | /** @addtogroup FLASHEx_Exported_Functions_Group1
62 | * @{
63 | */
64 | HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);
65 | HAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);
66 | void HAL_FLASHEx_EnableDebugger(void);
67 | void HAL_FLASHEx_DisableDebugger(void);
68 | uint32_t HAL_FLASHEx_FlashEmptyCheck(void);
69 | void HAL_FLASHEx_ForceFlashEmpty(uint32_t FlashEmpty);
70 | #if defined(FLASH_SECURABLE_MEMORY_SUPPORT)
71 | void HAL_FLASHEx_EnableSecMemProtection(uint32_t Banks);
72 | #endif /* FLASH_SECURABLE_MEMORY_SUPPORT */
73 | HAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);
74 | void HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);
75 | /**
76 | * @}
77 | */
78 |
79 | /**
80 | * @}
81 | */
82 |
83 | /* Private macros ------------------------------------------------------------*/
84 | /** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants
85 | * @{
86 | */
87 | #define FLASH_PCROP_GRANULARITY_OFFSET 9u /*!< FLASH Code Readout Protection granularity offset */
88 | #define FLASH_PCROP_GRANULARITY (1UL << FLASH_PCROP_GRANULARITY_OFFSET) /*!< FLASH Code Readout Protection granularity, 512 Bytes */
89 | /**
90 | * @}
91 | */
92 |
93 |
94 | /** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros
95 | * @{
96 | */
97 | #define IS_FLASH_EMPTY_CHECK(__VALUE__) (((__VALUE__) == FLASH_PROG_EMPTY) || ((__VALUE__) == FLASH_PROG_NOT_EMPTY))
98 | void FLASH_PageErase(uint32_t Banks, uint32_t Page);
99 | /**
100 | * @}
101 | */
102 |
103 | /**
104 | * @}
105 | */
106 |
107 | /**
108 | * @}
109 | */
110 |
111 | #ifdef __cplusplus
112 | }
113 | #endif
114 |
115 | #endif /* STM32G0xx_HAL_FLASH_EX_H */
116 |
117 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/STM32G0xx_HAL_Driver/Inc/stm32g0xx_hal_spi_ex.h:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_spi_ex.h
4 | * @author MCD Application Team
5 | * @brief Header file of SPI HAL Extended module.
6 | ******************************************************************************
7 | * @attention
8 | *
9 | * Copyright (c) 2018 STMicroelectronics.
10 | * All rights reserved.
11 | *
12 | * This software is licensed under terms that can be found in the LICENSE file
13 | * in the root directory of this software component.
14 | * If no LICENSE file comes with this software, it is provided AS-IS.
15 | *
16 | ******************************************************************************
17 | */
18 |
19 | /* Define to prevent recursive inclusion -------------------------------------*/
20 | #ifndef STM32G0xx_HAL_SPI_EX_H
21 | #define STM32G0xx_HAL_SPI_EX_H
22 |
23 | #ifdef __cplusplus
24 | extern "C" {
25 | #endif
26 |
27 | /* Includes ------------------------------------------------------------------*/
28 | #include "stm32g0xx_hal_def.h"
29 |
30 | /** @addtogroup STM32G0xx_HAL_Driver
31 | * @{
32 | */
33 |
34 | /** @addtogroup SPIEx
35 | * @{
36 | */
37 |
38 | /* Exported types ------------------------------------------------------------*/
39 | /* Exported constants --------------------------------------------------------*/
40 | /* Exported macros -----------------------------------------------------------*/
41 | /* Exported functions --------------------------------------------------------*/
42 | /** @addtogroup SPIEx_Exported_Functions
43 | * @{
44 | */
45 |
46 | /* Initialization and de-initialization functions ****************************/
47 | /* IO operation functions *****************************************************/
48 | /** @addtogroup SPIEx_Exported_Functions_Group1
49 | * @{
50 | */
51 | HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi);
52 | /**
53 | * @}
54 | */
55 |
56 | /**
57 | * @}
58 | */
59 |
60 | /**
61 | * @}
62 | */
63 |
64 | /**
65 | * @}
66 | */
67 |
68 | #ifdef __cplusplus
69 | }
70 | #endif
71 |
72 | #endif /* STM32G0xx_HAL_SPI_EX_H */
73 |
74 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/STM32G0xx_HAL_Driver/LICENSE.txt:
--------------------------------------------------------------------------------
1 | This software component is provided to you as part of a software package and
2 | applicable license terms are in the Package_license file. If you received this
3 | software component outside of a package or without applicable license terms,
4 | the terms of the BSD-3-Clause license shall apply.
5 | You may obtain a copy of the BSD-3-Clause at:
6 | https://opensource.org/licenses/BSD-3-Clause
7 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/Drivers/STM32G0xx_HAL_Driver/Src/stm32g0xx_hal_spi_ex.c:
--------------------------------------------------------------------------------
1 | /**
2 | ******************************************************************************
3 | * @file stm32g0xx_hal_spi_ex.c
4 | * @author MCD Application Team
5 | * @brief Extended SPI HAL module driver.
6 | * This file provides firmware functions to manage the following
7 | * SPI peripheral extended functionalities :
8 | * + IO operation functions
9 | *
10 | ******************************************************************************
11 | * @attention
12 | *
13 | * Copyright (c) 2018 STMicroelectronics.
14 | * All rights reserved.
15 | *
16 | * This software is licensed under terms that can be found in the LICENSE file
17 | * in the root directory of this software component.
18 | * If no LICENSE file comes with this software, it is provided AS-IS.
19 | *
20 | ******************************************************************************
21 | */
22 |
23 | /* Includes ------------------------------------------------------------------*/
24 | #include "stm32g0xx_hal.h"
25 |
26 | /** @addtogroup STM32G0xx_HAL_Driver
27 | * @{
28 | */
29 |
30 | /** @defgroup SPIEx SPIEx
31 | * @brief SPI Extended HAL module driver
32 | * @{
33 | */
34 | #ifdef HAL_SPI_MODULE_ENABLED
35 |
36 | /* Private typedef -----------------------------------------------------------*/
37 | /* Private defines -----------------------------------------------------------*/
38 | /** @defgroup SPIEx_Private_Constants SPIEx Private Constants
39 | * @{
40 | */
41 | #define SPI_FIFO_SIZE 4UL
42 | /**
43 | * @}
44 | */
45 |
46 | /* Private macros ------------------------------------------------------------*/
47 | /* Private variables ---------------------------------------------------------*/
48 | /* Private function prototypes -----------------------------------------------*/
49 | /* Exported functions --------------------------------------------------------*/
50 |
51 | /** @defgroup SPIEx_Exported_Functions SPIEx Exported Functions
52 | * @{
53 | */
54 |
55 | /** @defgroup SPIEx_Exported_Functions_Group1 IO operation functions
56 | * @brief Data transfers functions
57 | *
58 | @verbatim
59 | ==============================================================================
60 | ##### IO operation functions #####
61 | ===============================================================================
62 | [..]
63 | This subsection provides a set of extended functions to manage the SPI
64 | data transfers.
65 |
66 | (#) Rx data flush function:
67 | (++) HAL_SPIEx_FlushRxFifo()
68 |
69 | @endverbatim
70 | * @{
71 | */
72 |
73 | /**
74 | * @brief Flush the RX fifo.
75 | * @param hspi pointer to a SPI_HandleTypeDef structure that contains
76 | * the configuration information for the specified SPI module.
77 | * @retval HAL status
78 | */
79 | HAL_StatusTypeDef HAL_SPIEx_FlushRxFifo(SPI_HandleTypeDef *hspi)
80 | {
81 | __IO uint32_t tmpreg;
82 | uint8_t count = 0U;
83 | while ((hspi->Instance->SR & SPI_FLAG_FRLVL) != SPI_FRLVL_EMPTY)
84 | {
85 | count++;
86 | tmpreg = hspi->Instance->DR;
87 | UNUSED(tmpreg); /* To avoid GCC warning */
88 | if (count == SPI_FIFO_SIZE)
89 | {
90 | return HAL_TIMEOUT;
91 | }
92 | }
93 | return HAL_OK;
94 | }
95 |
96 | /**
97 | * @}
98 | */
99 |
100 | /**
101 | * @}
102 | */
103 |
104 | #endif /* HAL_SPI_MODULE_ENABLED */
105 |
106 | /**
107 | * @}
108 | */
109 |
110 | /**
111 | * @}
112 | */
113 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/interim/Makefile:
--------------------------------------------------------------------------------
1 | BUILD_ARTIFACT_NAME := FdsKey
2 |
3 | # Add inputs and outputs from these tool invocations to the build variables
4 | EXECUTABLES += $(BUILD_ARTIFACT_NAME).elf
5 |
6 | OBJCOPY_BIN += $(BUILD_ARTIFACT_NAME).bin
7 |
8 | COMMIT_FILE := ../Core/Inc/commit.h
9 | LINKER_SCRIPT := ../STM32G0B0CETX_FLASH.ld
10 | SOURCES := $(shell find .. -type f -name '*.c' | sort -u)
11 | OBJS := $(patsubst %.c,%.o,$(SOURCES))
12 | ASM_SOURCES := $(shell find .. -type f -name '*.s' | sort -u)
13 | ASM_OBJS := $(patsubst %.s,%.o,$(ASM_SOURCES))
14 | H_DIRS= := $(shell find .. -type f -name '*.h' -exec dirname {} \; | sort -u)
15 | INCLUDES := $(addprefix -I,$(H_DIRS))
16 |
17 | # Main-build Target
18 | all: $(EXECUTABLES) $(OBJCOPY_BIN)
19 |
20 | # Tool invocations
21 | $(EXECUTABLES): $(OBJS) $(ASM_OBJS)
22 | arm-none-eabi-gcc -o "$(EXECUTABLES)" $(OBJS) $(ASM_OBJS) $(LIBS) -mcpu=cortex-m0plus -T"$(LINKER_SCRIPT)" --specs=nosys.specs -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
23 |
24 | $(OBJS): %.o: %.c pre-build
25 | arm-none-eabi-gcc "$<" $(INCLUDES) -mcpu=cortex-m0plus -std=gnu11 -DUSE_HAL_DRIVER -DSTM32G0B0xx -c -Ofast -ffunction-sections -fdata-sections -Wall -fstack-usage --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@"
26 |
27 | $(ASM_OBJS): %.o: %.s
28 | arm-none-eabi-gcc -x assembler-with-cpp "$<" -mcpu=cortex-m0plus -c --specs=nano.specs -mfloat-abi=soft -mthumb -o "$@"
29 |
30 | $(OBJCOPY_BIN): $(EXECUTABLES)
31 | arm-none-eabi-objcopy -O binary $(EXECUTABLES) "$(OBJCOPY_BIN)"
32 |
33 | clean:
34 | rm -rf $(EXECUTABLES) $(OBJCOPY_BIN) $(COMMIT_FILE)
35 | find .. -name *.o -delete
36 | find .. -name *.d -delete
37 |
38 | pre-build:
39 | echo "#define COMMIT \"$$(git rev-parse --short HEAD)$$(git diff-index --quiet HEAD -- || echo ' (dirty)')\"\n#define BUILD_DATE \"$$(TZ=UTC date +'%Y-%m-%d')\"\n#define BUILD_TIME \"$$(TZ=UTC date +'%H:%M:%S')\"\n#define INTERIM\n" > $(COMMIT_FILE)
40 |
41 | .PHONY: all clean pre-build
42 |
--------------------------------------------------------------------------------
/FdsKey_bootloader/interim/nano.specs:
--------------------------------------------------------------------------------
1 | %rename link nano_link
2 | %rename link_gcc_c_sequence nano_link_gcc_c_sequence
3 | %rename cpp_unique_options nano_cpp_unique_options
4 |
5 | *cpp_unique_options:
6 | -isystem =/include/newlib-nano %(nano_cpp_unique_options)
7 |
8 | *nano_libc:
9 | -lc_nano
10 |
11 | *nano_libgloss:
12 | %{specs=rdimon.specs:-lrdimon_nano} %{specs=nosys.specs:-lnosys}
13 |
14 | *link_gcc_c_sequence:
15 | %(nano_link_gcc_c_sequence) --start-group %G %(nano_libc) %(nano_libgloss) --end-group
16 |
17 | *link:
18 | %(nano_link) %:replace-outfile(-lc -lc_nano) %:replace-outfile(-lg -lg_nano) %:replace-outfile(-lrdimon -lrdimon_nano) %:replace-outfile(-lstdc++ -lstdc++_nano) %:replace-outfile(-lsupc++ -lsupc++_nano)
19 |
20 | *lib:
21 | %{!shared:%{g*:-lg_nano} %{!p:%{!pg:-lc_nano}}%{p:-lc_p}%{pg:-lc_p}}
22 |
23 |
--------------------------------------------------------------------------------
/FdsKey_circuit_diagram.dch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/FdsKey_circuit_diagram.dch
--------------------------------------------------------------------------------
/FdsKey_circuit_diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/FdsKey_circuit_diagram.png
--------------------------------------------------------------------------------
/FdsKey_pcb.dip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/FdsKey_pcb.dip
--------------------------------------------------------------------------------
/PCB_gerbers/BoardOutline.gbr:
--------------------------------------------------------------------------------
1 | G04 DipTrace 4.3.0.3*
2 | G04 BoardOutline.gbr*
3 | %MOIN*%
4 | G04 #@! TF.FileFunction,Profile*
5 | G04 #@! TF.Part,Single*
6 | %ADD12C,0.005512*%
7 | %FSLAX26Y26*%
8 | G04*
9 | G70*
10 | G90*
11 | G75*
12 | G01*
13 | G04 BoardOutline*
14 | %LPD*%
15 | X393701Y447274D2*
16 | D12*
17 | Y1052629D1*
18 | X884941D1*
19 | Y1106201D1*
20 | X2228692D1*
21 | Y1049951D1*
22 | X2325566D1*
23 | Y1106201D1*
24 | X3149606Y1106211D1*
25 | Y393701D1*
26 | X2325566D1*
27 | Y449951D1*
28 | X2228692D1*
29 | X2228690Y393701D1*
30 | X884941D1*
31 | Y447274D1*
32 | X393701D1*
33 | M02*
34 |
--------------------------------------------------------------------------------
/PCB_gerbers/BottomMask.gbr:
--------------------------------------------------------------------------------
1 | G04 DipTrace 4.3.0.3*
2 | G04 BottomMask.gbr*
3 | %MOIN*%
4 | G04 #@! TF.FileFunction,Soldermask,Bot*
5 | G04 #@! TF.Part,Single*
6 | %ADD26R,0.070866X0.070866*%
7 | %ADD27C,0.070866*%
8 | %ADD32C,0.03937*%
9 | %ADD43C,0.074803*%
10 | %ADD44R,0.074803X0.074803*%
11 | %ADD47R,0.090551X0.051181*%
12 | %ADD49R,0.059055X0.051181*%
13 | %ADD51R,0.059055X0.066929*%
14 | %ADD53R,0.082677X0.031496*%
15 | %ADD55R,0.259843X0.074803*%
16 | %FSLAX26Y26*%
17 | G04*
18 | G70*
19 | G90*
20 | G75*
21 | G01*
22 | G04 BotMask*
23 | %LPD*%
24 | G36*
25 | X683883Y1062451D2*
26 | X390921D1*
27 | Y437451D1*
28 | X683883D1*
29 | Y1062451D1*
30 | G37*
31 | D55*
32 | X540576Y499951D3*
33 | Y599951D3*
34 | Y699951D3*
35 | Y799951D3*
36 | Y899951D3*
37 | Y999951D3*
38 | D53*
39 | X2566192Y656448D3*
40 | Y699755D3*
41 | Y743062D3*
42 | Y786369D3*
43 | Y829676D3*
44 | Y872983D3*
45 | Y916290D3*
46 | Y959597D3*
47 | Y1002904D3*
48 | D51*
49 | X2593751Y475345D3*
50 | D49*
51 | Y1050148D3*
52 | D47*
53 | X2971703D3*
54 | Y439912D3*
55 | D32*
56 | X2987451Y624951D3*
57 | Y939912D3*
58 | D26*
59 | X1484941Y1037451D3*
60 | D27*
61 | X1584941D3*
62 | X1684941D3*
63 | X1784941D3*
64 | X1884941D3*
65 | X1984941D3*
66 | D44*
67 | X1001285Y576614D3*
68 | D43*
69 | Y676614D3*
70 | Y776614D3*
71 | Y876614D3*
72 | M02*
73 |
--------------------------------------------------------------------------------
/PCB_gerbers/BottomPaste.gbr:
--------------------------------------------------------------------------------
1 | G04 DipTrace 4.3.0.3*
2 | G04 BottomPaste.gbr*
3 | %MOIN*%
4 | G04 #@! TF.FileFunction,Paste,Bot*
5 | G04 #@! TF.Part,Single*
6 | %ADD48R,0.082677X0.043307*%
7 | %ADD50R,0.051181X0.043307*%
8 | %ADD52R,0.051181X0.059055*%
9 | %ADD54R,0.074803X0.023622*%
10 | %ADD56R,0.251969X0.066929*%
11 | %FSLAX26Y26*%
12 | G04*
13 | G70*
14 | G90*
15 | G75*
16 | G01*
17 | G04 BotPaste*
18 | %LPD*%
19 | D56*
20 | X540576Y499951D3*
21 | Y599951D3*
22 | Y699951D3*
23 | Y799951D3*
24 | Y899951D3*
25 | Y999951D3*
26 | D54*
27 | X2566192Y656448D3*
28 | Y699755D3*
29 | Y743062D3*
30 | Y786369D3*
31 | Y829676D3*
32 | Y872983D3*
33 | Y916290D3*
34 | Y959597D3*
35 | Y1002904D3*
36 | D52*
37 | X2593751Y475345D3*
38 | D50*
39 | Y1050148D3*
40 | D48*
41 | X2971703D3*
42 | Y439912D3*
43 | M02*
44 |
--------------------------------------------------------------------------------
/PCB_gerbers/Through.drl:
--------------------------------------------------------------------------------
1 | M48
2 | INCH
3 | T01C0.0079
4 | T02C0.0315
5 | T03C0.0394
6 | T04C0.0433
7 | %
8 | T01
9 | X+010787Y+005875
10 | X+010787Y+006062
11 | X+010787Y+006250
12 | X+011099Y+006125
13 | X+011599Y+006125
14 | X+012099Y+006125
15 | X+013162Y+006281
16 | X+013912Y+005625
17 | X+013162Y+004968
18 | X+012099Y+004968
19 | X+011599Y+004968
20 | X+011099Y+004968
21 | X+010787Y+005250
22 | X+010787Y+005687
23 | X+009193Y+006000
24 | X+008787Y+006000
25 | X+008506Y+006500
26 | X+009193Y+006500
27 | X+009193Y+007500
28 | X+008506Y+007500
29 | X+007818Y+007500
30 | X+007037Y+007500
31 | X+007037Y+008468
32 | X+007818Y+008468
33 | X+008506Y+008468
34 | X+009287Y+008468
35 | X+009287Y+009687
36 | X+008506Y+009687
37 | X+007818Y+009468
38 | X+007037Y+009468
39 | X+007037Y+010281
40 | X+007818Y+010281
41 | X+009037Y+010875
42 | X+010068Y+009687
43 | X+010849Y+009687
44 | X+011724Y+009406
45 | X+011818Y+008468
46 | X+013193Y+009406
47 | X+012912Y+010218
48 | X+014037Y+010000
49 | X+014162Y+009187
50 | X+014599Y+008062
51 | X+015849Y+007500
52 | X+016029Y+007500
53 | X+016193Y+007500
54 | X+016631Y+007250
55 | X+017506Y+007250
56 | X+018131Y+007045
57 | X+017662Y+006062
58 | X+019131Y+006062
59 | X+019929Y+005656
60 | X+020474Y+005875
61 | X+020912Y+005875
62 | X+021724Y+005312
63 | X+021724Y+004500
64 | X+020724Y+004500
65 | X+019724Y+004500
66 | X+018724Y+004500
67 | X+017724Y+004500
68 | X+016724Y+004500
69 | X+015724Y+004500
70 | X+015724Y+005500
71 | X+015553Y+006578
72 | X+014662Y+006281
73 | X+014724Y+004500
74 | X+016068Y+008062
75 | X+019131Y+007843
76 | X+020349Y+007968
77 | X+020520Y+007982
78 | X+020693Y+007968
79 | X+020818Y+007437
80 | X+021099Y+007500
81 | X+021287Y+007718
82 | X+021724Y+008500
83 | X+021724Y+009500
84 | X+021724Y+010500
85 | X+023381Y+009531
86 | X+023724Y+010500
87 | X+024724Y+010500
88 | X+024662Y+009812
89 | X+025068Y+009375
90 | X+024662Y+008937
91 | X+025068Y+008531
92 | X+024506Y+007625
93 | X+024256Y+007218
94 | X+023662Y+007625
95 | X+023756Y+007864
96 | X+023162Y+008156
97 | X+022943Y+008593
98 | X+022631Y+007864
99 | X+022443Y+007625
100 | X+022318Y+007343
101 | X+022724Y+007437
102 | X+023443Y+006468
103 | X+023131Y+005312
104 | X+023724Y+004500
105 | X+024724Y+004500
106 | X+024724Y+005500
107 | X+025724Y+005500
108 | X+026724Y+005500
109 | X+026724Y+004500
110 | X+027724Y+004500
111 | X+028724Y+004500
112 | X+029724Y+005500
113 | X+030724Y+005500
114 | X+031318Y+004125
115 | X+030724Y+008500
116 | X+029724Y+008500
117 | X+028724Y+008500
118 | X+027724Y+008500
119 | X+027724Y+007500
120 | X+026724Y+008500
121 | X+026724Y+010500
122 | X+027724Y+010500
123 | X+028724Y+010500
124 | X+031318Y+010875
125 | X+024724Y+006500
126 | X+019568Y+009156
127 | X+009037Y+004125
128 | X+008412Y+005250
129 | X+007818Y+005500
130 | X+007037Y+005500
131 | X+007037Y+004687
132 | X+007818Y+004687
133 | X+007568Y+006281
134 | X+007037Y+006500
135 | T02
136 | X+010013Y+005766
137 | X+010013Y+006766
138 | X+010013Y+007766
139 | X+010013Y+008766
140 | T03
141 | X+029875Y+006250
142 | X+029875Y+009399
143 | T04
144 | X+014849Y+010375
145 | X+015849Y+010375
146 | X+016849Y+010375
147 | X+017849Y+010375
148 | X+018849Y+010375
149 | X+019849Y+010375
150 | T00
151 | M30
152 |
--------------------------------------------------------------------------------
/case_3d_models/fdm/bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/fdm/bottom.stl
--------------------------------------------------------------------------------
/case_3d_models/fdm/buttons.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/fdm/buttons.stl
--------------------------------------------------------------------------------
/case_3d_models/fdm/top.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/fdm/top.stl
--------------------------------------------------------------------------------
/case_3d_models/mjf/bottom.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/mjf/bottom.stl
--------------------------------------------------------------------------------
/case_3d_models/mjf/buttons.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/mjf/buttons.stl
--------------------------------------------------------------------------------
/case_3d_models/mjf/top.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/case_3d_models/mjf/top.stl
--------------------------------------------------------------------------------
/fonts/1_Minecraft-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/1_Minecraft-Regular.otf
--------------------------------------------------------------------------------
/fonts/Arial_Rounded_MT_Bold_20.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Arial_Rounded_MT_Bold_20.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_12.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_12.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_16.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_16.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_20.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_20.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_24.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_24.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_28.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_28.RHF
--------------------------------------------------------------------------------
/fonts/Berlin_Sans_FB_8.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Berlin_Sans_FB_8.RHF
--------------------------------------------------------------------------------
/fonts/Digits1.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Digits1.RHF
--------------------------------------------------------------------------------
/fonts/Digits2.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Digits2.RHF
--------------------------------------------------------------------------------
/fonts/Diskun-epmp.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Diskun-epmp.ttf
--------------------------------------------------------------------------------
/fonts/Diskun22.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Diskun22.RHF
--------------------------------------------------------------------------------
/fonts/Diskun22_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Diskun22_bold.RHF
--------------------------------------------------------------------------------
/fonts/Diskun28.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Diskun28.RHF
--------------------------------------------------------------------------------
/fonts/Diskun28_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Diskun28_bold.RHF
--------------------------------------------------------------------------------
/fonts/Gamegirl_Classic_12.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Gamegirl_Classic_12.RHF
--------------------------------------------------------------------------------
/fonts/Gamegirl_Classic_6.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Gamegirl_Classic_6.RHF
--------------------------------------------------------------------------------
/fonts/Haettenschweiler_18.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Haettenschweiler_18.RHF
--------------------------------------------------------------------------------
/fonts/Haettenschweiler_23.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Haettenschweiler_23.RHF
--------------------------------------------------------------------------------
/fonts/Haettenschweiler_28.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Haettenschweiler_28.RHF
--------------------------------------------------------------------------------
/fonts/Impact_12.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_12.RHF
--------------------------------------------------------------------------------
/fonts/Impact_12_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_12_bold.RHF
--------------------------------------------------------------------------------
/fonts/Impact_14.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_14.RHF
--------------------------------------------------------------------------------
/fonts/Impact_14bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_14bold.RHF
--------------------------------------------------------------------------------
/fonts/Impact_16.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_16.RHF
--------------------------------------------------------------------------------
/fonts/Impact_18.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_18.RHF
--------------------------------------------------------------------------------
/fonts/Impact_20.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_20.RHF
--------------------------------------------------------------------------------
/fonts/Impact_22.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_22.RHF
--------------------------------------------------------------------------------
/fonts/Impact_24.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_24.RHF
--------------------------------------------------------------------------------
/fonts/Impact_27.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_27.RHF
--------------------------------------------------------------------------------
/fonts/Impact_30.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Impact_30.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_12.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_12.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_12_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_12_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_13_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_13_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_14.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_14.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_14_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_14_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_16.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_16.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_16_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_16_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_18.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_18.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_18_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_18_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_20.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_20.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_20_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_20_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_22.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_22.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_22_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_22_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_24.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_24.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_24_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_24_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_26.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_26.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_26_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_26_bold.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_28.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_28.RHF
--------------------------------------------------------------------------------
/fonts/Verdana_28_bold.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/Verdana_28_bold.RHF
--------------------------------------------------------------------------------
/fonts/slim8.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/slim8.RHF
--------------------------------------------------------------------------------
/fonts/stan0753.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/stan0753.ttf
--------------------------------------------------------------------------------
/fonts/standard_12.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/standard_12.RHF
--------------------------------------------------------------------------------
/fonts/standard_6.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/standard_6.RHF
--------------------------------------------------------------------------------
/fonts/ultraslim8.RHF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/fonts/ultraslim8.RHF
--------------------------------------------------------------------------------
/images/card_1a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_1a.png
--------------------------------------------------------------------------------
/images/card_1b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_1b.png
--------------------------------------------------------------------------------
/images/card_2a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_2a.png
--------------------------------------------------------------------------------
/images/card_2b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_2b.png
--------------------------------------------------------------------------------
/images/card_3a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_3a.png
--------------------------------------------------------------------------------
/images/card_3b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_3b.png
--------------------------------------------------------------------------------
/images/card_4a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_4a.png
--------------------------------------------------------------------------------
/images/card_4b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_4b.png
--------------------------------------------------------------------------------
/images/card_a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_a.png
--------------------------------------------------------------------------------
/images/card_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_b.png
--------------------------------------------------------------------------------
/images/card_single.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_single.png
--------------------------------------------------------------------------------
/images/card_unknown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/card_unknown.png
--------------------------------------------------------------------------------
/images/cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/cursor.png
--------------------------------------------------------------------------------
/images/cursor_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/cursor_down.png
--------------------------------------------------------------------------------
/images/cursor_down_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/cursor_down_w.png
--------------------------------------------------------------------------------
/images/cursor_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/cursor_up.png
--------------------------------------------------------------------------------
/images/cursor_up_w.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/cursor_up_w.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_0.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_1.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_2.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_3.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_4.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_5.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_6.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_7.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_8.png
--------------------------------------------------------------------------------
/images/disk_flip_frame_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/disk_flip_frame_9.png
--------------------------------------------------------------------------------
/images/emu_screen.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/emu_screen.psd
--------------------------------------------------------------------------------
/images/folder6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/folder6.png
--------------------------------------------------------------------------------
/images/head_cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/head_cursor.png
--------------------------------------------------------------------------------
/images/large_cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/large_cursor.png
--------------------------------------------------------------------------------
/images/medium_cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/medium_cursor.png
--------------------------------------------------------------------------------
/images/microsd_hor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/microsd_hor.png
--------------------------------------------------------------------------------
/images/state_ff.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/state_ff.png
--------------------------------------------------------------------------------
/images/state_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/state_pause.png
--------------------------------------------------------------------------------
/images/state_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/state_play.png
--------------------------------------------------------------------------------
/images/state_rec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/state_rec.png
--------------------------------------------------------------------------------
/images/state_rewind.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images/state_rewind.png
--------------------------------------------------------------------------------
/images_bootloader/cogs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images_bootloader/cogs.png
--------------------------------------------------------------------------------
/images_bootloader/medium_cursor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/images_bootloader/medium_cursor.png
--------------------------------------------------------------------------------
/tools/FontsParser.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETCoreApp,Version=v6.0",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETCoreApp,Version=v6.0": {
9 | "FontsParser/1.0.0": {
10 | "runtime": {
11 | "FontsParser.dll": {}
12 | }
13 | }
14 | }
15 | },
16 | "libraries": {
17 | "FontsParser/1.0.0": {
18 | "type": "project",
19 | "serviceable": false,
20 | "sha512": ""
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/tools/FontsParser.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/FontsParser.dll
--------------------------------------------------------------------------------
/tools/FontsParser.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/FontsParser.exe
--------------------------------------------------------------------------------
/tools/FontsParser.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/FontsParser.pdb
--------------------------------------------------------------------------------
/tools/FontsParser.runtimeconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "tfm": "net6.0",
4 | "framework": {
5 | "name": "Microsoft.NETCore.App",
6 | "version": "6.0.0"
7 | },
8 | "configProperties": {
9 | "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/tools/ImageParser.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETCoreApp,Version=v6.0",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETCoreApp,Version=v6.0": {
9 | "ImageParser/1.0.0": {
10 | "runtime": {
11 | "ImageParser.dll": {}
12 | }
13 | }
14 | }
15 | },
16 | "libraries": {
17 | "ImageParser/1.0.0": {
18 | "type": "project",
19 | "serviceable": false,
20 | "sha512": ""
21 | }
22 | }
23 | }
--------------------------------------------------------------------------------
/tools/ImageParser.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/ImageParser.dll
--------------------------------------------------------------------------------
/tools/ImageParser.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/ImageParser.exe
--------------------------------------------------------------------------------
/tools/ImageParser.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/ImageParser.pdb
--------------------------------------------------------------------------------
/tools/ImageParser.runtimeconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "tfm": "net6.0",
4 | "framework": {
5 | "name": "Microsoft.NETCore.App",
6 | "version": "6.0.0"
7 | },
8 | "configProperties": {
9 | "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/tools/Images2Code.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETCoreApp,Version=v6.0",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETCoreApp,Version=v6.0": {
9 | "Images2Code/1.0.0": {
10 | "dependencies": {
11 | "SkiaSharp": "2.88.3",
12 | "SkiaSharp.NativeAssets.Linux.NoDependencies": "2.88.3"
13 | },
14 | "runtime": {
15 | "Images2Code.dll": {}
16 | }
17 | },
18 | "SkiaSharp/2.88.3": {
19 | "dependencies": {
20 | "SkiaSharp.NativeAssets.Win32": "2.88.3",
21 | "SkiaSharp.NativeAssets.macOS": "2.88.3"
22 | },
23 | "runtime": {
24 | "lib/net6.0/SkiaSharp.dll": {
25 | "assemblyVersion": "2.88.0.0",
26 | "fileVersion": "2.88.3.0"
27 | }
28 | }
29 | },
30 | "SkiaSharp.NativeAssets.Linux.NoDependencies/2.88.3": {
31 | "dependencies": {
32 | "SkiaSharp": "2.88.3"
33 | },
34 | "runtimeTargets": {
35 | "runtimes/linux-arm/native/libSkiaSharp.so": {
36 | "rid": "linux-arm",
37 | "assetType": "native",
38 | "fileVersion": "0.0.0.0"
39 | },
40 | "runtimes/linux-arm64/native/libSkiaSharp.so": {
41 | "rid": "linux-arm64",
42 | "assetType": "native",
43 | "fileVersion": "0.0.0.0"
44 | },
45 | "runtimes/linux-musl-x64/native/libSkiaSharp.so": {
46 | "rid": "linux-musl-x64",
47 | "assetType": "native",
48 | "fileVersion": "0.0.0.0"
49 | },
50 | "runtimes/linux-x64/native/libSkiaSharp.so": {
51 | "rid": "linux-x64",
52 | "assetType": "native",
53 | "fileVersion": "0.0.0.0"
54 | }
55 | }
56 | },
57 | "SkiaSharp.NativeAssets.macOS/2.88.3": {
58 | "runtimeTargets": {
59 | "runtimes/osx/native/libSkiaSharp.dylib": {
60 | "rid": "osx",
61 | "assetType": "native",
62 | "fileVersion": "0.0.0.0"
63 | }
64 | }
65 | },
66 | "SkiaSharp.NativeAssets.Win32/2.88.3": {
67 | "runtimeTargets": {
68 | "runtimes/win-arm64/native/libSkiaSharp.dll": {
69 | "rid": "win-arm64",
70 | "assetType": "native",
71 | "fileVersion": "0.0.0.0"
72 | },
73 | "runtimes/win-x64/native/libSkiaSharp.dll": {
74 | "rid": "win-x64",
75 | "assetType": "native",
76 | "fileVersion": "0.0.0.0"
77 | },
78 | "runtimes/win-x86/native/libSkiaSharp.dll": {
79 | "rid": "win-x86",
80 | "assetType": "native",
81 | "fileVersion": "0.0.0.0"
82 | }
83 | }
84 | }
85 | }
86 | },
87 | "libraries": {
88 | "Images2Code/1.0.0": {
89 | "type": "project",
90 | "serviceable": false,
91 | "sha512": ""
92 | },
93 | "SkiaSharp/2.88.3": {
94 | "type": "package",
95 | "serviceable": true,
96 | "sha512": "sha512-GG8X3EdfwyBfwjl639UIiOVOKEdeoqDgYrz0P1MUCnefXt9cofN+AK8YB/v1+5cLMr03ieWCQdDmPqnFIzSxZw==",
97 | "path": "skiasharp/2.88.3",
98 | "hashPath": "skiasharp.2.88.3.nupkg.sha512"
99 | },
100 | "SkiaSharp.NativeAssets.Linux.NoDependencies/2.88.3": {
101 | "type": "package",
102 | "serviceable": true,
103 | "sha512": "sha512-jBDBOw1Xwqi+1fRRDLNhBwiREvYMDM1N+A2FvjJ7F1Bg37PFrQIKOfYpf7RKD6vvMzS2oTvSQMC7RN1rfKbMrg==",
104 | "path": "skiasharp.nativeassets.linux.nodependencies/2.88.3",
105 | "hashPath": "skiasharp.nativeassets.linux.nodependencies.2.88.3.nupkg.sha512"
106 | },
107 | "SkiaSharp.NativeAssets.macOS/2.88.3": {
108 | "type": "package",
109 | "serviceable": true,
110 | "sha512": "sha512-CEbWAXMGFkPV3S1snBKK7jEG3+xud/9kmSAhu0BEUKKtlMdxx+Qal0U9bntQREM9QpqP5xLWZooodi8IlV8MEg==",
111 | "path": "skiasharp.nativeassets.macos/2.88.3",
112 | "hashPath": "skiasharp.nativeassets.macos.2.88.3.nupkg.sha512"
113 | },
114 | "SkiaSharp.NativeAssets.Win32/2.88.3": {
115 | "type": "package",
116 | "serviceable": true,
117 | "sha512": "sha512-MU4ASL8VAbTv5vSw1PoiWjjjpjtGhWtFYuJnrN4sNHFCePb2ohQij9JhSdqLLxk7RpRtWPdV93fbA53Pt+J0yw==",
118 | "path": "skiasharp.nativeassets.win32/2.88.3",
119 | "hashPath": "skiasharp.nativeassets.win32.2.88.3.nupkg.sha512"
120 | }
121 | }
122 | }
--------------------------------------------------------------------------------
/tools/Images2Code.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/Images2Code.dll
--------------------------------------------------------------------------------
/tools/Images2Code.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/Images2Code.exe
--------------------------------------------------------------------------------
/tools/Images2Code.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/Images2Code.pdb
--------------------------------------------------------------------------------
/tools/Images2Code.runtimeconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "tfm": "net6.0",
4 | "framework": {
5 | "name": "Microsoft.NETCore.App",
6 | "version": "6.0.0"
7 | },
8 | "configProperties": {
9 | "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/tools/SkiaSharp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/SkiaSharp.dll
--------------------------------------------------------------------------------
/tools/images.bat:
--------------------------------------------------------------------------------
1 | cd ..\images
2 | ..\tools\Images2Code.exe
3 | del ..\FdsKey\Core\Inc\images\*.h
4 | mv *.h ..\FdsKey\Core\Inc\images
5 | cd ..\FdsKey\Core\Inc\images
6 | ..\..\..\..\tools\ImageParser.exe
7 |
8 | cd ..\..\..\..\tools
9 |
10 | cd ..\images_bootloader
11 | ..\tools\Images2Code.exe
12 | del ..\FdsKey_bootloader\Core\Inc\images\*.h
13 | mv *.h ..\FdsKey_bootloader\Core\Inc\images
14 | cd ..\FdsKey_bootloader\Core\Inc\images
15 | ..\..\..\..\tools\ImageParser.exe
16 |
17 |
--------------------------------------------------------------------------------
/tools/runtimes/linux-arm/native/libSkiaSharp.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/linux-arm/native/libSkiaSharp.so
--------------------------------------------------------------------------------
/tools/runtimes/linux-arm64/native/libSkiaSharp.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/linux-arm64/native/libSkiaSharp.so
--------------------------------------------------------------------------------
/tools/runtimes/linux-musl-x64/native/libSkiaSharp.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/linux-musl-x64/native/libSkiaSharp.so
--------------------------------------------------------------------------------
/tools/runtimes/linux-x64/native/libSkiaSharp.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/linux-x64/native/libSkiaSharp.so
--------------------------------------------------------------------------------
/tools/runtimes/osx/native/libSkiaSharp.dylib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/osx/native/libSkiaSharp.dylib
--------------------------------------------------------------------------------
/tools/runtimes/win-arm64/native/libSkiaSharp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/win-arm64/native/libSkiaSharp.dll
--------------------------------------------------------------------------------
/tools/runtimes/win-x64/native/libSkiaSharp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/win-x64/native/libSkiaSharp.dll
--------------------------------------------------------------------------------
/tools/runtimes/win-x86/native/libSkiaSharp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ClusterM/fdskey/f07ab82864a9f4a2e7b14b37f1837715edb0d0fe/tools/runtimes/win-x86/native/libSkiaSharp.dll
--------------------------------------------------------------------------------