├── .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 --------------------------------------------------------------------------------