From bc7e846c9a7c1f23a4eabc786581fbc8c1700bff Mon Sep 17 00:00:00 2001 From: v1nc Date: Sun, 7 Aug 2022 21:29:40 +0200 Subject: [PATCH] add changes --- ReadMe.md | 153 +--- applications/VideoPoker/application.fam | 10 + applications/VideoPoker/poker.c | 814 ++++++++++++++++++ applications/chip8/application.fam | 10 + applications/chip8/chip8.c | 203 +++++ applications/chip8/chip8.h | 45 + applications/chip8/chip8_app.c | 89 ++ applications/chip8/chip8_app.h | 11 + applications/chip8/chip8_app_i.h | 33 + .../chip8/emulator_core/flipper_chip.c | 319 +++++++ .../chip8/emulator_core/flipper_chip.h | 74 ++ .../chip8/emulator_core/flipper_fonts.h | 30 + applications/chip8/scenes/chip8_scene.c | 26 + applications/chip8/scenes/chip8_scene.h | 25 + .../chip8/scenes/chip8_scene_config.h | 2 + .../chip8/scenes/chip8_scene_file_select.c | 45 + applications/chip8/scenes/chip8_scene_work.c | 90 ++ applications/chip8/views/chip8_view.c | 207 +++++ applications/chip8/views/chip8_view.h | 29 + applications/flappy_bird/application.fam | 10 + applications/flappy_bird/bird.h | 54 ++ applications/flappy_bird/flappy_bird.c | 258 ++++++ applications/game2048/application.fam | 10 + applications/game2048/font.c | 155 ++++ applications/game2048/font.h | 3 + applications/game2048/game_2048.c | 426 +++++++++ applications/game_of_life/application.fam | 10 + applications/game_of_life/game_of_life.c | 159 ++++ applications/meta/application.fam | 7 + applications/mouse_jiggler/application.fam | 10 + applications/mouse_jiggler/mouse_jiggler.c | 85 ++ applications/wav_player/application.fam | 9 + applications/wav_player/wav_parser.c | 84 ++ applications/wav_player/wav_parser.h | 51 ++ applications/wav_player/wav_player.c | 298 +++++++ applications/wav_player/wav_player_hal.c | 58 ++ applications/wav_player/wav_player_hal.h | 23 + applications/wav_player/wav_player_view.c | 214 +++++ applications/wav_player/wav_player_view.h | 45 + documentation/HowToBuild.md | 2 +- logo.png | Bin 0 -> 276539 bytes scripts/version.py | 2 +- site_scons/cc.scons | 1 - 43 files changed, 4057 insertions(+), 132 deletions(-) create mode 100644 applications/VideoPoker/application.fam create mode 100644 applications/VideoPoker/poker.c create mode 100644 applications/chip8/application.fam create mode 100644 applications/chip8/chip8.c create mode 100644 applications/chip8/chip8.h create mode 100644 applications/chip8/chip8_app.c create mode 100644 applications/chip8/chip8_app.h create mode 100644 applications/chip8/chip8_app_i.h create mode 100644 applications/chip8/emulator_core/flipper_chip.c create mode 100644 applications/chip8/emulator_core/flipper_chip.h create mode 100644 applications/chip8/emulator_core/flipper_fonts.h create mode 100644 applications/chip8/scenes/chip8_scene.c create mode 100644 applications/chip8/scenes/chip8_scene.h create mode 100644 applications/chip8/scenes/chip8_scene_config.h create mode 100644 applications/chip8/scenes/chip8_scene_file_select.c create mode 100644 applications/chip8/scenes/chip8_scene_work.c create mode 100644 applications/chip8/views/chip8_view.c create mode 100644 applications/chip8/views/chip8_view.h create mode 100644 applications/flappy_bird/application.fam create mode 100644 applications/flappy_bird/bird.h create mode 100644 applications/flappy_bird/flappy_bird.c create mode 100644 applications/game2048/application.fam create mode 100644 applications/game2048/font.c create mode 100644 applications/game2048/font.h create mode 100644 applications/game2048/game_2048.c create mode 100644 applications/game_of_life/application.fam create mode 100644 applications/game_of_life/game_of_life.c create mode 100644 applications/mouse_jiggler/application.fam create mode 100644 applications/mouse_jiggler/mouse_jiggler.c create mode 100644 applications/wav_player/application.fam create mode 100644 applications/wav_player/wav_parser.c create mode 100644 applications/wav_player/wav_parser.h create mode 100644 applications/wav_player/wav_player.c create mode 100644 applications/wav_player/wav_player_hal.c create mode 100644 applications/wav_player/wav_player_hal.h create mode 100644 applications/wav_player/wav_player_view.c create mode 100644 applications/wav_player/wav_player_view.h create mode 100644 logo.png diff --git a/ReadMe.md b/ReadMe.md index 505b72e933..f1c0b091c3 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,146 +1,41 @@ -# Flipper Zero Unleashed Firmware +# v1nc flipper zero firmware + -fzCUSTOM +This is a fork of the [unleashed firmware](https://github.com/Eng1n33r/flipperzero-firmware). -Welcome to Flipper Zero's Custom Firmware repo! -Our goal is to make any features possible in this device without any limitations! +It is intended to be as vanilla as possible, with functional additions but no deeper changes to the flipper software. -Please help us implement emulation for all subghz dynamic (rolling code) protocols and static code brute-force app! +For any problem create an issue or check out the original firmware repo. -
+## Installation: +* download from [releases](https://github.com/v1nc/flipperzero-firmware/releases) +* [build](https://github.com/v1nc/flipperzero-firmware/blob/dev/documentation/HowToBuild.md) it yourself +## Fork changes: -### This software is for experimental purposes only and is not meant for any illegal activity/purposes.
We do not condone illegal activity and strongly encourage keeping transmissions to legal/valid uses allowed by law.
Also this software is made without any support from Flipper Devices and in no way related to official devs. - - -
-Our Discord Community: -
-Unofficial Discord Community - -
-
-
- -# What's changed -* SubGHz regional TX restrictions removed -* SubGHz frequecy range can be extended in settings file (Warning: It can damage flipper's hardware) -* Many rolling code protocols now have the ability to save & send captured signals -* FAAC SLH (Spa) & BFT Mitto (secure with seed) manual creation -* Custom community plugins and games added -* Extra SubGHz frequencies + extra Mifare Classic keys -* Picopass/iClass plugin included in releases -* Recompiled IR TV Universal Remote for ALL buttons -* Other small fixes and changes throughout +### BadUSB support for different layouts: -See changelog in releases for latest updates! +The great user [dummy-decoy](https://github.com/dummy-decoy) implemented loading layout files from the SD card, which was merged into the unleashed firmware. He also has a [good way](https://github.com/dummy-decoy/flipperzero_badusb_kl) to generate layout files. Because of this, the `DUCKY_LANG` support was removed. Maybe it will be added again in the future. You can find the last release supporting `DUCKY_LANG` [here](https://github.com/v1nc/flipperzero-firmware/releases/tag/v0.63.1.1-v1nc). -### Current modified and new SubGhz protocols list: -- HCS101 -- An-Motors -- CAME Atomo -- FAAC SLH (Spa) [if cloning existing remote - external seed calculation required] -- BFT Mitto [if cloning existing remote - external seed calculation required] -- Keeloq (+ proper manufacturer codes selection) [Not ALL systems supported yet!] -- Nice Flor S -- Security+ v1 & v2 -- Star Line +### additional plugins: +* [MouseJiggler](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/mouse_jiggler) +* [WAV Player](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/wav_player) -### Community apps included: +### additional games: +* [CHIP8 Emulator](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/chip8) +* [Flappy Bird](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/flappy_bird) +* [Video Poker](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/VideoPoker) +* [2048](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/game2048) +* [Game of Life](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/tree/unleashed/applications/game_of_life) -- ESP8266 Deauther plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module) -- WiFi Scanner plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module) -- UPC-A Barcode generator plugin [(by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) -- GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) -- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) -- NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker) -- HID Analyzer [(by Ownasaurus)](https://github.com/Ownasaurus/flipperzero-firmware/tree/hid-analyzer/applications/hid_analyzer) -- Simple Clock (fixed) !! New version WIP, wait for updates !! [(Original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61) -- UniversalRF Remix (with changes)(only RAW subghz files) [(by ESurge)(Original UniversalRF by jimilinuxguy)](https://github.com/ESurge/flipperzero-firmware-unirfremix) -- Tetris (with fixes) [(by jeffplang)](https://github.com/jeffplang/flipperzero-firmware/tree/tetris_game/applications/tetris_game) -- Spectrum Analyzer (with changes) [(by jolcese)](https://github.com/jolcese/flipperzero-firmware/tree/spectrum/applications/spectrum_analyzer) - [Ultra Narrow mode & scan channels non-consecutively](https://github.com/theY4Kman/flipperzero-firmware/commits?author=theY4Kman) -- Arkanoid (with fixes) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins) -- Tic Tac Toe (with fixes) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins) - -### Other changes +### This software is for experimental purposes only and is not meant for any illegal activity/purposes.
We do not condone illegal activity and strongly encourage keeping transmissions to legal/valid uses allowed by law.
Also this software is made without any support from Flipper Devices and in no way related to official devs. +### Please use for experimental purposes only! -- BadUSB Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout) -- New frequency analyzer - [(by ClusterM)](https://github.com/ClusterM) +## Support Unleashed Firmware developers so they can buy equipment and develop new features -## Support us so we can buy equipment and develop new features * ETH/BSC/ERC20-Tokens: `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a` * BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9` * DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv` * LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9` -**Big thanks to all sponsors!** - -# Instructions -## [- How to install firmware](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/HowToInstall.md) - -## [- How to build firmware](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/HowToBuild.md) - -## [- BadUSB: how to add new keyboard layouts](https://github.com/dummy-decoy/flipperzero_badusb_kl) - -### **Plugins** - -## [- Configure UniversalRF Remix App](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/UniRFRemix.md) - -## [- Barcode Generator](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/BarcodeGenerator.md) - -### **Plugins that works with external hardware** - -## [- How to use: [NRF24] plugins](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/NRF24.md) - -## [- How to use: [WiFi] Scanner](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme) - -## [- How to use: [ESP8266] Deauther](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module#readme) - -## [- How to use: [ESP32] WiFi Marauder](https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard) - -## [- [WiFi] Scanner - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/) - -## [- [ESP8266] Deauther - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-Wifi-ESP8266-Deauther-Module/) - -## [- Windows: How to Upload .bin to ESP32/ESP8266](https://github.com/SequoiaSan/Guide-How-To-Upload-bin-to-ESP8266-ESP32) - -## [- How to use: [GPIO] SentrySafe plugin](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/SentrySafe.md) - -### **SubGHz** - -## [- Transmission is blocked? - How to extend SubGHz frequency range](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/DangerousSettings.md) - -## [- How to add extra SubGHz frequencies](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/SubGHzSettings.md) - -
-
- -# Where I can find IR, SubGhz, ... files, DBs, and other stuff? -## [Awesome Flipper Zero - Github](https://github.com/djsime1/awesome-flipperzero) -## [UberGuidoZ Playground - Large collection of files - Github](https://github.com/UberGuidoZ/Flipper) - -
-
- -# Links - -* Unofficial Discord: [discord.gg/58D6E8BtTU](https://discord.gg/58D6E8BtTU) -* Docs by atmanos / How to write your own app (outdated API): [https://flipper.atmanos.com/docs/overview/intro](https://flipper.atmanos.com/docs/overview/intro) - -* Official Docs: [http://docs.flipperzero.one](http://docs.flipperzero.one) -* Official Forum: [forum.flipperzero.one](https://forum.flipperzero.one/) - -# Project structure - -- `applications` - Applications and services used in firmware -- `assets` - Assets used by applications and services -- `furi` - Furi Core: os level primitives and helpers -- `debug` - Debug tool: GDB-plugins, SVD-file and etc -- `docker` - Docker image sources (used for firmware build automation) -- `documentation` - Documentation generation system configs and input files -- `firmware` - Firmware source code -- `lib` - Our and 3rd party libraries, drivers and etc... -- `site_scons` - Build helpers -- `scripts` - Supplementary scripts and python libraries home - -Also pay attention to `ReadMe.md` files inside of those directories. +_logo generated with DALLE-2_ diff --git a/applications/VideoPoker/application.fam b/applications/VideoPoker/application.fam new file mode 100644 index 0000000000..ffb32fad3c --- /dev/null +++ b/applications/VideoPoker/application.fam @@ -0,0 +1,10 @@ +App( + appid="GAME_VideoPoker", + name="Video Poker", + apptype=FlipperAppType.GAME, + entry_point="video_poker_app", + cdefines=["APP_VIDEOPOKER_GAME"], + requires=["gui"], + stack_size=1 * 1024, + order=270, +) \ No newline at end of file diff --git a/applications/VideoPoker/poker.c b/applications/VideoPoker/poker.c new file mode 100644 index 0000000000..24ab8a2cb3 --- /dev/null +++ b/applications/VideoPoker/poker.c @@ -0,0 +1,814 @@ +#include +#include +#include +#include +#include +#include +#include +#include "assets_icons.h" +#include + +/* Core game logic from +https://github.com/Yaoir/VideoPoker-C +*/ + +/* KNOWN BUGS +This has been converted from a standalone PC console app to flipper +All of the original input/output handing code has been ripped out +Original code also used TONS of defines and everything was a global. +As is, it does what I wanted and doesn't seem to have major issues, so that's pretty good. +Game logic is handled during input and this is a bit of a mess of nested ifs. +Sometimes duplicate cards will show up. there is a function to test this. I should use it better. + +*/ + +#define TAG "Video Poker" + +static void Shake(void) { + NotificationApp* notification = furi_record_open("notification"); + notification_message(notification, &sequence_single_vibro); + furi_record_close("notification"); +} + +typedef struct { + int index; /* cards value, minus 1 */ + char* sym; /* text appearance */ + int suit; /* card's suit (see just below) */ + int gone; /* true if it's been dealt */ + int held; /* for hand */ +} PokerPlayer_card; + +typedef struct { + FuriMutex** model_mutex; + FuriMessageQueue* event_queue; + ViewPort* view_port; + Gui* gui; + PokerPlayer_card hand[5]; + PokerPlayer_card shand[5]; + PokerPlayer_card deck[52]; + int GameType; /* What rules are we using */ + int held[5]; + int score; + int highscore; + int pot; + int GameState; + int selected; + int bet; + int minbet; +} PokerPlayer; + +/* GameState +0=Splash/help, OK button (later on up/down for rules or settings) +1=cards down, betting enabled, left/right to change bet, OK to confirm +2=first hand, holding enabled, left/right to pick card, OK to hold/unhold card, down to confirm +3=second hand, only confirm to claim rewards +4=game over/won +5=WIP saving gamestate +*/ + +/* +#define AllAmerican 0 +#define TensOrBetter 1 +#define BonusPoker 2 +#define DoubleBonus 3 +#define DoubleBonusBonus 4 +#define JacksOrBetter 5 +#define JacksOrBetter95 6 +#define JacksOrBetter86 7 +#define JacksOrBetter85 8 +#define JacksOrBetter75 9 +#define JacksOrBetter65 10 +#define NUMGAMES 11 +*/ +/* + The game in play. Default is Jacks or Better, + which is coded into initialization of static data +*/ +const char* gamenames[11] = { + "All American", + "Tens or Better", + "Bonus Poker", + "Double Bonus", + "Double Bonus Bonus", + "Jacks or Better", + "9/5 Jacks or Better", + "8/6 Jacks or Better", + "8/5 Jacks or Better", + "7/5 Jacks or Better", + "6/5 Jacks or Better"}; + +PokerPlayer_card deck[52] = { + /* index, card name, suit, gone */ + /* Clubs:0 Diamonds:1 Hearts: 2 Spades: 3 */ + {1, "2", 0, 0, 0}, {2, "3", 0, 0, 0}, {3, "4", 0, 0, 0}, {4, "5", 0, 0, 0}, {5, "6", 0, 0, 0}, + {6, "7", 0, 0, 0}, {7, "8", 0, 0, 0}, {8, "9", 0, 0, 0}, {9, "10", 0, 0, 0}, {10, "J", 0, 0, 0}, + {11, "Q", 0, 0, 0}, {12, "K", 0, 0, 0}, {13, "A", 0, 0, 0}, + + {1, "2", 1, 0, 0}, {2, "3", 1, 0, 0}, {3, "4", 1, 0, 0}, {4, "5", 1, 0, 0}, {5, "6", 1, 0, 0}, + {6, "7", 1, 0, 0}, {7, "8", 1, 0, 0}, {8, "9", 1, 0, 0}, {9, "10", 1, 0, 0}, {10, "J", 1, 0, 0}, + {11, "Q", 1, 0, 0}, {12, "K", 1, 0, 0}, {13, "A", 1, 0, 0}, + + {1, "2", 2, 0, 0}, {2, "3", 2, 0, 0}, {3, "4", 2, 0, 0}, {4, "5", 2, 0, 0}, {5, "6", 2, 0, 0}, + {6, "7", 2, 0, 0}, {7, "8", 2, 0, 0}, {8, "9", 2, 0, 0}, {9, "10", 2, 0, 0}, {10, "J", 2, 0, 0}, + {11, "Q", 2, 0, 0}, {12, "K", 2, 0, 0}, {13, "A", 2, 0, 0}, + + {1, "2", 3, 0, 0}, {2, "3", 3, 0, 0}, {3, "4", 3, 0, 0}, {4, "5", 3, 0, 0}, {5, "6", 3, 0, 0}, + {6, "7", 3, 0, 0}, {7, "8", 3, 0, 0}, {8, "9", 3, 0, 0}, {9, "10", 3, 0, 0}, {10, "J", 3, 0, 0}, + {11, "Q", 3, 0, 0}, {12, "K", 3, 0, 0}, {13, "A", 3, 0, 0}, +}; + +/* +Image Format +0x01 = Compressed +0x00 = Reserved Section +0xa4,0x01 = 0x1a4, or, 420 - the size of the compressed array, minus this header. +Rest of the data is char array output from heatshrink of the original XBM char array. +Calculated Header: 0x01,0x00,0xa4,0x01 +from furi_hal_compress.c: +typedef struct { + uint8_t is_compressed; + uint8_t reserved; + uint16_t compressed_buff_size; +} FuriHalCompressHeader; +*/ + +const uint8_t _I_Splash_128x64_0[] = { + 0x01, 0x00, 0x8a, 0x02, 0x00, 0x78, 0x02, 0x60, 0xe0, 0x54, 0xc0, 0x03, 0x9f, 0xc0, 0x0f, 0x5a, + 0x04, 0x04, 0x1e, 0xdf, 0x08, 0x78, 0x0c, 0x60, 0xc0, 0x21, 0x90, 0x40, 0xa3, 0x00, 0xf5, 0xfe, + 0x61, 0xc1, 0xe9, 0x1e, 0x8e, 0x59, 0xf0, 0x02, 0x24, 0x9f, 0x70, 0xc0, 0x63, 0x03, 0x01, 0x0c, + 0x0b, 0xc1, 0x80, 0xbc, 0x83, 0xd3, 0x3f, 0x63, 0x98, 0x03, 0xcf, 0x88, 0x02, 0x1c, 0x31, 0x5d, + 0x38, 0xf6, 0x19, 0xc0, 0xa0, 0xfc, 0x93, 0x13, 0x12, 0xf0, 0x38, 0x76, 0x08, 0xc7, 0x00, 0x1e, + 0x5e, 0x8b, 0xcc, 0x32, 0x86, 0x0f, 0x4f, 0x0c, 0x80, 0x06, 0x20, 0x72, 0xe4, 0x5e, 0x33, 0xd4, + 0x73, 0xf2, 0x5d, 0xe2, 0x10, 0xef, 0xe6, 0x02, 0x0f, 0x07, 0x84, 0x4c, 0x33, 0xd2, 0x70, 0x79, + 0xd8, 0x2e, 0x11, 0x88, 0x3d, 0xff, 0xc1, 0xc7, 0x83, 0xc4, 0x20, 0x10, 0xc9, 0x18, 0x3d, 0x27, + 0x18, 0x8c, 0x3c, 0xde, 0xe1, 0xe6, 0x87, 0x7e, 0x0c, 0x62, 0x12, 0x10, 0x01, 0xce, 0x31, 0x9c, + 0x39, 0x9c, 0x62, 0x67, 0x0f, 0x83, 0x7f, 0x27, 0xe0, 0xf5, 0x8c, 0x71, 0xbc, 0x31, 0x8c, 0xc4, + 0xe2, 0x1e, 0x62, 0x1e, 0x02, 0xe0, 0x80, 0x05, 0x1c, 0xe1, 0xdc, 0x23, 0x97, 0xc8, 0xe4, 0x5c, + 0x12, 0x50, 0x40, 0x7a, 0x43, 0x38, 0x77, 0x88, 0xf4, 0x36, 0x3d, 0x1f, 0x04, 0x94, 0x20, 0x1e, + 0x98, 0xce, 0x0d, 0xbe, 0x37, 0x0d, 0xcd, 0xbd, 0x0c, 0x7e, 0xbe, 0xce, 0x07, 0x1f, 0xf3, 0xfc, + 0xf8, 0xb2, 0x8d, 0x30, 0x20, 0x53, 0xbe, 0x60, 0x06, 0x03, 0x78, 0xf0, 0x06, 0x4c, 0x1e, 0x34, + 0x10, 0x29, 0x5e, 0x05, 0x0f, 0x00, 0xa0, 0x40, 0x24, 0x20, 0x52, 0x76, 0x88, 0x01, 0xc1, 0xe3, + 0x11, 0x05, 0xc3, 0xe9, 0x20, 0x10, 0x97, 0x01, 0xcf, 0xc1, 0xf2, 0x81, 0x3f, 0xe7, 0xfc, 0x66, + 0xf4, 0x02, 0xf1, 0xc0, 0x3f, 0xdf, 0xf0, 0x30, 0xc6, 0x1e, 0xe5, 0xff, 0x81, 0xf0, 0x3f, 0xe5, + 0xb2, 0x80, 0x7f, 0xc1, 0xe5, 0x1c, 0x03, 0x0f, 0xe3, 0xff, 0x1f, 0xf8, 0x02, 0x48, 0x00, 0x31, + 0xfe, 0x0b, 0xa4, 0x61, 0xcc, 0x62, 0xfc, 0x4f, 0xe3, 0x0f, 0x31, 0x41, 0x0e, 0x02, 0x07, 0x01, + 0x07, 0x8a, 0xb4, 0xa3, 0x84, 0x71, 0x8f, 0xff, 0x20, 0x77, 0x00, 0x78, 0x95, 0x46, 0x06, 0x13, + 0x10, 0x78, 0xef, 0x3f, 0x5f, 0xfc, 0xff, 0xea, 0x07, 0xf0, 0x37, 0x90, 0x3c, 0x78, 0x00, 0xf2, + 0xae, 0x7f, 0x77, 0xf7, 0xaf, 0xec, 0x0f, 0x88, 0x41, 0x1b, 0x06, 0x02, 0x03, 0xc0, 0x02, 0x8c, + 0x08, 0x5c, 0x37, 0xff, 0xa9, 0x3c, 0x7b, 0xcc, 0x52, 0xe0, 0x70, 0x7c, 0x31, 0x89, 0xe4, 0xff, + 0xfb, 0xff, 0xdf, 0x8c, 0x46, 0x03, 0x1f, 0x34, 0x17, 0x83, 0xe1, 0x71, 0x8f, 0x6f, 0xe7, 0xe0, + 0xc1, 0x8f, 0xfd, 0x20, 0x18, 0x65, 0x59, 0x47, 0xaf, 0x9b, 0x8b, 0x9e, 0x6f, 0xe7, 0x1f, 0x16, + 0x0c, 0x3e, 0x3d, 0x00, 0xe4, 0x43, 0xd1, 0xe5, 0x3f, 0xe6, 0x6e, 0xfb, 0x39, 0x88, 0x67, 0xea, + 0xff, 0xc5, 0x22, 0x8f, 0xc0, 0xf0, 0x41, 0x71, 0xe7, 0x76, 0xf9, 0x98, 0x48, 0x64, 0x17, 0x59, + 0x38, 0x05, 0x8f, 0xc0, 0xd0, 0x5f, 0xe8, 0x0f, 0x1a, 0xdb, 0xe6, 0xb1, 0xd1, 0xa0, 0x50, 0x85, + 0x59, 0x7e, 0x16, 0x05, 0x06, 0x80, 0x71, 0xbf, 0xf7, 0x19, 0x85, 0x99, 0x74, 0x6d, 0x31, 0x02, + 0x10, 0x88, 0x7c, 0xdd, 0xdb, 0x84, 0x62, 0x7c, 0x0f, 0x38, 0xe5, 0xf0, 0x1e, 0x97, 0xce, 0x67, + 0xbc, 0xb6, 0x40, 0xa3, 0x98, 0x00, 0xc5, 0x76, 0x53, 0x8c, 0x67, 0x1e, 0x07, 0x0e, 0x63, 0x0a, + 0xe4, 0x9c, 0x62, 0x0f, 0x11, 0x41, 0x95, 0x88, 0x1e, 0x41, 0xd1, 0x8c, 0x49, 0x80, 0xe6, 0x00, + 0x50, 0xb8, 0xa3, 0x07, 0xf1, 0x7f, 0x06, 0xb8, 0x00, 0x61, 0xce, 0xb2, 0x9c, 0x53, 0x01, 0xf3, + 0xf0, 0x55, 0x97, 0xd0, 0x3f, 0x40, 0x03, 0xfd, 0x33, 0xc8, 0x01, 0x71, 0x92, 0x78, 0x80, 0x2f, + 0x80, 0x6f, 0x20, 0x03, 0xff, 0x23, 0xe7, 0x02, 0x02, 0x18, 0x01, 0xa3, 0x91, 0x00, 0x18, 0xc3, + 0x20, 0x91, 0xc0, 0x7c, 0x7f, 0x83, 0x42, 0xaa, 0x1f, 0xe0, 0xbe, 0x60, 0x46, 0xa2, 0x81, 0xe2, + 0x24, 0x21, 0xf9, 0x54, 0x14, 0x18, 0x9e, 0x3f, 0xe4, 0x29, 0x00, 0x12, 0x0e, 0xb0, 0x28, 0x50, + 0x3c, 0x60, 0x50, 0x85, 0xf4, 0x7f, 0xb8, 0x3f, 0xf3, 0xf8, 0x83, 0xe0, 0x00, 0x38, 0x6e, 0x0c, + 0xc3, 0xf2, 0x2f, 0x94, 0x09, 0x07, 0xc7, 0xf7, 0x3f, 0xfe, 0x0d, 0xc4, 0x00, 0xfc, 0x4c, 0x05, + 0x86, 0x15, 0x23, 0x92, 0x03, 0xe7, 0xf9, 0x80, 0x0f, 0x97, 0x52, 0x0c, 0x2f, 0xb1, 0xf8, 0xe3, + 0x01, 0xf3, 0x82, 0x27, 0x8d, 0xe6, 0x41, 0x1c, 0x17, 0xcf, 0xfc, 0x3e, 0x64, 0xf8, +}; +const uint8_t* _I_Splash_128x64[] = {_I_Splash_128x64_0}; +const Icon I_Splash_128x64 = + {.width = 128, .height = 64, .frame_count = 1, .frame_rate = 0, .frames = _I_Splash_128x64}; + +/* +const uint8_t _I_BadEnd_128x64_0[] = { + 0x01, 0x00, 0xDF, 0x01, 0x00, 0x2c, 0x12, 0x01, 0x02, 0x80, 0x40, 0x70, 0x10, 0x0a, 0x04, 0x02, + 0x41, 0x3e, 0xcf, 0x63, 0xfb, 0xfe, 0xc8, 0x18, 0x3e, 0x6f, 0xdb, 0xfc, 0xf8, 0x3c, 0x60, 0xe0, + 0xf9, 0xb3, 0x6c, 0xf3, 0x3c, 0x1b, 0x6c, 0x18, 0x5f, 0x40, 0xf1, 0xe7, 0xdb, 0xc1, 0xf4, 0x2f, + 0x10, 0x78, 0xdb, 0xbc, 0xdf, 0xf0, 0x04, 0x59, 0x81, 0xe3, 0xc1, 0xb6, 0x41, 0x83, 0xd1, 0x00, + 0xbf, 0x6c, 0xc9, 0xe6, 0x0f, 0x91, 0xf8, 0x9b, 0xcc, 0x1f, 0x20, 0x06, 0x07, 0xf8, 0x3e, 0x0b, + 0x32, 0x00, 0x50, 0x88, 0xc4, 0x20, 0x10, 0x85, 0xfd, 0x03, 0xfc, 0x1f, 0xe0, 0xff, 0x07, 0xf9, + 0x7f, 0xc3, 0xdc, 0x89, 0x10, 0x7d, 0x00, 0x04, 0x1f, 0xe0, 0xfd, 0xfc, 0x40, 0xc1, 0xfb, 0x07, + 0x8e, 0x2f, 0xf3, 0x9f, 0x00, 0xb0, 0x7f, 0x97, 0xf6, 0x0a, 0x11, 0x10, 0xa3, 0xec, 0x10, 0x21, + 0x32, 0x07, 0xd0, 0x18, 0x40, 0xa2, 0x0f, 0xb0, 0x20, 0x81, 0xc4, 0x1f, 0xeb, 0xfa, 0xbf, 0x84, + 0x86, 0x01, 0xc8, 0x5f, 0xd0, 0x0c, 0x81, 0xe2, 0x05, 0x10, 0x7e, 0xdc, 0xc1, 0xf5, 0x01, 0xe0, + 0x41, 0xf2, 0x17, 0xf0, 0x7d, 0xaf, 0x0a, 0x7e, 0x0f, 0xbf, 0x84, 0x7f, 0x21, 0x1f, 0x2b, 0x8e, + 0x3c, 0xbe, 0xd3, 0xf0, 0x78, 0xc4, 0xfa, 0x0b, 0xf2, 0x00, 0x08, 0x81, 0xa1, 0xf3, 0x08, 0x9f, + 0xc0, 0x1e, 0x57, 0x00, 0x7b, 0x60, 0x60, 0x3e, 0x08, 0x4f, 0x80, 0x1e, 0x59, 0x05, 0xc1, 0x03, + 0xce, 0xc3, 0x00, 0x2f, 0x88, 0x3c, 0xe2, 0x10, 0x20, 0x78, 0xbd, 0xc6, 0xff, 0x7c, 0x8c, 0x0e, + 0x48, 0x1e, 0x90, 0x48, 0x47, 0xe2, 0x06, 0x1b, 0x1e, 0x3c, 0x1c, 0x1e, 0x80, 0x01, 0x93, 0xad, + 0x06, 0x1e, 0x0a, 0x28, 0x04, 0x18, 0x1e, 0x81, 0xe1, 0x90, 0x20, 0x46, 0x49, 0xa9, 0x91, 0x3e, + 0x46, 0xf8, 0x0f, 0xac, 0x48, 0x3c, 0xb0, 0x82, 0x52, 0x07, 0xa1, 0x08, 0x43, 0xe5, 0x72, 0x93, + 0x41, 0x7e, 0x01, 0x01, 0x07, 0xc7, 0x8a, 0x97, 0xa9, 0x39, 0x88, 0xa0, 0x7f, 0x00, 0xf2, 0x08, + 0x0c, 0x03, 0x25, 0x54, 0x88, 0xe9, 0x66, 0x11, 0xc2, 0x99, 0x9e, 0x07, 0xff, 0x13, 0x90, 0x7f, + 0xb2, 0x60, 0xf2, 0xaa, 0x79, 0x1b, 0xe5, 0x01, 0xfe, 0x1f, 0xca, 0x41, 0x08, 0xb0, 0xd4, 0xe2, + 0x33, 0x9c, 0x9f, 0x13, 0xff, 0x07, 0xc0, 0x0c, 0x04, 0x1e, 0x54, 0x08, 0x40, 0x64, 0x80, 0x03, + 0x84, 0xff, 0xc0, 0x68, 0x10, 0x0f, 0x80, 0x3d, 0x13, 0xc2, 0x00, 0x28, 0x25, 0xfa, 0x00, 0x0f, + 0x76, 0x60, 0x83, 0xcc, 0x04, 0x20, 0xc1, 0x07, 0xaf, 0xc8, 0x52, 0x52, 0x00, 0x7a, 0x2f, 0xcc, + 0x16, 0x31, 0x30, 0x49, 0x48, 0x17, 0xe5, 0x20, 0xc0, 0x23, 0xce, 0x81, 0x80, 0x88, 0xe6, 0x24, + 0x7c, 0x69, 0xc0, 0xd0, 0xa2, 0x1c, 0x00, 0x79, 0x85, 0x07, 0xe3, 0xa4, 0xb0, 0x4a, 0x64, 0xa0, + 0xf3, 0x57, 0x9d, 0x82, 0x01, 0x80, 0x84, 0x54, 0xb2, 0x19, 0x48, 0x91, 0x90, 0xa2, 0x1f, 0x00, + 0x79, 0x0f, 0x87, 0x80, 0x0f, 0x44, 0x21, 0x03, 0xd0, 0x3e, 0x26, 0x01, 0xa6, 0x44, 0x2c, 0x79, + 0xc0, 0x79, 0xb3, 0xc4, 0xbe, 0x5e, 0x01, 0x08, 0x80, 0x09, 0x56, 0x20, 0x01, 0x98, 0x03, 0xc4, + 0xfe, 0x51, 0x0b, 0xf8, 0x3c, 0xf8, 0x00, 0x32, 0x9c, 0x7f, 0x01, 0xe8, 0x1f, 0x40, 0x21, 0xd7, + 0x81, 0xfb, 0x80, 0xcf, 0x8f, 0x44, 0x1e, 0x7c, 0x88, 0x38, 0x28, 0x70, 0xe4, 0x92, 0xff, 0xc7, + 0xef, 0x1f, 0x80, +}; +const uint8_t* _I_BadEnd_128x64[] = {_I_BadEnd_128x64_0}; +const Icon I_BadEnd_128x64 = + {.width = 128, .height = 64, .frame_count = 1, .frame_rate = 0, .frames = _I_BadEnd_128x64}; +*/ /* space savings until external apps are possible */ +const uint8_t _I_Hand_12x10_0[] = { + 0x01, 0x00, 0x11, 0x00, 0x8c, 0x40, 0x25, 0x00, 0x16, 0xb4, 0x40, + 0x35, 0x10, 0x1d, 0x5c, 0x1b, 0x5b, 0x0a, 0x84, 0xc2, 0x80, +}; +const uint8_t* _I_Hand_12x10[] = {_I_Hand_12x10_0}; +const Icon I_Hand_12x10 = + {.width = 12, .height = 10, .frame_count = 1, .frame_rate = 0, .frames = _I_Hand_12x10}; + +const uint8_t _I_CardBack_22x35_0[] = { + 0x01, 0x00, 0x23, 0x00, 0xfe, 0x7f, 0xe1, 0xf0, 0x28, 0x04, 0x43, 0xe3, 0xff, + 0x91, 0xea, 0x75, 0x52, 0x6a, 0xad, 0x56, 0x5b, 0xad, 0xd5, 0x4a, 0x80, 0xbe, + 0x05, 0xf0, 0x2f, 0x81, 0x7c, 0x0b, 0x45, 0x32, 0x2c, 0x91, 0x7c, 0x8c, 0xa4, +}; +const uint8_t* _I_CardBack_22x35[] = {_I_CardBack_22x35_0}; +const Icon I_CardBack_22x35 = + {.width = 22, .height = 35, .frame_count = 1, .frame_rate = 0, .frames = _I_CardBack_22x35}; + +//uncompressed but lol +const uint8_t _I_club_7x8_0[] = {0x00, 0x08, 0x1c, 0x1c, 0x6b, 0x7f, 0x36, 0x08, 0x1c}; +const uint8_t* _I_club_7x8[] = {_I_club_7x8_0}; +const Icon I_club_7x8 = + {.width = 7, .height = 8, .frame_count = 1, .frame_rate = 0, .frames = _I_club_7x8}; + +//uncompressed but lol +const uint8_t _I_diamond_7x8_0[] = {0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08}; +const uint8_t* _I_diamond_7x8[] = {_I_diamond_7x8_0}; +const Icon I_diamond_7x8 = + {.width = 7, .height = 8, .frame_count = 1, .frame_rate = 0, .frames = _I_diamond_7x8}; + +//uncompressed +const uint8_t _I_hearts_7x8_0[] = {0x00, 0x00, 0x36, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x08}; +const uint8_t* _I_hearts_7x8[] = {_I_hearts_7x8_0}; +const Icon I_hearts_7x8 = + {.width = 7, .height = 8, .frame_count = 1, .frame_rate = 0, .frames = _I_hearts_7x8}; + +//uncompressed +const uint8_t _I_spade_7x8_0[] = {0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x7f, 0x36, 0x08, 0x1c}; +const uint8_t* _I_spade_7x8[] = {_I_spade_7x8_0}; +const Icon I_spade_7x8 = + {.width = 7, .height = 8, .frame_count = 1, .frame_rate = 0, .frames = _I_spade_7x8}; + +// They only included Numeric Profont22 glyphs and I don't want to fuck up the font embeds right now sooo.. + +const uint8_t _I_King_7x8_0[] = { + 0x01, 0x00, 0x1a, 0x00, 0xc1, 0xc0, 0xf8, 0x70, 0x1f, 0x1c, 0x02, 0xe7, 0x00, 0x9d, 0xc0, + 0x23, 0xf0, 0x08, 0x78, 0x0c, 0x80, 0xe2, 0x0b, 0x10, 0x78, 0x84, 0xc4, 0x2e, 0x20, 0x01, +}; +const uint8_t* _I_King_7x8[] = {_I_King_7x8_0}; +const Icon I_King_7x8 = + {.width = 10, .height = 14, .frame_count = 1, .frame_rate = 0, .frames = _I_King_7x8}; + +const uint8_t _I_Queen_7x8_0[] = { + 0x01, 0x00, 0x13, 0x00, 0xfe, 0x40, 0x3f, 0xd0, 0x1c, 0x3c, 0x0c, 0x01, + 0x76, 0x38, 0x1f, 0x8e, 0x07, 0xc7, 0x81, 0x85, 0x47, 0xf9, 0x01, +}; +const uint8_t* _I_Queen_7x8[] = {_I_Queen_7x8_0}; +const Icon I_Queen_7x8 = + {.width = 10, .height = 14, .frame_count = 1, .frame_rate = 0, .frames = _I_Queen_7x8}; + +const uint8_t _I_Jack_7x8_0[] = { + 0x01, + 0x00, + 0x0D, + 0x00, + 0x80, + 0x40, + 0xc0, + 0x3a, + 0x00, + 0x5c, + 0x3c, + 0x0f, + 0xfd, + 0x01, + 0xfe, + 0x40, + 0x00, +}; +const uint8_t* _I_Jack_7x8[] = {_I_Jack_7x8_0}; +const Icon I_Jack_7x8 = + {.width = 10, .height = 14, .frame_count = 1, .frame_rate = 0, .frames = _I_Jack_7x8}; + +const uint8_t _I_Ace_7x8_0[] = { + 0x01, 0x00, 0x13, 0x00, 0x98, 0x40, 0x2f, 0x00, 0x12, 0xe6, 0x00, 0x4b, + 0x0d, 0x01, 0x00, 0x8c, 0x0e, 0x07, 0xff, 0x00, 0x90, 0x01, 0xc0, +}; +const uint8_t* _I_Ace_7x8[] = {_I_Ace_7x8_0}; +const Icon I_Ace_7x8 = + {.width = 10, .height = 14, .frame_count = 1, .frame_rate = 0, .frames = _I_Ace_7x8}; + +const uint8_t _I_Ten_7x8_0[] = { + 0x01, 0x00, 0x29, 0x00, 0x86, 0x7f, 0x00, 0x43, 0xfe, 0x80, 0xc3, 0xf0, 0xf0, 0x38, 0x7e, + 0x0e, 0x07, 0x0c, 0xe1, 0x80, 0x87, 0xc6, 0x02, 0x1b, 0x98, 0x08, 0x67, 0x60, 0x21, 0x8f, + 0x80, 0x86, 0x1e, 0x02, 0x18, 0x38, 0x08, 0x43, 0x43, 0x7f, 0x10, 0x0d, 0xfc, 0x4c, 0x20, +}; +const uint8_t* _I_Ten_7x8[] = {_I_Ten_7x8_0}; +const Icon I_Ten_7x8 = + {.width = 18, .height = 14, .frame_count = 1, .frame_rate = 0, .frames = _I_Ten_7x8}; + +const Icon card_suit[4] = {I_diamond_7x8, I_club_7x8, I_hearts_7x8, I_spade_7x8}; + +const Icon card_face[5] = {I_Ten_7x8, I_Jack_7x8, I_Queen_7x8, I_King_7x8, I_Ace_7x8}; + +/* Sanity check: check that there are no duplicate cards in hand */ + +static void playcard(PokerPlayer* app) { + int i, c, crd; + + int hold[5]; + hold[5] = 2; + // int digit; + c = 1; + c++; + c = hold[5]; /* FIX for unused-but-set-variable */ + /* initialize deck */ + for(i = 0; i < 52; i++) deck[i].gone = 0; + + /* initialize hold[] */ + for(i = 0; i < 5; i++) hold[i] = 1; + + /* app->score -= bet; */ + if (app->score>app->highscore){app->highscore=app->score;} /* record high water mark */ + + for(i = 0; i < 5; i++) { + /* find a card not already dealt */ + do crd = random() % 52; + while(deck[crd].gone); + hold[i] = 1; + deck[crd].gone = 1; + if(!app->held[i]) { + app->hand[i] = deck[crd]; + } + } +} + +static int check_for_dupes(PokerPlayer* app) { + int i, j; + + for(i = 0; i < 5; i++) { + for(j = i + 1; j < 5; j++) { + if(app->hand[i].index == app->hand[j].index && app->hand[i].suit == app->hand[j].suit) + return 0; + } + } + + return 1; +} + +/* Functions that recognize winning hands */ + +/* + Flush: + returns 1 if the sorted hand is a flush +*/ + +static int flush(PokerPlayer* app) { + if(app->shand[0].suit == app->shand[1].suit && app->shand[1].suit == app->shand[2].suit && + app->shand[2].suit == app->shand[3].suit && app->shand[3].suit == app->shand[4].suit) + return 1; + + return 0; +} + +/* + Straight: + returns 1 if the sorted hand is a straight +*/ + +static int straight(PokerPlayer* app) { + if(app->shand[1].index == app->shand[0].index + 1 && + app->shand[2].index == app->shand[1].index + 1 && + app->shand[3].index == app->shand[2].index + 1 && + app->shand[4].index == app->shand[3].index + 1) + return 1; + + /* Ace low straight: Ace, 2, 3, 4, 5 */ + + if(app->shand[4].index == 13 && app->shand[0].index == 1 && app->shand[1].index == 2 && + app->shand[2].index == 3 && app->shand[3].index == 4) + return 1; + + return 0; +} + +/* + Four of a kind: + the middle 3 all match, and the first or last matches those +*/ + +static int four(PokerPlayer* app) { + if((app->shand[1].index == app->shand[2].index && + app->shand[2].index == app->shand[3].index) && + (app->shand[0].index == app->shand[2].index || app->shand[4].index == app->shand[2].index)) + return 1; + + return 0; +} + +/* + Full house: + 3 of a kind and a pair +*/ + +static int full(PokerPlayer* app) { + if(app->shand[0].index == app->shand[1].index && + (app->shand[2].index == app->shand[3].index && app->shand[3].index == app->shand[4].index)) + return 1; + + if(app->shand[3].index == app->shand[4].index && + (app->shand[0].index == app->shand[1].index && app->shand[1].index == app->shand[2].index)) + return 1; + + return 0; +} + +/* + Three of a kind: + it can appear 3 ways +*/ + +static int three(PokerPlayer* app) { + if(app->shand[0].index == app->shand[1].index && app->shand[1].index == app->shand[2].index) + return 1; + + if(app->shand[1].index == app->shand[2].index && app->shand[2].index == app->shand[3].index) + return 1; + + if(app->shand[2].index == app->shand[3].index && app->shand[3].index == app->shand[4].index) + return 1; + + return 0; +} + +/* + Two pair: + it can appear in 3 ways +*/ + +static int twopair(PokerPlayer* app) { + if(((app->shand[0].index == app->shand[1].index) && + (app->shand[2].index == app->shand[3].index)) || + ((app->shand[0].index == app->shand[1].index) && + (app->shand[3].index == app->shand[4].index)) || + ((app->shand[1].index == app->shand[2].index) && + (app->shand[3].index == app->shand[4].index))) + return 1; + + return 0; +} + +/* + Two of a kind (pair), jacks or better + or if the game is Tens or Better, 10s or better. +*/ + +static int two(PokerPlayer* app) { + int min = 10; + + if(app->GameType == 1) min = 9; + + if(app->shand[0].index == app->shand[1].index && app->shand[1].index >= min) return 1; + if(app->shand[1].index == app->shand[2].index && app->shand[2].index >= min) return 1; + if(app->shand[2].index == app->shand[3].index && app->shand[3].index >= min) return 1; + if(app->shand[3].index == app->shand[4].index && app->shand[4].index >= min) return 1; + + return 0; +} + +static int paytable[10] = { + 800, /* royal flush: 800 */ + 50, /* straight flush: 50 */ + 25, /* 4 of a kind: 25 */ + 9, /* full house: 9 */ + 6, /* flush: 6 */ + 4, /* straight: 4 */ + 3, /* 3 of a kind: 3 */ + 2, /* two pair: 2 */ + 1, /* jacks or better: 1 */ + 0 /* nothing */ +}; + +static const char* poker_handname[10] = { + "Royal Flush", + "Straight Flush", + "Four of a Kind", + "Full House", + "Flush", + "Straight", + "Three of a Kind", + "Two Pair", + "Pair", + "Nothing", +}; + +static int recognize(PokerPlayer* app) { + int i, j, f = 0; + int min = 100; + PokerPlayer_card tmp[5]; + int st = 0, fl = 0; + + /* Sort hand into sorted hand (app->shand) */ + + /* make copy of hand */ + for(i = 0; i < 5; i++) tmp[i] = app->hand[i]; + + for(i = 0; i < 5; i++) { + /* put lowest card in hand into next place in app->shand */ + + for(j = 0; j < 5; j++) + if(tmp[j].index <= min) { + min = tmp[j].index; + f = j; + } + + app->shand[i] = tmp[f]; + tmp[f].index = 100; /* larger than any card */ + min = 100; + } + + /* royal and straight flushes, strait, and flush */ + + fl = flush(app); + st = straight(app); + + if(st && fl && app->shand[0].index == 9) return 0; + if(st && fl) return 1; + if(four(app)) return 2; + if(full(app)) return 3; + if(fl) return 4; + if(st) return 5; + if(three(app)) return 6; + if(twopair(app)) return 7; + if(two(app)) return 8; + + /* Nothing */ + + return 9; +} + +void poker_draw_callback(Canvas* canvas, void* ctx) { + PokerPlayer* poker_player = ctx; + furi_check(furi_mutex_acquire(poker_player->model_mutex, FuriWaitForever) == FuriStatusOk); + canvas_clear(canvas); + char buffer[30]; + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + + /* Magic Begins */ + + /* Status Info */ + if(poker_player->GameState != 0 && poker_player->GameState != 4) { + snprintf(buffer, sizeof(buffer), "%d", poker_player->score); + canvas_draw_str_aligned(canvas, 127, 0, AlignRight, AlignTop, buffer); + } + + /* Start of game. Cards are face down, bet can be changed */ + if(poker_player->GameState == 1) { + snprintf(buffer, sizeof(buffer), "Bet:%d", poker_player->bet); + canvas_draw_str_aligned(canvas, 0, 0, AlignLeft, AlignTop, buffer); + snprintf(buffer, sizeof(buffer), "<*> Place Bet"); + canvas_draw_str_aligned(canvas, 0, 9, AlignLeft, AlignTop, buffer); + + for(int i = 0; i < 5; ++i) { + canvas_draw_icon(canvas, 5 + (i * 24), 18, &I_CardBack_22x35); /* 5, 29, 53, 77, 101 */ + } + } + /* Cards are turned face up. Bet is deducted and put in th pot. Show the selector hand */ + else if(poker_player->GameState == 2 || poker_player->GameState == 3) { + snprintf(buffer, sizeof(buffer), "Pot:%d", poker_player->bet); + canvas_draw_str_aligned(canvas, 0, 0, AlignLeft, AlignTop, buffer); + snprintf(buffer, sizeof(buffer), "<*> Select Hold"); + canvas_draw_str_aligned(canvas, 0, 9, AlignLeft, AlignTop, buffer); + + /* Normal or inverse to indicate selection - cards*/ + for(int i = 0; i < 5; ++i) { + poker_player->held[i] ? canvas_draw_rbox(canvas, 5 + (i * 24), 18, 22, 35, 3) : + canvas_draw_rframe(canvas, 5 + (i * 24), 18, 22, 35, 3); + } + + /* Normal or inverse to indicate selection - card suit and value */ + + for(int i = 0; i < 5; ++i) { + poker_player->held[i] ? canvas_set_color(canvas, ColorWhite) : + canvas_set_color(canvas, ColorBlack); + + canvas_draw_icon(canvas, 18 + (i * 24), 43, &card_suit[poker_player->hand[i].suit]); + } + + /* Card Value. Profont_22 does not include letters (AJQK), and "10" is too big. These are bitmaps. */ + canvas_set_font(canvas, FontBigNumbers); + + for(int i = 0; i < 5; ++i) { + poker_player->held[i] ? canvas_set_color(canvas, ColorWhite) : + canvas_set_color(canvas, ColorBlack); + if(poker_player->hand[i].index >= 1 && poker_player->hand[i].index <= 8) { + snprintf(buffer, sizeof(buffer), "%s", poker_player->hand[i].sym); + canvas_draw_str_aligned(canvas, 8 + (i * 24), 21, AlignLeft, AlignTop, buffer); + } else { + if(poker_player->hand[i].index >= 9 && poker_player->hand[i].index <= 13) { + canvas_draw_icon( + canvas, 7 + (i * 24), 21, &card_face[poker_player->hand[i].index - 9]); + } + } + } + + /* Draw the Select hand */ + if(poker_player->GameState == 2) { + canvas_set_color(canvas, ColorBlack); + + canvas_draw_icon(canvas, 11 + (poker_player->selected * 24), 54, &I_Hand_12x10); + } + } // GameState 2 or 3 + + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + if(poker_player->GameState == 3) { + snprintf( + buffer, + sizeof(buffer), + "%s:%ix", + poker_handname[recognize(poker_player)], + paytable[recognize(poker_player)]); + canvas_draw_str_aligned(canvas, 63, 61, AlignCenter, AlignBottom, buffer); + } + if(poker_player->GameState == 0) { + canvas_draw_icon(canvas, 0, 0, &I_Splash_128x64); /* Initial launch */ + } + if(poker_player->GameState == 4) { + /* canvas_draw_icon(canvas, 0, 0, &I_BadEnd_128x64); Just Lost The Game - disabled for now :( */ + canvas_set_color(canvas, ColorBlack); + canvas_set_font(canvas, FontSecondary); + snprintf(buffer, sizeof(buffer), "%s", "You have run out of money!"); + canvas_draw_str_aligned(canvas, 63, 22, AlignCenter, AlignCenter, buffer); + snprintf(buffer, sizeof(buffer), "%s", "At one point, you had"); + canvas_draw_str_aligned(canvas, 63, 32, AlignCenter, AlignCenter, buffer); + snprintf(buffer, sizeof(buffer), "%d dollars", poker_player->highscore); + canvas_draw_str_aligned(canvas, 63, 42, AlignCenter, AlignCenter, buffer); + } + + + + furi_mutex_release(poker_player->model_mutex); +} + +void poker_input_callback(InputEvent* input, void* ctx) { + PokerPlayer* poker_player = ctx; + furi_message_queue_put(poker_player->event_queue, input, FuriWaitForever); +} + +PokerPlayer* poker_player_alloc() { + PokerPlayer* poker_player = malloc(sizeof(PokerPlayer)); + + poker_player->score = 1000; + poker_player->model_mutex = furi_mutex_alloc(FuriMutexTypeNormal); + poker_player->event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + poker_player->view_port = view_port_alloc(); + poker_player->selected = 0; + poker_player->GameState = 0; + poker_player->bet = 10; + poker_player->minbet = 10; + poker_player->highscore = 1000; + + playcard( + poker_player); /* Get things rolling before the player gets into the game. This will preload the hand. */ + view_port_draw_callback_set(poker_player->view_port, poker_draw_callback, poker_player); + + view_port_input_callback_set(poker_player->view_port, poker_input_callback, poker_player); + + poker_player->gui = furi_record_open("gui"); + gui_add_view_port(poker_player->gui, poker_player->view_port, GuiLayerFullscreen); + + return poker_player; +} + +void poker_player_free(PokerPlayer* poker_player) { + view_port_enabled_set(poker_player->view_port, false); + gui_remove_view_port(poker_player->gui, poker_player->view_port); + furi_record_close("gui"); + view_port_free(poker_player->view_port); + furi_message_queue_free(poker_player->event_queue); + furi_mutex_free(poker_player->model_mutex); + + free(poker_player); +} + +int32_t video_poker_app(void* p) { + UNUSED(p); + PokerPlayer* poker_player = poker_player_alloc(); + + InputEvent event; + for(bool processing = true; processing;) { + FuriStatus status = furi_message_queue_get(poker_player->event_queue, &event, 100); + furi_check(furi_mutex_acquire(poker_player->model_mutex, FuriWaitForever) == FuriStatusOk); + if(status == FuriStatusOk) { + if(event.type == InputTypePress) { + switch(event.key) { + case InputKeyUp: + Shake(); + break; + case InputKeyDown: + if(poker_player->GameState == 2) { + playcard(poker_player); + if(check_for_dupes(poker_player) == 0) { + playcard(poker_player); + } + + poker_player->GameState = 3; + } + break; + case InputKeyLeft: + if(poker_player->GameState == 1) { + if(poker_player->bet >= poker_player->minbet + 10) { + poker_player->bet -= 10; + } + } else if(poker_player->selected > 0 && poker_player->GameState == 2) { + poker_player->selected--; + } // Move hand left/right + else if(poker_player->selected == 0 && poker_player->GameState == 2) { + poker_player->selected = 4; //wraparound + } + break; + case InputKeyRight: + if(poker_player->GameState == 1) { + if(poker_player->bet < poker_player->score + 10) { + poker_player->bet += 10; + } + } + if(poker_player->selected < 4 && poker_player->GameState == 2) { + poker_player->selected++; + } // Move hand left/right + else if(poker_player->selected == 4 && poker_player->GameState == 2) { + poker_player->selected = 0; //wraparound + } + break; + case InputKeyOk: + /* close splash screen */ + if(poker_player->GameState == 0) { + poker_player->GameState = 1; + } else if(poker_player->GameState == 1) { + /* Pledge bet. Bet is subtracted here. Original code subtracts it during playcard + but playcard is called multiple times which would otherwise subtract bet + multiple times */ + poker_player->score -= poker_player->bet; + poker_player->GameState = 2; + } else if(poker_player->GameState == 2) { + /* Select or un-select card to be held */ + poker_player->held[poker_player->selected] = + !poker_player + ->held[poker_player->selected]; //cursed and bad pls replace + } else if(poker_player->GameState == 3) { + /* accept your fate */ + if(recognize(poker_player) != 9) { + poker_player->score += + poker_player->bet * paytable[recognize(poker_player)]; + } + poker_player->GameState = 1; + if(poker_player->bet > poker_player->score) { + poker_player->bet = poker_player->score; + } + poker_player->held[0] = 0; + poker_player->held[1] = 0; + poker_player->held[2] = 0; + poker_player->held[3] = 0; + poker_player->held[4] = 0; + if(poker_player->score <= 0) { + /* lost the game */ + poker_player->GameState = 4; + } + playcard(poker_player); // shuffle shuffle + } else if(poker_player->GameState == 4) { + /* escape the summary, return to splash */ + Shake(); + poker_player->selected = 0; + poker_player->GameState = 0; + poker_player->bet = 10; + poker_player->minbet = 10; + poker_player->highscore = 1000; + poker_player->score = 1000; + poker_player->GameState = 0; + } + break; + case InputKeyBack: + /* if game is not over, we should store the game state. */ + processing = false; + break; + } + } + } + furi_mutex_release(poker_player->model_mutex); + view_port_update(poker_player->view_port); + } + + poker_player_free(poker_player); + return 0; +} diff --git a/applications/chip8/application.fam b/applications/chip8/application.fam new file mode 100644 index 0000000000..b625cd5f48 --- /dev/null +++ b/applications/chip8/application.fam @@ -0,0 +1,10 @@ +App( + appid="INTAPP_Chip8", + name="CHIP8 Emulator", + apptype=FlipperAppType.GAME, + entry_point="chip8_app", + cdefines=["APP_CHIP8"], + requires=["gui"], + stack_size=4 * 1024, + order=60, +) \ No newline at end of file diff --git a/applications/chip8/chip8.c b/applications/chip8/chip8.c new file mode 100644 index 0000000000..8df3357cb3 --- /dev/null +++ b/applications/chip8/chip8.c @@ -0,0 +1,203 @@ +#include +#include +#include +#include +#include +#include +#include "chip8.h" +#include "emulator_core/flipper_chip.h" + +#define TAG "Chip8Emulator" +#define WORKER_TAG TAG "Worker" +#define FILE_BUFFER_LEN 16 + +typedef enum { + WorkerEvtToggle = (1 << 1), + WorkerEvtEnd = (1 << 2), +} WorkerEvtFlags; + +struct Chip8Emulator { + Chip8State st; + string_t file_path; + FuriThread* thread; +}; + +static int32_t chip8_worker(void* context) { + Chip8Emulator* chip8 = context; + + FURI_LOG_I(WORKER_TAG, "Start furi record open"); + Storage* furi_storage_record = furi_record_open("storage"); + FURI_LOG_I(WORKER_TAG, "furi record opened"); + + FURI_LOG_I(WORKER_TAG, "Start storage file alloc"); + File* rom_file = storage_file_alloc(furi_storage_record); + FURI_LOG_I( + WORKER_TAG, "Start storage file open, path = %s", string_get_cstr(chip8->file_path)); + + uint8_t* rom_data = malloc(4096); + FURI_LOG_I(WORKER_TAG, "4096 array gotten"); + + while(1) { + if(chip8->st.worker_state == WorkerStateBackPressed) { + FURI_LOG_I(WORKER_TAG, "WorkerStateBackPressed"); + break; + } + + if(chip8->st.worker_state == WorkerStateLoadingRom) { + bool is_file_opened = storage_file_open( + rom_file, string_get_cstr(chip8->file_path), FSAM_READ, FSOM_OPEN_EXISTING); + + if(!is_file_opened) { + FURI_LOG_I(WORKER_TAG, "Cannot open storage"); + storage_file_close(rom_file); + storage_file_free(rom_file); + chip8->st.worker_state = WorkerStateRomLoadError; + return 0; + } + + FURI_LOG_I(WORKER_TAG, "File was opened, try read this"); + + int rom_len = read_rom_data(rom_file, rom_data); + + FURI_LOG_I(WORKER_TAG, "Rom data finished reading"); + + FURI_LOG_I(WORKER_TAG, "Load chip8 core data"); + t_chip8_load_game(chip8->st.t_chip8_state, rom_data, rom_len); + FURI_LOG_I(WORKER_TAG, "chip8 core data loaded"); + + FURI_LOG_I(WORKER_TAG, "Wipe screen start"); + for(int i = 0; i < CHIP8_SCREEN_H; i++) { + FURI_LOG_I(WORKER_TAG, "Wipe screen line %d", i); + for(int j = 0; j < CHIP8_SCREEN_W; j++) { + chip8->st.t_chip8_state->screen[i][j] = 0; + } + furi_delay_ms(15); + } + FURI_LOG_I(WORKER_TAG, "Wipe screen end"); + + chip8->st.worker_state = WorkerStateRomLoaded; + } + + if(chip8->st.worker_state == WorkerStateRomLoaded) { + if(chip8->st.t_chip8_state->go_render) { + continue; + } + t_chip8_execute_next_opcode(chip8->st.t_chip8_state); + FURI_LOG_I( + "chip8_executing", + "current: 0x%X next: 0x%X", + chip8->st.t_chip8_state->current_opcode, + chip8->st.t_chip8_state->next_opcode); + furi_delay_ms(2); + //t_chip8_tick(chip8->st.t_chip8_state); + } + } + + FURI_LOG_I("CHIP8", "Prepare to ending app"); + storage_file_close(rom_file); + storage_file_free(rom_file); + t_chip8_free_memory(chip8->st.t_chip8_state, free); + FURI_LOG_I("CHIP8", "End ending"); + return 0; +} + +Chip8Emulator* chip8_make_emulator(string_t file_path) { + furi_assert(file_path); + FURI_LOG_I("CHIP8", "make emulator, file_path=", string_get_cstr(file_path)); + + Chip8Emulator* chip8 = malloc(sizeof(Chip8Emulator)); + string_init(chip8->file_path); + string_set(chip8->file_path, file_path); + chip8->st.worker_state = WorkerStateLoadingRom; + chip8->st.t_chip8_state = t_chip8_init(malloc); + + // FURI_LOG_I(WORKER_TAG, "Start wipe screen"); + // furi_delay_ms(1500); + // for (int i = 0; i < CHIP8_SCREEN_H; i++) + // { + // FURI_LOG_I(WORKER_TAG, "Start wipe line %d", i); + // for (int j = 0; j < CHIP8_SCREEN_W; j++) + // { + // chip8->st.t_chip8_state->screen[i][j] = 0; + // } + // } + // FURI_LOG_I(WORKER_TAG, "End wipe screen"); + + chip8->thread = furi_thread_alloc(); + furi_thread_set_name(chip8->thread, "Chip8Worker"); + furi_thread_set_stack_size(chip8->thread, 4096); + furi_thread_set_context(chip8->thread, chip8); + furi_thread_set_callback(chip8->thread, chip8_worker); + + furi_thread_start(chip8->thread); + return chip8; +} + +void chip8_close_emulator(Chip8Emulator* chip8) { + FURI_LOG_I("chip_8_close_emulator", "start"); + furi_assert(chip8); + furi_thread_flags_set(furi_thread_get_id(chip8->thread), WorkerEvtEnd); + furi_thread_join(chip8->thread); + furi_thread_free(chip8->thread); + string_clear(chip8->file_path); + free(chip8); + FURI_LOG_I("chip_8_close_emulator", "end"); +} + +void chip8_toggle(Chip8Emulator* chip8) { + furi_assert(chip8); + furi_thread_flags_set(furi_thread_get_id(chip8->thread), WorkerEvtToggle); +} + +Chip8State* chip8_get_state(Chip8Emulator* chip8) { + furi_assert(chip8); + return &(chip8->st); +} + +uint16_t read_rom_data(File* file, uint8_t* data) { + furi_assert(file); + furi_assert(data); + + const uint8_t buffer_size = 32; + uint16_t file_pointer = 0; + uint8_t buff[buffer_size]; + + while(1) { + uint16_t bytes_were_read = storage_file_read(file, buff, buffer_size); + + if(bytes_were_read == 0) { + break; + } + + for(uint16_t i = 0; i < bytes_were_read; i++) { + data[file_pointer] = buff[i]; + file_pointer++; + } + } + + return file_pointer; +} + +void chip8_set_back_pressed(Chip8Emulator* chip8) { + chip8->st.worker_state = WorkerStateBackPressed; + chip8->st.t_chip8_state->go_render = true; + FURI_LOG_I(WORKER_TAG, "SET BACK PRESSED. EMULATION IS STOPPED"); +} + +void chip8_set_up_pressed(Chip8Emulator* chip8) { + chip8->st.t_chip8_state->go_render = true; + t_chip8_set_input(chip8->st.t_chip8_state, k_1); + FURI_LOG_I(WORKER_TAG, "UP PRESSED"); +} + +void chip8_set_down_pressed(Chip8Emulator* chip8) { + chip8->st.t_chip8_state->go_render = true; + t_chip8_set_input(chip8->st.t_chip8_state, k_4); + FURI_LOG_I(WORKER_TAG, "DOWN PRESSED"); +} + +void chip8_release_keyboard(Chip8Emulator* chip8) { + chip8->st.t_chip8_state->go_render = true; + t_chip8_release_input(chip8->st.t_chip8_state); + FURI_LOG_I(WORKER_TAG, "chip8_release_keyboard Release input"); +} diff --git a/applications/chip8/chip8.h b/applications/chip8/chip8.h new file mode 100644 index 0000000000..5a6470592f --- /dev/null +++ b/applications/chip8/chip8.h @@ -0,0 +1,45 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include "emulator_core/flipper_chip.h" + +#define CHIP8_SCREEN_W 64 +#define CHIP8_SCREEN_H 32 + +typedef struct Chip8Emulator Chip8Emulator; + +typedef enum { + WorkerStateLoadingRom, + WorkerStateRomLoaded, + WorkerStateRomLoadError, + WorkerStateBackPressed, +} WorkerState; + +typedef struct { + WorkerState worker_state; + t_chip8_state* t_chip8_state; +} Chip8State; + +Chip8Emulator* chip8_make_emulator(string_t file_path); + +void chip8_close_emulator(Chip8Emulator* chip8); +void chip8_set_back_pressed(Chip8Emulator* chip8); +void chip8_set_up_pressed(Chip8Emulator* chip8); +void chip8_set_down_pressed(Chip8Emulator* chip8); +void chip8_release_keyboard(Chip8Emulator* chip8); + +Chip8State* chip8_get_state(Chip8Emulator* chip8); + +void chip8_toggle(Chip8Emulator* chip8); + +uint16_t read_rom_data(File* file, uint8_t* data); + +#ifdef __cplusplus +} +#endif diff --git a/applications/chip8/chip8_app.c b/applications/chip8/chip8_app.c new file mode 100644 index 0000000000..89fd1735c8 --- /dev/null +++ b/applications/chip8/chip8_app.c @@ -0,0 +1,89 @@ +#include "chip8_app_i.h" +#include + +static bool chip8_app_custom_event_callback(void* context, uint32_t event) { + furi_assert(context); + Chip8App* app = context; + return scene_manager_handle_custom_event(app->scene_manager, event); +} + +static bool chip8_app_back_event_callback(void* context) { + furi_assert(context); + Chip8App* app = context; + return scene_manager_handle_back_event(app->scene_manager); +} + +static void chip8_app_tick_event_callback(void* context) { + furi_assert(context); + Chip8App* app = context; + scene_manager_handle_tick_event(app->scene_manager); +} + +uint8_t** chip8_backup_screen_alloc() { + FURI_LOG_I("chip8", "chip8_backup_screen_alloc start"); + + uint8_t** backup_screen = malloc(SCREEN_HEIGHT * sizeof(size_t)); + for(int i = 0; i < SCREEN_HEIGHT; i++) { + backup_screen[i] = malloc(SCREEN_WIDTH * sizeof(uint8_t)); + for(int j = 0; j < SCREEN_WIDTH; j++) { + backup_screen[i][j] = 0; + } + } + + FURI_LOG_I("chip8", "chip8_backup_screen_alloc end"); + return backup_screen; +} + +Chip8App* chip8_app_alloc() { + Chip8App* app = malloc(sizeof(Chip8App)); + + app->gui = furi_record_open("gui"); + app->dialogs = furi_record_open("dialogs"); + app->view_dispatcher = view_dispatcher_alloc(); + app->scene_manager = scene_manager_alloc(&chip8_scene_handlers, app); + + view_dispatcher_enable_queue(app->view_dispatcher); + view_dispatcher_set_event_callback_context(app->view_dispatcher, app); + + view_dispatcher_set_tick_event_callback( + app->view_dispatcher, chip8_app_tick_event_callback, 100); + view_dispatcher_set_custom_event_callback( + app->view_dispatcher, chip8_app_custom_event_callback); + view_dispatcher_set_navigation_event_callback( + app->view_dispatcher, chip8_app_back_event_callback); + + view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); + + app->chip8_view = chip8_alloc(); + app->backup_screen = chip8_backup_screen_alloc(); + view_dispatcher_add_view(app->view_dispatcher, Chip8WorkView, chip8_get_view(app->chip8_view)); + + scene_manager_next_scene(app->scene_manager, Chip8FileSelectView); + + return app; +} + +void chip8_app_free(Chip8App* app) { + FURI_LOG_I("CHIP8", "chip8_app_free started"); + furi_assert(app); + + view_dispatcher_remove_view(app->view_dispatcher, Chip8FileSelectView); + view_dispatcher_remove_view(app->view_dispatcher, Chip8WorkView); + chip8_free(app->chip8_view); + + view_dispatcher_free(app->view_dispatcher); + scene_manager_free(app->scene_manager); + + furi_record_close("gui"); + furi_record_close("dialogs"); + + free(app); +} + +int32_t chip8_app(void* p) { + Chip8App* chip8_app = chip8_app_alloc(); + + view_dispatcher_run(chip8_app->view_dispatcher); + chip8_app_free(chip8_app); + return 0; +} \ No newline at end of file diff --git a/applications/chip8/chip8_app.h b/applications/chip8/chip8_app.h new file mode 100644 index 0000000000..0d57203887 --- /dev/null +++ b/applications/chip8/chip8_app.h @@ -0,0 +1,11 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Chip8App Chip8App; + +#ifdef __cplusplus +} +#endif diff --git a/applications/chip8/chip8_app_i.h b/applications/chip8/chip8_app_i.h new file mode 100644 index 0000000000..78bd6f50f9 --- /dev/null +++ b/applications/chip8/chip8_app_i.h @@ -0,0 +1,33 @@ +#pragma once + +#include "chip8_app.h" +#include "scenes/chip8_scene.h" +#include "chip8.h" + +#include +#include +#include +#include +#include +#include +#include "views/chip8_view.h" + +#define CHIP8_APP_PATH_FOLDER "/any/chip8" +#define CHIP8_APP_EXTENSION ".ch8" + +struct Chip8App { + Gui* gui; + ViewDispatcher* view_dispatcher; + SceneManager* scene_manager; + DialogsApp* dialogs; + + string_t file_name; + uint8_t** backup_screen; + Chip8View* chip8_view; + Chip8Emulator* chip8; +}; + +typedef enum { + Chip8FileSelectView, + Chip8WorkView, +} Chip8AppView; diff --git a/applications/chip8/emulator_core/flipper_chip.c b/applications/chip8/emulator_core/flipper_chip.c new file mode 100644 index 0000000000..4b438cac2c --- /dev/null +++ b/applications/chip8/emulator_core/flipper_chip.c @@ -0,0 +1,319 @@ +// +// Created by dwdraugr on 24.11.2021. +// + +#include "flipper_chip.h" +#include "flipper_fonts.h" +#include +#include +#include +#include + +static uint8_t randbyte(); +static void draw_sprite(t_chip8_state* state, uint8_t x, uint8_t y, uint8_t n); +static void error_stop(t_chip8_state* state, uint16_t opcode); + +t_chip8_state* t_chip8_init(void* (*system_malloc)(size_t)) { + t_chip8_state* state = system_malloc(sizeof(t_chip8_state)); + + state->PC = MEMORY_START_POSITION; + state->SP = 0; + state->I = 0; + state->delay_timer = 0; + state->sound_timer = 0; + state->go_render = false; + state->next_opcode = 0; + + state->memory = system_malloc(MEMORY_SIZE * sizeof(uint8_t)); + // memset(state->memory, 0, MEMORY_SIZE); + state->screen = system_malloc(SCREEN_HEIGHT * sizeof(size_t)); + for(int i = 0; i < SCREEN_HEIGHT; i++) { + state->screen[i] = system_malloc(SCREEN_WIDTH * sizeof(uint8_t)); + // memset(state->screen[i], 0, SCREEN_WIDTH); + } + state->V = system_malloc(CPU_REGISTER_NUMBER * sizeof(uint8_t)); + // memset(state->V, 0, CPU_REGISTER_NUMBER); + state->stack = system_malloc(CPU_STACK_DEPTH * sizeof(uint16_t)); + // memset(state->stack, 0, CPU_STACK_DEPTH * sizeof(short)); + state->key = system_malloc(KEYS_NUMBER * sizeof(uint8_t)); + // memset(state->key, 0, KEYS_NUMBER); + + memcpy(state->memory, font_small, FONT_SMALL); + srand(time(NULL)); + + return state; +} + +bool t_chip8_load_game(t_chip8_state* state, const uint8_t* rom, int rom_size) { + if(MEMORY_ROM_SIZE < rom_size) { + return false; + } + memcpy(&state->memory[MEMORY_START_POSITION], rom, rom_size); + return true; +} + +void t_chip8_free_memory(t_chip8_state* state, void (*system_free)(void*)) { + system_free(state->memory); + for(int i = 0; i < SCREEN_HEIGHT; i++) { + system_free(state->screen[i]); + } + system_free(state->screen); + system_free(state->V); + system_free(state->key); + system_free(state->stack); + system_free(state); +} + +void t_chip8_execute_next_opcode(t_chip8_state* state) { + static bool isWaitInput = false; + static uint8_t register_number = 255; + + uint16_t opcode = state->memory[state->PC] << 8 | state->memory[state->PC + 1]; + uint8_t x = (opcode >> 8) & 0x000F; + uint8_t y = (opcode >> 4) & 0x000F; + uint8_t n = opcode & 0x000F; + uint8_t kk = opcode & 0x00FF; + uint16_t nnn = opcode & 0x0FFF; + + // jump to input-wait opcode + if(isWaitInput) { + opcode = 0xF000; + kk = 0x0A; + x = register_number; + } + state->current_opcode = opcode & 0xF000; + switch(opcode & 0xF000) { + case 0x0000: + switch(kk) { + case 0x00E0: + for(int i = 0; i < SCREEN_HEIGHT; i++) { + for(int j = 0; j < SCREEN_WIDTH; j++) { + state->screen[i][j] = 0; + } + } + state->PC += 2; + break; + case 0x00EE: + state->PC = state->stack[--state->SP]; + break; + default: + error_stop(state, opcode); + } + break; + case 0x1000: + state->PC = nnn; + break; + case 0x2000: + state->stack[state->SP++] = state->PC + 2; + state->PC = nnn; + break; + case 0x3000: + state->PC += (state->V[x] == kk) ? 4 : 2; + break; + case 0x4000: + state->PC += (state->V[x] != kk) ? 4 : 2; + break; + case 0x5000: + state->PC += (state->V[x] == state->V[y]) ? 4 : 2; + break; + case 0x6000: + state->V[x] = kk; + state->PC += 2; + break; + case 0x7000: + state->V[x] += kk; + state->PC += 2; + break; + case 0x8000: + switch(n) { + case 0x0: + state->V[x] = state->V[y]; + break; + case 0x1: + state->V[x] |= state->V[y]; + break; + case 0x2: + state->V[x] &= state->V[y]; + break; + case 0x3: + state->V[x] ^= state->V[y]; + break; + case 0x4: + state->V[0xF] = (int)state->V[x] + (int)state->V[y] ? 1 : 0; + state->V[x] += state->V[y]; + break; + case 0x5: + state->V[0xF] = state->V[x] > state->V[y] ? 1 : 0; + state->V[x] -= state->V[y]; + break; + case 0x6: + state->V[0xF] = state->V[x] & 0x1; + state->V[x] >>= 1; + break; + case 0x7: + state->V[0xF] = state->V[y] > state->V[x] ? 1 : 0; + state->V[x] = state->V[y] - state->V[x]; + break; + case 0xE: + state->V[0xF] = (state->V[x] >> 7) & 0x1; + state->V[x] <<= 1; + break; + default: + error_stop(state, opcode); + } + state->PC += 2; + break; + case 0x9000: + switch(n) { + case 0x0: + state->PC += state->V[x] != state->V[y] ? 4 : 2; + break; + default: + error_stop(state, opcode); + } + break; + case 0xA000: + state->I = nnn; + state->PC += 2; + break; + case 0xB000: + state->PC = nnn + state->V[0]; + break; + case 0xC000: + state->V[x] = randbyte() & kk; + state->PC += 2; + break; + case 0xD000: + draw_sprite(state, state->V[x], state->V[y], n); + state->go_render = true; + state->PC += 2; + break; + case 0xE000: + switch(kk) { + case 0x9E: + state->PC += state->key[state->V[x]] ? 4 : 2; + break; + case 0xA1: + state->PC += !state->key[state->V[x]] ? 4 : 2; + break; + default: + error_stop(state, opcode); + } + break; + case 0xF000: + switch(kk) { + case 0x07: + state->V[x] = state->delay_timer; + state->PC += 2; + break; + case 0x0A: + for(int i = 0; i < KEYS_NUMBER; i++) { + if(state->key[i]) { + state->V[x] = i; + isWaitInput = false; + goto exit_input_wait; + } + isWaitInput = true; + register_number = x; + } + exit_input_wait: + state->PC += 2; + break; + case 0x15: + state->delay_timer = state->V[x]; + state->PC += 2; + break; + case 0x18: + state->sound_timer = state->V[x]; + state->PC += 2; + break; + case 0x1E: + state->V[0xF] = state->I + state->V[x] > 0xFFF ? 1 : 0; + state->I += state->V[x]; + state->PC += 2; + break; + case 0x29: + state->I = FONT_BYTES_PER_CHAR * state->V[x]; + state->PC += 2; + break; + case 0x33: + state->memory[state->I] = (state->V[x] % 1000) / 100; + state->memory[state->I + 1] = (state->V[x] % 100) / 10; + state->memory[state->I + 2] = state->V[x] % 10; + state->PC += 2; + break; + case 0x55: + memcpy(state->memory, state->V, x); + state->I += x + 1; + state->PC += 2; + break; + case 0x65: + for(int i = 0; i <= x; i++) { + state->V[i] = state->memory[state->I + i]; + } + state->I += x + 1; + state->PC += 2; + break; + default: + error_stop(state, opcode); + } + break; + default: + error_stop(state, opcode); + } + + state->next_opcode = state->memory[state->PC] << 8 | state->memory[state->PC + 1]; + state->next_opcode &= 0xf000; +} + +void t_chip8_tick(t_chip8_state* state) { + if(state->delay_timer > 0) { + --state->delay_timer; + } + if(state->sound_timer > 0) { + --state->sound_timer; + } +} + +uint8_t** t_chip8_get_screen(t_chip8_state* state) { + return (uint8_t**)state->screen; +} + +void t_chip8_set_input(t_chip8_state* state, t_keys key) { + state->key[key] = 1; +} + +void t_chip8_release_input(t_chip8_state* state) { + for(int i = 0; i < KEYS_NUMBER; i++) { + state->key[i] = 0; + } +} + +static uint8_t randbyte() { + return rand() % 256; +} + +static void draw_sprite(t_chip8_state* state, uint8_t x, uint8_t y, uint8_t n) { + unsigned row = y, col = x; + unsigned byte_index; + unsigned bit_index; + + state->V[0xF] = 0; + for(byte_index = 0; byte_index < n; byte_index++) { + uint8_t byte = state->memory[state->I + byte_index]; + + for(bit_index = 0; bit_index < 8; bit_index++) { + uint8_t bit = (byte >> bit_index) & 0x1; + + uint8_t* pixel_pointer = &state->screen[(row + byte_index) % SCREEN_HEIGHT] + [(col + (7 - bit_index)) % SCREEN_WIDTH]; + + if(bit == 1 && *pixel_pointer == 1) state->V[0xF] = 1; + *pixel_pointer = *pixel_pointer ^ bit; + } + } +} + +static void error_stop(t_chip8_state* state, uint16_t opcode) { + exit(100); +} diff --git a/applications/chip8/emulator_core/flipper_chip.h b/applications/chip8/emulator_core/flipper_chip.h new file mode 100644 index 0000000000..09c2ed2985 --- /dev/null +++ b/applications/chip8/emulator_core/flipper_chip.h @@ -0,0 +1,74 @@ +// +// Created by dwdraugr on 24.11.2021. +// + +#ifndef FLIPPER_CHIP_FLIPPER_CHIP_H +#define FLIPPER_CHIP_FLIPPER_CHIP_H + +#include +#include +#include + +#define CPU_REGISTER_NUMBER 0x10 +#define CPU_STACK_DEPTH 0x10 + +#define MEMORY_SIZE 0x1000 +#define MEMORY_START_POSITION 0x200 +#define MEMORY_ROM_SIZE (MEMORY_SIZE - MEMORY_START_POSITION) + +#define SCREEN_WIDTH 64 +#define SCREEN_HEIGHT 32 +#define SCREEN_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT) + +#define KEYS_NUMBER 0x10 + +typedef struct s_flipper_state { + uint16_t I; + uint16_t PC; + uint8_t SP; + uint8_t* V; // CPU_REGISTER_NUMBER + uint16_t* stack; // CPU_STACK_DEPTH + uint8_t* memory; // MEMORY_SIZE + uint8_t delay_timer; + uint8_t sound_timer; + uint8_t** screen; // SCREEN_HEIGHT * SCREEN_WIDTH + uint8_t* key; // KEYS_NUMBER + bool go_render; + int current_opcode; + int next_opcode; +} t_chip8_state; + +// keyboard layout +// 1 2 3 C +// 4 5 6 D +// 7 8 9 E +// A 0 B F +typedef enum e_keys { + k_x, + k_1, + k_2, + k_3, + k_q, + k_w, + k_e, + k_a, + k_s, + k_d, + k_z, + k_c, + k_4, + k_r, + k_f, + k_v, +} t_keys; + +t_chip8_state* t_chip8_init(void* (*system_malloc)(size_t)); +bool t_chip8_load_game(t_chip8_state* state, const uint8_t* rom, int rom_size); +void t_chip8_execute_next_opcode(t_chip8_state* state); +void t_chip8_tick(t_chip8_state* state); +uint8_t** t_chip8_get_screen(t_chip8_state* state); +void t_chip8_free_memory(t_chip8_state* state, void (*system_free)(void*)); +void t_chip8_set_input(t_chip8_state* state, t_keys key); +void t_chip8_release_input(t_chip8_state* state); + +#endif //FLIPPER_CHIP_FLIPPER_CHIP_H diff --git a/applications/chip8/emulator_core/flipper_fonts.h b/applications/chip8/emulator_core/flipper_fonts.h new file mode 100644 index 0000000000..f1bcec1b97 --- /dev/null +++ b/applications/chip8/emulator_core/flipper_fonts.h @@ -0,0 +1,30 @@ +// +// Created by dwdraugr on 24.11.2021. +// + +#ifndef FLIPPER_CHIP_FLIPPER_FONTS_H +#define FLIPPER_CHIP_FLIPPER_FONTS_H + +#define FONT_BYTES_PER_CHAR 5 +#define FONT_SMALL (16 * 5) + +unsigned char font_small[FONT_SMALL] = { + 0xF0, 0x90, 0x90, 0x90, 0xF0, // 0 + 0x20, 0x60, 0x20, 0x20, 0x70, // 1 + 0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2 + 0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3 + 0x90, 0x90, 0xF0, 0x10, 0x10, // 4 + 0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5 + 0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6 + 0xF0, 0x10, 0x20, 0x40, 0x40, // 7 + 0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8 + 0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9 + 0xF0, 0x90, 0xF0, 0x90, 0x90, // A + 0xE0, 0x90, 0xE0, 0x90, 0xE0, // B + 0xF0, 0x80, 0x80, 0x80, 0xF0, // C + 0xE0, 0x90, 0x90, 0x90, 0xE0, // D + 0xF0, 0x80, 0xF0, 0x80, 0xF0, // E + 0xF0, 0x80, 0xF0, 0x80, 0x80 // F +}; + +#endif //FLIPPER_CHIP_FLIPPER_FONTS_H diff --git a/applications/chip8/scenes/chip8_scene.c b/applications/chip8/scenes/chip8_scene.c new file mode 100644 index 0000000000..34488c8885 --- /dev/null +++ b/applications/chip8/scenes/chip8_scene.c @@ -0,0 +1,26 @@ +#include "chip8_scene.h" + +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter, +void (*const chip8_scene_on_enter_handlers[])(void*) = { +#include "chip8_scene_config.h" +}; +#undef ADD_SCENE + +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event, +bool (*const chip8_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = { +#include "chip8_scene_config.h" +}; +#undef ADD_SCENE + +#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit, +void (*const chip8_scene_on_exit_handlers[])(void* context) = { +#include "chip8_scene_config.h" +}; +#undef ADD_SCENE + +const SceneManagerHandlers chip8_scene_handlers = { + .on_enter_handlers = chip8_scene_on_enter_handlers, + .on_event_handlers = chip8_scene_on_event_handlers, + .on_exit_handlers = chip8_scene_on_exit_handlers, + .scene_num = Chip8SceneNum, +}; diff --git a/applications/chip8/scenes/chip8_scene.h b/applications/chip8/scenes/chip8_scene.h new file mode 100644 index 0000000000..19fd40c623 --- /dev/null +++ b/applications/chip8/scenes/chip8_scene.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#define ADD_SCENE(prefix, name, id) Chip8Scene##id, +typedef enum { +#include "chip8_scene_config.h" + Chip8SceneNum, +} Chip8Scene; +#undef ADD_SCENE + +extern const SceneManagerHandlers chip8_scene_handlers; + +#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*); +#include "chip8_scene_config.h" +#undef ADD_SCENE + +#define ADD_SCENE(prefix, name, id) \ + bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event); +#include "chip8_scene_config.h" +#undef ADD_SCENE + +#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context); +#include "chip8_scene_config.h" +#undef ADD_SCENE diff --git a/applications/chip8/scenes/chip8_scene_config.h b/applications/chip8/scenes/chip8_scene_config.h new file mode 100644 index 0000000000..593249a870 --- /dev/null +++ b/applications/chip8/scenes/chip8_scene_config.h @@ -0,0 +1,2 @@ +ADD_SCENE(chip8, file_select, FileSelect) +ADD_SCENE(chip8, work, Work) \ No newline at end of file diff --git a/applications/chip8/scenes/chip8_scene_file_select.c b/applications/chip8/scenes/chip8_scene_file_select.c new file mode 100644 index 0000000000..380524da99 --- /dev/null +++ b/applications/chip8/scenes/chip8_scene_file_select.c @@ -0,0 +1,45 @@ +#include "../chip8_app_i.h" +#include "furi_hal_power.h" + +static bool chip8_file_select(Chip8App* chip8) { + furi_assert(chip8); + string_init(chip8->file_name); + string_set_str(chip8->file_name, CHIP8_APP_PATH_FOLDER); + // string_set_str(file_path, chip8->file_name); + + bool res = dialog_file_browser_show( + chip8->dialogs, + chip8->file_name, + chip8->file_name, + CHIP8_APP_EXTENSION, + true, + &I_unknown_10px, + false); + + FURI_LOG_I( + "Chip8_file_browser_show", "chip8->file_name: %s", string_get_cstr(chip8->file_name)); + FURI_LOG_I("Chip8_file_browser_show", "res: %d", res); + return res; +} + +void chip8_scene_file_select_on_enter(void* context) { + Chip8App* chip8 = context; + + if(chip8_file_select(chip8)) { + FURI_LOG_I( + "Chip8", "chip8_file_select, file_name = %s", string_get_cstr(chip8->file_name)); + scene_manager_next_scene(chip8->scene_manager, Chip8WorkView); + } else { + view_dispatcher_stop(chip8->view_dispatcher); + } +} + +bool chip8_scene_file_select_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + return false; +} + +void chip8_scene_file_select_on_exit(void* context) { + UNUSED(context); +} diff --git a/applications/chip8/scenes/chip8_scene_work.c b/applications/chip8/scenes/chip8_scene_work.c new file mode 100644 index 0000000000..6f9c6e5e20 --- /dev/null +++ b/applications/chip8/scenes/chip8_scene_work.c @@ -0,0 +1,90 @@ +#include "../chip8_app_i.h" +#include "../views/chip8_view.h" +#include "furi_hal.h" + +void chip8_scene_ok_callback(InputType type, void* context) { + furi_assert(context); + Chip8App* app = context; + view_dispatcher_send_custom_event(app->view_dispatcher, type); +} + +void chip8_scene_back_callback(Chip8View* view, InputType type, void* context) { + furi_assert(context); + Chip8App* app = context; + chip8_set_back_pressed(app->chip8); + chip8_set_state(view, chip8_get_state(app->chip8)); + // view_dispatcher_send_custom_event(app->view_dispatcher, type); + view_dispatcher_stop(app->view_dispatcher); +} + +void chip8_scene_up_callback(InputType type, void* context) { + furi_assert(context); + Chip8App* app = context; + chip8_set_up_pressed(app->chip8); + // view_dispatcher_send_custom_event(app->view_dispatcher, type); +} + +void chip8_scene_down_callback(InputType type, void* context) { + furi_assert(context); + Chip8App* app = context; + chip8_set_down_pressed(app->chip8); + // view_dispatcher_send_custom_event(app->view_dispatcher, type); +} + +void chip8_scene_release_callback(InputType type, void* context) { + furi_assert(context); + Chip8App* app = context; + chip8_release_keyboard(app->chip8); + // view_dispatcher_send_custom_event(app->view_dispatcher, type); +} + +bool chip8_scene_work_on_event(void* context, SceneManagerEvent event) { + Chip8App* app = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + chip8_toggle(app->chip8); + consumed = true; + } else if(event.type == SceneManagerEventTypeTick) { + Chip8State* state = chip8_get_state(app->chip8); + + chip8_set_state(app->chip8_view, state); + } + return consumed; +} + +void chip8_scene_work_on_enter(void* context) { + Chip8App* app = context; + + chip8_set_file_name(app->chip8_view, app->file_name); + + string_t file_tmp; + string_init(file_tmp); + + string_printf(file_tmp, "%s", string_get_cstr(app->file_name)); + + FURI_LOG_I("chip8_scene_work_on_enter", "file_name: %s", string_get_cstr(file_tmp)); + + FURI_LOG_I("chip8_scene_work_on_enter", "START SET BACKUP SCREEN"); + chip8_set_backup_screen(app->chip8_view, app->backup_screen); + FURI_LOG_I("chip8_scene_work_on_enter", "END SET BACKUP SCREEN"); + + app->chip8 = chip8_make_emulator(file_tmp); + + string_clear(file_tmp); + + chip8_set_state(app->chip8_view, chip8_get_state(app->chip8)); + + chip8_set_ok_callback(app->chip8_view, chip8_scene_ok_callback, app); + chip8_set_back_callback(app->chip8_view, chip8_scene_back_callback, app); + chip8_set_up_callback(app->chip8_view, chip8_scene_up_callback, app); + chip8_set_down_callback(app->chip8_view, chip8_scene_down_callback, app); + chip8_set_release_callback(app->chip8_view, chip8_scene_release_callback, app); + + view_dispatcher_switch_to_view(app->view_dispatcher, Chip8WorkView); +} + +void chip8_scene_work_on_exit(void* context) { + Chip8App* app = context; + chip8_close_emulator(app->chip8); +} diff --git a/applications/chip8/views/chip8_view.c b/applications/chip8/views/chip8_view.c new file mode 100644 index 0000000000..aceeed9e87 --- /dev/null +++ b/applications/chip8/views/chip8_view.c @@ -0,0 +1,207 @@ +#include +#include "chip8_view.h" +#include "../chip8.h" +#include "../emulator_core/flipper_chip.h" + +struct Chip8View { + View* view; + Chip8ViewCallback callback; + void* context; + Chip8ViewKeyBackCallback backCallback; + Chip8ViewKeyUpCallback upCallback; + Chip8ViewKeyDownCallback downCallback; + Chip8ViewReleaseCallback releaseCallback; +}; + +typedef struct { + string_t file_name; + Chip8State state; + uint8_t** backup_screen; +} Chip8Model; + +static void chip8_draw_callback(Canvas* canvas, void* _model) { + Chip8Model* model = _model; + + if(model->state.worker_state == WorkerStateLoadingRom) { + canvas_draw_icon(canvas, 4, 22, &I_Clock_18x18); + } + + if(model->state.worker_state == WorkerStateRomLoaded) { + while(!model->state.t_chip8_state->go_render) { + for(int y = 0; y < CHIP8_SCREEN_H; y++) { + for(int x = 0; x < CHIP8_SCREEN_W; x++) { + if(model->backup_screen[y][x] == 0) { + canvas_set_color(canvas, ColorWhite); + } else { + canvas_set_color(canvas, ColorBlack); + } + canvas_draw_box(canvas, x * 2, y * 2, 2, 2); + //canvas_draw_dot(canvas, x, y); + } + } + return; + } + + uint8_t** screen = t_chip8_get_screen(model->state.t_chip8_state); + + for(int y = 0; y < CHIP8_SCREEN_H; y++) { + for(int x = 0; x < CHIP8_SCREEN_W; x++) { + if(screen[y][x] == 0) { + canvas_set_color(canvas, ColorWhite); + } else { + canvas_set_color(canvas, ColorBlack); + } + canvas_draw_box(canvas, x * 2, y * 2, 2, 2); + model->backup_screen[y][x] = screen[y][x]; + //canvas_draw_dot(canvas, x, y); + } + } + model->state.t_chip8_state->go_render = false; + } + + if(model->state.worker_state == WorkerStateRomLoadError) { + canvas_draw_icon(canvas, 4, 22, &I_Error_18x18); + } +} + +static bool chip8_input_callback(InputEvent* event, void* context) { + FURI_LOG_I("Chip8", "received input"); + furi_assert(context); + Chip8View* chip8 = context; + bool consumed = false; + + if(event->type == InputTypeShort) { + if(event->key == InputKeyOk) { + consumed = true; + furi_assert(chip8->callback); + chip8->callback(InputTypeShort, chip8->context); + } + + if(event->key == InputKeyBack) { + consumed = true; + furi_assert(chip8->callback); + chip8->backCallback(chip8, InputTypeShort, chip8->context); + } + + if(event->key == InputKeyUp) { + consumed = true; + furi_assert(chip8->upCallback); + chip8->upCallback(InputTypeShort, chip8->context); + } + if(event->key == InputKeyDown) { + consumed = true; + furi_assert(chip8->downCallback); + chip8->downCallback(InputTypeShort, chip8->context); + } + } + if(event->type == InputTypeRelease) { + chip8->releaseCallback(InputTypeShort, chip8->context); + } + + return consumed; +} + +Chip8View* chip8_alloc() { + Chip8View* chip8 = malloc(sizeof(Chip8View)); + + chip8->view = view_alloc(); + view_allocate_model(chip8->view, ViewModelTypeLocking, sizeof(Chip8Model)); + view_set_context(chip8->view, chip8); + view_set_draw_callback(chip8->view, chip8_draw_callback); + view_set_input_callback(chip8->view, chip8_input_callback); + + return chip8; +} + +void chip8_free(Chip8View* chip8) { + furi_assert(chip8); + view_free(chip8->view); + free(chip8); +} + +View* chip8_get_view(Chip8View* chip8) { + furi_assert(chip8); + return chip8->view; +} + +void chip8_set_ok_callback(Chip8View* chip8, Chip8ViewCallback callback, void* context) { + furi_assert(chip8); + furi_assert(callback); + with_view_model( + chip8->view, (Chip8Model * model) { + chip8->callback = callback; + chip8->context = context; + return false; + }); +} + +void chip8_set_back_callback(Chip8View* chip8, Chip8ViewKeyBackCallback callback, void* context) { + furi_assert(chip8); + furi_assert(callback); + with_view_model( + chip8->view, (Chip8Model * model) { + chip8->backCallback = callback; + chip8->context = context; + return true; + }); +} + +void chip8_set_up_callback(Chip8View* chip8, Chip8ViewKeyUpCallback callback, void* context) { + furi_assert(chip8); + furi_assert(callback); + with_view_model( + chip8->view, (Chip8Model * model) { + chip8->upCallback = callback; + chip8->context = context; + return true; + }); +} + +void chip8_set_down_callback(Chip8View* chip8, Chip8ViewKeyDownCallback callback, void* context) { + furi_assert(chip8); + furi_assert(callback); + with_view_model( + chip8->view, (Chip8Model * model) { + chip8->downCallback = callback; + chip8->context = context; + return true; + }); +} + +void chip8_set_file_name(Chip8View* chip8, string_t name) { + furi_assert(name); + with_view_model( + chip8->view, (Chip8Model * model) { + *model->file_name = *name; + return false; + }); +} + +void chip8_set_backup_screen(Chip8View* chip8, uint8_t** screen) { + furi_assert(screen); + with_view_model( + chip8->view, (Chip8Model * model) { + model->backup_screen = screen; + return false; + }); +} + +void chip8_set_state(Chip8View* chip8, Chip8State* st) { + furi_assert(st); + with_view_model( + chip8->view, (Chip8Model * model) { + memcpy(&(model->state), st, sizeof(Chip8State)); + return true; + }); +} + +void chip8_set_release_callback(Chip8View* chip8, Chip8ViewReleaseCallback callback, void* context) { + furi_assert(chip8); + furi_assert(callback); + with_view_model( + chip8->view, (Chip8Model * model) { + chip8->releaseCallback = callback; + chip8->context = context; + return true; + }); +} diff --git a/applications/chip8/views/chip8_view.h b/applications/chip8/views/chip8_view.h new file mode 100644 index 0000000000..339261634d --- /dev/null +++ b/applications/chip8/views/chip8_view.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include "../chip8.h" + +typedef struct Chip8View Chip8View; +typedef void (*Chip8ViewCallback)(InputType type, void* context); +typedef void (*Chip8ViewKeyBackCallback)(Chip8View* view, InputType type, void* context); +typedef void (*Chip8ViewKeyUpCallback)(InputType type, void* context); +typedef void (*Chip8ViewKeyDownCallback)(InputType type, void* context); +typedef void (*Chip8ViewReleaseCallback)(InputType type, void* context); + +Chip8View* chip8_alloc(); + +void chip8_free(Chip8View* chip8); + +View* chip8_get_view(Chip8View* chip8); + +void chip8_set_ok_callback(Chip8View* chip8, Chip8ViewCallback callback, void* context); +void chip8_set_back_callback(Chip8View* chip8, Chip8ViewKeyBackCallback callback, void* context); +void chip8_set_up_callback(Chip8View* chip8, Chip8ViewKeyUpCallback callback, void* context); +void chip8_set_down_callback(Chip8View* chip8, Chip8ViewKeyDownCallback callback, void* context); +void chip8_set_release_callback(Chip8View* chip8, Chip8ViewReleaseCallback callback, void* context); + +void chip8_set_backup_screen(Chip8View* chip8, uint8_t** screen); + +void chip8_set_file_name(Chip8View* chip8, string_t name); + +void chip8_set_state(Chip8View* chip8, Chip8State* st); diff --git a/applications/flappy_bird/application.fam b/applications/flappy_bird/application.fam new file mode 100644 index 0000000000..720e5bb778 --- /dev/null +++ b/applications/flappy_bird/application.fam @@ -0,0 +1,10 @@ +App( + appid="GAME_FlappyBird", + name="Flappy Bird", + apptype=FlipperAppType.GAME, + entry_point="flappy_game_app", + cdefines=["APP_FLAPPY_GAME"], + requires=["gui"], + stack_size=1 * 1024, + order=100, +) diff --git a/applications/flappy_bird/bird.h b/applications/flappy_bird/bird.h new file mode 100644 index 0000000000..8162080bec --- /dev/null +++ b/applications/flappy_bird/bird.h @@ -0,0 +1,54 @@ +#include + +uint8_t bird_array[3][15][11] = { + { + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0}, + {0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0}, + {0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, + {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1}, + {1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1}, + {1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + }, + { + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0}, + {0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0}, + {0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1}, + {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1}, + {1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1}, + {1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + }, + { + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0}, + {0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0}, + {0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1}, + {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, + {1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1}, + {1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + }}; diff --git a/applications/flappy_bird/flappy_bird.c b/applications/flappy_bird/flappy_bird.c new file mode 100644 index 0000000000..d4a5feba61 --- /dev/null +++ b/applications/flappy_bird/flappy_bird.c @@ -0,0 +1,258 @@ +#include +#include +#include +#include + +#include "bird.h" + +#define TAG "Flappy" + +#define FLAPPY_BIRD_HEIGHT 15 +#define FLAPPY_BIRD_WIDTH 10 + +#define FLAPPY_PILAR_MAX 6 +#define FLAPPY_PILAR_DIST 45 + +#define FLAPPY_GAB_HEIGHT 25 +#define FLAPPY_GAB_WIDTH 5 + +#define FLAPPY_GRAVITY_JUMP -1.1 +#define FLAPPY_GRAVITY_TICK 0.10 + +#define FLIPPER_LCD_WIDTH 128 +#define FLIPPER_LCD_HEIGHT 64 + +typedef enum { + EventTypeTick, + EventTypeKey, +} EventType; + +typedef struct { + int x; + int y; +} POINT; + +typedef struct { + float gravity; + POINT point; +} BIRD; + +typedef struct { + POINT point; + int height; + int visible; + int passed; +} PILAR; + +typedef struct { + BIRD bird; + + int points; + int pilars_count; + PILAR pilars[FLAPPY_PILAR_MAX]; +} GameState; + +typedef struct { + EventType type; + InputEvent input; +} GameEvent; + +typedef enum { + DirectionUp, + DirectionRight, + DirectionDown, + DirectionLeft, +} Direction; + +static void flappy_game_random_pilar(GameState* const game_state) { + PILAR pilar; + + pilar.visible = 1; + pilar.height = random() % (FLIPPER_LCD_HEIGHT - FLAPPY_GAB_HEIGHT) + 1; + pilar.point.y = 0; + pilar.point.x = FLIPPER_LCD_WIDTH + FLAPPY_GAB_WIDTH + 1; + + game_state->pilars_count++; + game_state->pilars[game_state->pilars_count % FLAPPY_PILAR_MAX] = pilar; +} + +static void flappy_game_tick(GameState* const game_state) { + game_state->bird.gravity += FLAPPY_GRAVITY_TICK; + game_state->bird.point.y += game_state->bird.gravity; + + // Checking the location of the last respawned pilar. + PILAR* pilar = &game_state->pilars[game_state->pilars_count % FLAPPY_PILAR_MAX]; + if(pilar->point.x == (FLIPPER_LCD_WIDTH - FLAPPY_PILAR_DIST)) + flappy_game_random_pilar(game_state); + + // Updating the position/status of the pilars (visiblity, posotion, game points) + for(int i = 0; i < FLAPPY_PILAR_MAX; i++) { + PILAR* pilar = &game_state->pilars[i]; + pilar->point.x--; + + if(pilar != NULL && pilar->visible && pilar->point.x > 0) { + if(game_state->bird.point.x >= pilar->point.x + FLAPPY_GAB_WIDTH && + pilar->passed == 0) { + pilar->passed = 1; + game_state->points++; + } + if(pilar->point.x < -FLAPPY_PILAR_DIST) pilar->visible = 0; + } + } +} + +static void flappy_game_flap(GameState* const game_state) { + game_state->bird.gravity = FLAPPY_GRAVITY_JUMP; +} + +static void flappy_game_state_init(GameState* const game_state) { + BIRD bird; + bird.gravity = 0.0f; + bird.point.x = 5; + bird.point.y = 32; + + game_state->bird = bird; + game_state->pilars_count = 0; + memset(game_state->pilars, 0, sizeof(game_state->pilars)); + + flappy_game_random_pilar(game_state); +} + +static void flappy_game_render_callback(Canvas* const canvas, void* ctx) { + const GameState* game_state = acquire_mutex((ValueMutex*)ctx, 25); + if(game_state == NULL) { + return; + } + + canvas_draw_frame(canvas, 0, 0, 128, 64); + + // Pilars + for(int i = 0; i < FLAPPY_PILAR_MAX; i++) { + const PILAR* pilar = &game_state->pilars[i]; + if(pilar != NULL && pilar->visible) { + canvas_draw_dot(canvas, pilar->point.x, pilar->point.y + 10); + canvas_draw_frame( + canvas, pilar->point.x, pilar->point.y, FLAPPY_GAB_WIDTH, pilar->height); + + canvas_draw_frame( + canvas, + pilar->point.x, + pilar->point.y + pilar->height + FLAPPY_GAB_HEIGHT, + FLAPPY_GAB_WIDTH, + FLIPPER_LCD_HEIGHT - pilar->height - FLAPPY_GAB_HEIGHT); + } + } + + // Flappy + for(int h = 0; h < FLAPPY_BIRD_HEIGHT; h++) { + for(int w = 0; w < FLAPPY_BIRD_WIDTH; w++) { + // Switch animation + int bird = 0; + if(game_state->bird.gravity < -0.5) + bird = 1; + else + bird = 2; + + // Draw bird pixels + if(bird_array[bird][h][w] == 1) { + int x = game_state->bird.point.x + h; + int y = game_state->bird.point.y + w; + + canvas_draw_dot(canvas, x, y); + } + } + } + + release_mutex((ValueMutex*)ctx, game_state); +} + +static void flappy_game_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + GameEvent event = {.type = EventTypeKey, .input = *input_event}; + furi_message_queue_put(event_queue, &event, FuriWaitForever); +} + +static void flappy_game_update_timer_callback(FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + GameEvent event = {.type = EventTypeTick}; + furi_message_queue_put(event_queue, &event, 0); +} + +int32_t flappy_game_app(void* p) { + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(GameEvent)); + + GameState* game_state = malloc(sizeof(GameState)); + flappy_game_state_init(game_state); + + ValueMutex state_mutex; + if(!init_mutex(&state_mutex, game_state, sizeof(GameState))) { + FURI_LOG_E(TAG, "cannot create mutex\r\n"); + free(game_state); + return 255; + } + + // Set system callbacks + ViewPort* view_port = view_port_alloc(); + view_port_draw_callback_set(view_port, flappy_game_render_callback, &state_mutex); + view_port_input_callback_set(view_port, flappy_game_input_callback, event_queue); + + FuriTimer* timer = + furi_timer_alloc(flappy_game_update_timer_callback, FuriTimerTypePeriodic, event_queue); + furi_timer_start(timer, furi_kernel_get_tick_frequency() / 22); + + // Open GUI and register view_port + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + GameEvent event; + for(bool processing = true; processing;) { + FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); + GameState* game_state = (GameState*)acquire_mutex_block(&state_mutex); + + if(event_status == FuriStatusOk) { + // press events + if(event.type == EventTypeKey) { + if(event.input.type == InputTypePress) { + switch(event.input.key) { + case InputKeyUp: + game_state->bird.point.y--; + break; + case InputKeyDown: + game_state->bird.point.y++; + break; + case InputKeyRight: + game_state->bird.point.x++; + break; + case InputKeyLeft: + game_state->bird.point.x--; + break; + case InputKeyOk: + flappy_game_flap(game_state); + break; + case InputKeyBack: + processing = false; + break; + } + } + } else if(event.type == EventTypeTick) { + flappy_game_tick(game_state); + } + } else { + FURI_LOG_D(TAG, "osMessageQueue: event timeout"); + // event timeout + } + + view_port_update(view_port); + release_mutex(&state_mutex, game_state); + } + + view_port_enabled_set(view_port, false); + gui_remove_view_port(gui, view_port); + furi_record_close("gui"); + view_port_free(view_port); + furi_message_queue_free(event_queue); + + return 0; +} \ No newline at end of file diff --git a/applications/game2048/application.fam b/applications/game2048/application.fam new file mode 100644 index 0000000000..613bfa6b34 --- /dev/null +++ b/applications/game2048/application.fam @@ -0,0 +1,10 @@ +App( + appid="GAME_2048", + name="2048", + apptype=FlipperAppType.GAME, + entry_point="game_2048_app", + cdefines=["APP_2048_GAME"], + requires=["gui"], + stack_size=1 * 1024, + order=10, +) diff --git a/applications/game2048/font.c b/applications/game2048/font.c new file mode 100644 index 0000000000..9acfe8d231 --- /dev/null +++ b/applications/game2048/font.c @@ -0,0 +1,155 @@ +#include +#include +#include + +/* 7px 3 width digit font by Sefjor + * digit encoding example + *7 ¦¦¦ 111 + *6 ¦ ¦ 101 + *5 ¦ ¦ 101 + *4 ¦ ¦ 101 + *3 ¦ ¦ 101 + *2 ¦ ¦ 101 + *1 ¦¦¦ 111 + *0 000 this string is empty, used to align + * ? ? ? + * FE 82 FE //0 + */ + +static uint8_t font[10][3] = { + {0xFE, 0x82, 0xFE}, // 0; + {0x00, 0xFE, 0x00}, // 1; + {0xF2, 0x92, 0x9E}, // 2; + {0x92, 0x92, 0xFE}, // 3; + {0x1E, 0x10, 0xFE}, // 4; + {0x9E, 0x92, 0xF2}, // 5; + {0xFE, 0x92, 0xF2}, // 6; + {0x02, 0x02, 0xFE}, // 7; + {0xFE, 0x92, 0xFE}, // 8; + {0x9E, 0x92, 0xFE}, // 9; +}; + +#define FONT_HEIGHT 8 +#define FONT_WIDTH 3 + +static void game_2048_draw_black_point(Canvas* const canvas, uint8_t x, uint8_t y) { + canvas_set_color(canvas, ColorBlack); + canvas_draw_dot(canvas, x, y); +} + +static void game_2048_draw_white_square(Canvas* const canvas, uint8_t x, uint8_t y) { + canvas_set_color(canvas, ColorWhite); + canvas_draw_box(canvas, x, y, 15 - 1, 15 - 3); +} + +static void _game_2048_draw_column( + Canvas* const canvas, + int digit, + int coord_x, + int coord_y, + uint8_t column) { + for(int x = 0; x < FONT_HEIGHT; ++x) { + bool is_filled = (font[digit][column] >> x) & 0x1; + if(is_filled) { + game_2048_draw_black_point(canvas, coord_x, coord_y + x); + } + } +} + +static uint8_t + _game_2048_draw_digit(Canvas* const canvas, uint8_t digit, uint8_t coord_x, uint8_t coord_y) { + uint8_t x_shift = 0; + + if(digit != 1) { + for(int column = 0; column < FONT_WIDTH; column++) { + _game_2048_draw_column(canvas, digit, coord_x + column, coord_y, column); + } + x_shift = 3; + } else { + _game_2048_draw_column(canvas, digit, coord_x, coord_y, true); + x_shift = 1; + } + + return x_shift; +} + +/* We drawing text field with 1px white border + * at given coords. Total size is: + * x = 9 = 1 + 7 + 1 + * y = 1 + total text width + 1 + */ + +/* + * Returns array of digits and it's size, + * digits should be at least 4 size + * works from 1 to 9999 + */ +static void _game_2048_parse_number(uint16_t number, uint8_t* digits, uint8_t* size) { + *size = 0; + uint16_t divider = 1000; + //find first digit, result is highest divider + while(number / divider == 0) { + divider /= 10; + if(divider == 0) { + break; + } + } + + for(int i = 0; divider != 0; i++) { + digits[i] = number / divider; + number %= divider; + *size += 1; + divider /= 10; + } +} + +uint8_t _game_2048_calculate_shift(uint16_t num) { + uint8_t shift = 0; + switch(num) { + case 1: + shift = 7; + break; + case 2: + case 4: + case 8: + shift = 6; + break; + case 16: + shift = 5; + break; + case 32: + case 64: + shift = 4; + break; + case 128: + shift = 3; + break; + case 256: + shift = 2; + break; + case 512: + shift = 3; + break; + case 1024: + shift = 2; + break; + } + return shift; +} + +void game_2048_draw_number(Canvas* const canvas, uint8_t x, uint8_t y, int number) { + uint8_t digits[4]; + uint8_t size; + + _game_2048_parse_number(number, digits, &size); + if(number > 512) { + game_2048_draw_white_square(canvas, x, y); + } + + x += _game_2048_calculate_shift(number); + y += 4; + for(int i = 0; i < size; ++i) { + x += _game_2048_draw_digit(canvas, digits[i], x, y); + x++; + } +} \ No newline at end of file diff --git a/applications/game2048/font.h b/applications/game2048/font.h new file mode 100644 index 0000000000..500123ac38 --- /dev/null +++ b/applications/game2048/font.h @@ -0,0 +1,3 @@ +#include + +void game_2048_draw_number(Canvas* const canvas, uint8_t x, uint8_t y, int number); \ No newline at end of file diff --git a/applications/game2048/game_2048.c b/applications/game2048/game_2048.c new file mode 100644 index 0000000000..e3d68acf57 --- /dev/null +++ b/applications/game2048/game_2048.c @@ -0,0 +1,426 @@ +#include +#include +#include + +#include "font.h" + +/* + 0 empty + 1 2 + 2 4 + 3 8 + 4 16 + 5 32 + 6 64 + 7 128 + 8 256 + 9 512 +10 1024 +11 2048 + */ +typedef uint8_t cell_state; + +/* DirectionLeft <-- ++????++????++????++????+ +? ?? ?? ?? ? ++????++????++????++????+ ++????++????++????++????+ +? ?? ?? ?? ? ++????++????++????++????+ ++??+????+??++????++????+ +? 2? 2 ? ?? ?? ? ++??+????+??++????++????+ ++??+????++??+????++????+ +? 4? 4 ?? 2? 2 ?? ? ++??+????++??+????++????+ +*/ +typedef enum { + DirectionIdle, + DirectionUp, + DirectionRight, + DirectionDown, + DirectionLeft, +} Direction; + +typedef struct { + uint8_t y; // 0 <= y <= 3 + uint8_t x; // 0 <= x <= 3 +} Point; + +typedef struct { + /* + +----X + | + | field[x][y] + Y + */ + uint8_t field[4][4]; + + uint8_t next_field[4][4]; + + Direction direction; + /* + field { + animation-timing-function: linear; + animation-duration: 300ms; + } + */ + uint32_t animation_start_ticks; + + Point keyframe_from[4][4]; + + Point keyframe_to[4][4]; + +} GameState; + +#define XtoPx(x) (33 + x * 15) + +#define YtoPx(x) (1 + y * 15) + +static void game_2048_render_callback(Canvas* const canvas, ValueMutex* const vm) { + const GameState* game_state = acquire_mutex(vm, 25); + if(game_state == NULL) { + return; + } + + // Before the function is called, the state is set with the canvas_reset(canvas) + + if(game_state->direction == DirectionIdle) { + for(uint8_t y = 0; y < 4; y++) { + for(uint8_t x = 0; x < 4; x++) { + uint8_t field = game_state->field[y][x]; + canvas_set_color(canvas, ColorBlack); + canvas_draw_frame(canvas, XtoPx(x), YtoPx(y), 16, 16); + if(field != 0) { + game_2048_draw_number(canvas, XtoPx(x), YtoPx(y), 1 << field); + } + } + } + } else { // if animation + // for animation + // (osKernelGetSysTimerCount() - game_state->animation_start_ticks) / osKernelGetSysTimerFreq(); + + // TODO: end animation event/callback/set AnimationIdle + } + + release_mutex(vm, game_state); +} + +static void game_2048_input_callback( + const InputEvent* const input_event, + FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + furi_message_queue_put(event_queue, input_event, FuriWaitForever); +} + +// if return false then Game Over +static bool game_2048_set_new_number(GameState* const game_state) { + uint8_t empty = 0; + for(uint8_t y = 0; y < 4; y++) { + for(uint8_t x = 0; x < 4; x++) { + if(game_state->field[y][x] == 0) { + empty++; + } + } + } + + if(empty == 0) { + return false; + } + + if(empty == 1) { + // If it is 1 move before losing, we help the player and get rid of randomness. + for(uint8_t y = 0; y < 4; y++) { + for(uint8_t x = 0; x < 4; x++) { + if(game_state->field[y][x] == 0) { + bool haveFour = + // +----X + // | + // | field[x][y], 0 <= x, y <= 3 + // Y + + // up == 4 or + (y > 0 && game_state->field[y - 1][x] == 2) || + // right == 4 or + (x < 3 && game_state->field[y][x + 1] == 2) || + // down == 4 + (y < 3 && game_state->field[y + 1][x] == 2) || + // left == 4 + (x > 0 && game_state->field[y][x - 1] == 2); + + if(haveFour) { + game_state->field[y][x] = 2; + return true; + } + + game_state->field[y][x] = 1; + return true; + } + } + } + } + + uint8_t target = rand() % empty; + uint8_t twoOrFore = rand() % 4 < 3; + for(uint8_t y = 0; y < 4; y++) { + for(uint8_t x = 0; x < 4; x++) { + if(game_state->field[y][x] == 0) { + if(target == 0) { + if(twoOrFore) { + game_state->field[y][x] = 1; // 2^1 == 2 75% + } else { + game_state->field[y][x] = 2; // 2^2 == 4 25% + } + goto exit; + } + target--; + } + } + } +exit: + return true; +} + +// static void game_2048_process_row(uint8_t before[4], uint8_t *(after[4])) { +// // move 1 row left. +// for(uint8_t i = 0; i <= 2; i++) { +// if(before[i] != 0 && before[i] == before[i + 1]) { +// before[i]++; +// before[i + 1] = 0; +// i++; +// } +// } +// for(uint8_t i = 0, j = 0; i <= 3; i++) { +// if (before[i] != 0) { +// before[j] = before[i]; +// i++; +// } +// } +// } + +static void game_2048_process_move(GameState* const game_state) { + memset(game_state->next_field, 0, sizeof(game_state->next_field)); + // +----X + // | + // | field[x][y], 0 <= x, y <= 3 + // Y + + // up + if(game_state->direction == DirectionUp) { + for(uint8_t x = 0; x < 4; x++) { + uint8_t next_y = 0; + for(int8_t y = 0; y < 4; y++) { + uint8_t field = game_state->field[y][x]; + if(field == 0) { + continue; + } + + if(game_state->next_field[next_y][x] == 0) { + game_state->next_field[next_y][x] = field; + continue; + } + + if(field == game_state->next_field[next_y][x]) { + game_state->next_field[next_y][x]++; + next_y++; + continue; + } + + next_y++; + game_state->next_field[next_y][x] = field; + } + } + } + + // right + if(game_state->direction == DirectionRight) { + for(uint8_t y = 0; y < 4; y++) { + uint8_t next_x = 3; + for(int8_t x = 3; x >= 0; x--) { + uint8_t field = game_state->field[y][x]; + if(field == 0) { + continue; + } + + if(game_state->next_field[y][next_x] == 0) { + game_state->next_field[y][next_x] = field; + continue; + } + + if(field == game_state->next_field[y][next_x]) { + game_state->next_field[y][next_x]++; + next_x--; + continue; + } + + next_x--; + game_state->next_field[y][next_x] = field; + } + } + } + + // down + if(game_state->direction == DirectionDown) { + for(uint8_t x = 0; x < 4; x++) { + uint8_t next_y = 3; + for(int8_t y = 3; y >= 0; y--) { + uint8_t field = game_state->field[y][x]; + if(field == 0) { + continue; + } + + if(game_state->next_field[next_y][x] == 0) { + game_state->next_field[next_y][x] = field; + continue; + } + + if(field == game_state->next_field[next_y][x]) { + game_state->next_field[next_y][x]++; + next_y--; + continue; + } + + next_y--; + game_state->next_field[next_y][x] = field; + } + } + } + + // 0, 0, 1, 1 + // 1, 0, 0, 0 + + // left + if(game_state->direction == DirectionLeft) { + for(uint8_t y = 0; y < 4; y++) { + uint8_t next_x = 0; + for(uint8_t x = 0; x < 4; x++) { + uint8_t field = game_state->field[y][x]; + if(field == 0) { + continue; + } + + if(game_state->next_field[y][next_x] == 0) { + game_state->next_field[y][next_x] = field; + continue; + } + + if(field == game_state->next_field[y][next_x]) { + game_state->next_field[y][next_x]++; + next_x++; + continue; + } + + next_x++; + game_state->next_field[y][next_x] = field; + } + } + } + + // + game_state->direction = DirectionIdle; + memcpy(game_state->field, game_state->next_field, sizeof(game_state->field)); + // +} + +int32_t game_2048_app(void* p) { + int32_t return_code = 0; + + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(InputEvent)); + + GameState* game_state = malloc(sizeof(GameState)); + + ValueMutex state_mutex; + if(!init_mutex(&state_mutex, game_state, sizeof(GameState))) { + return_code = 255; + goto free_and_exit; + } + + ViewPort* view_port = view_port_alloc(); + view_port_draw_callback_set( + view_port, (ViewPortDrawCallback)game_2048_render_callback, &state_mutex); + view_port_input_callback_set( + view_port, (ViewPortInputCallback)game_2048_input_callback, event_queue); + + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + game_state->direction = DirectionIdle; + game_2048_set_new_number(game_state); + game_2048_set_new_number(game_state); + + /* + game_state->field[0][0] = 0; + game_state->field[0][1] = 1; + game_state->field[0][2] = 2; + game_state->field[0][3] = 3; + + game_state->field[1][0] = 4; + game_state->field[1][1] = 5; + game_state->field[1][2] = 6; + game_state->field[1][3] = 7; + + game_state->field[2][0] = 8; + game_state->field[2][1] = 9; + game_state->field[2][2] = 10; + game_state->field[2][3] = 11; + + game_state->field[3][0] = 0; + game_state->field[3][1] = 0; + game_state->field[3][2] = 0; + game_state->field[3][3] = 0; + */ + + InputEvent event; + for(bool loop = true; loop;) { + FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100); + GameState* game_state = (GameState*)acquire_mutex_block(&state_mutex); + + if(event_status == FuriStatusOk) { + if(event.type == InputTypePress) { + switch(event.key) { + case InputKeyUp: + game_state->direction = DirectionUp; + game_2048_process_move(game_state); + game_2048_set_new_number(game_state); + break; + case InputKeyDown: + game_state->direction = DirectionDown; + game_2048_process_move(game_state); + game_2048_set_new_number(game_state); + break; + case InputKeyRight: + game_state->direction = DirectionRight; + game_2048_process_move(game_state); + game_2048_set_new_number(game_state); + break; + case InputKeyLeft: + game_state->direction = DirectionLeft; + game_2048_process_move(game_state); + game_2048_set_new_number(game_state); + break; + case InputKeyOk:; // TODO: reinit in game ower state + break; + case InputKeyBack: + loop = false; + break; + } + } + } + + view_port_update(view_port); + release_mutex(&state_mutex, game_state); + } + + view_port_enabled_set(view_port, false); + gui_remove_view_port(gui, view_port); + furi_record_close("gui"); + view_port_free(view_port); + delete_mutex(&state_mutex); + +free_and_exit: + free(game_state); + furi_message_queue_free(event_queue); + + return return_code; +} \ No newline at end of file diff --git a/applications/game_of_life/application.fam b/applications/game_of_life/application.fam new file mode 100644 index 0000000000..8379327d01 --- /dev/null +++ b/applications/game_of_life/application.fam @@ -0,0 +1,10 @@ +App( + appid="GAME_GameOfLife", + name="Game of Life", + apptype=FlipperAppType.GAME, + entry_point="game_of_life_app", + cdefines=["APP_GAMEOFLIFE_GAME"], + requires=["gui"], + stack_size=1 * 1024, + order=110, +) diff --git a/applications/game_of_life/game_of_life.c b/applications/game_of_life/game_of_life.c new file mode 100644 index 0000000000..33bb31df1c --- /dev/null +++ b/applications/game_of_life/game_of_life.c @@ -0,0 +1,159 @@ +#include +#include + +#include +#include + +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 +#define TOTAL_PIXELS SCREEN_WIDTH* SCREEN_HEIGHT + +typedef enum { + EventTypeTick, + EventTypeKey, +} EventType; + +typedef struct { + EventType type; + InputEvent input; +} AppEvent; + +typedef struct { + bool revive; + int evo; +} State; + +unsigned char new[TOTAL_PIXELS] = {}; +unsigned char old[TOTAL_PIXELS] = {}; +unsigned char* fields[] = {new, old}; + +int current = 0; +int next = 1; + +unsigned char get_cell(int x, int y) { + if(x <= 0 || x >= SCREEN_WIDTH) return 0; + if(y <= 0 || y >= SCREEN_HEIGHT) return 0; + + int pix = (y * SCREEN_WIDTH) + x; + return fields[current][pix]; +} + +int count_neightbors(int x, int y) { + return get_cell(x + 1, y - 1) + get_cell(x - 1, y - 1) + get_cell(x - 1, y + 1) + + get_cell(x + 1, y + 1) + get_cell(x + 1, y) + get_cell(x - 1, y) + get_cell(x, y - 1) + + get_cell(x, y + 1); +} + +static void update_field(State* state) { + if(state->revive) { + for(int i = 0; i < TOTAL_PIXELS; ++i) { + if((random() % 100) == 1) { + fields[current][i] = 1; + } + state->revive = false; + } + } + + for(int i = 0; i < TOTAL_PIXELS; ++i) { + int x = i % SCREEN_WIDTH; + int y = (int)(i / SCREEN_WIDTH); + + int v = get_cell(x, y); + int n = count_neightbors(x, y); + + if(v && n == 3) { + ++state->evo; + } else if(v && (n < 2 || n > 3)) { + ++state->evo; + v = 0; + } else if(!v && n == 3) { + ++state->evo; + v = 1; + } + + fields[next][i] = v; + } + + next ^= current; + current ^= next; + next ^= current; + + if(state->evo < TOTAL_PIXELS) { + state->revive = true; + state->evo = 0; + } +} + +static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) { + furi_assert(event_queue); + + AppEvent event = {.type = EventTypeKey, .input = *input_event}; + furi_message_queue_put(event_queue, &event, 0); +} + +static void render_callback(Canvas* canvas, void* ctx) { + State* state = (State*)acquire_mutex((ValueMutex*)ctx, 25); + canvas_clear(canvas); + + for(int i = 0; i < TOTAL_PIXELS; ++i) { + int x = i % SCREEN_WIDTH; + int y = (int)(i / SCREEN_WIDTH); + if(fields[current][i] == 1) canvas_draw_dot(canvas, x, y); + } + release_mutex((ValueMutex*)ctx, state); +} + +int32_t game_of_life_app(void* p) { + UNUSED(p); + srand(DWT->CYCCNT); + + FuriMessageQueue* event_queue = furi_message_queue_alloc(1, sizeof(AppEvent)); + furi_check(event_queue); + + State* _state = malloc(sizeof(State)); + + ValueMutex state_mutex; + if(!init_mutex(&state_mutex, _state, sizeof(State))) { + printf("cannot create mutex\r\n"); + free(_state); + return 255; + } + + ViewPort* view_port = view_port_alloc(); + view_port_draw_callback_set(view_port, render_callback, &state_mutex); + view_port_input_callback_set(view_port, input_callback, event_queue); + + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + AppEvent event; + for(bool processing = true; processing;) { + State* state = (State*)acquire_mutex_block(&state_mutex); + FuriStatus event_status = furi_message_queue_get(event_queue, &event, 25); + + if(event_status == FuriStatusOk && event.type == EventTypeKey && + event.input.type == InputTypePress) { + if(event.input.key == InputKeyBack) { + // furiac_exit(NULL); + processing = false; + release_mutex(&state_mutex, state); + break; + } + } + + update_field(state); + + view_port_update(view_port); + release_mutex(&state_mutex, state); + } + + view_port_enabled_set(view_port, false); + gui_remove_view_port(gui, view_port); + furi_record_close("gui"); + view_port_free(view_port); + furi_message_queue_free(event_queue); + delete_mutex(&state_mutex); + free(_state); + + return 0; +} \ No newline at end of file diff --git a/applications/meta/application.fam b/applications/meta/application.fam index 9409a33b19..fbd699b420 100644 --- a/applications/meta/application.fam +++ b/applications/meta/application.fam @@ -48,6 +48,11 @@ App( "tetris_game", "arkanoid_game", "tictactoe_game", + "INTAPP_Chip8", + "GAME_FlappyBird", + "GAME_VideoPoker", + "GAME_2048", + "GAME_GameOfLife", ], ) @@ -76,5 +81,7 @@ App( "wifi_marauder", "esp8266_deauth", "wifi_scanner", + "APPS_MouseJiggler", + "APPS_WAVPlayer", ], ) \ No newline at end of file diff --git a/applications/mouse_jiggler/application.fam b/applications/mouse_jiggler/application.fam new file mode 100644 index 0000000000..d2351f22cd --- /dev/null +++ b/applications/mouse_jiggler/application.fam @@ -0,0 +1,10 @@ +App( + appid="APPS_MouseJiggler", + name="Mouse Jiggler", + apptype=FlipperAppType.PLUGIN, + entry_point="mouse_jiggler_app", + cdefines=["APP_MOUSE_JIGGLER"], + requires=["gui"], + stack_size=1 * 1024, + order=150, +) \ No newline at end of file diff --git a/applications/mouse_jiggler/mouse_jiggler.c b/applications/mouse_jiggler/mouse_jiggler.c new file mode 100644 index 0000000000..e18024b970 --- /dev/null +++ b/applications/mouse_jiggler/mouse_jiggler.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include + +#define MOUSE_MOVE_SHORT 5 +#define MOUSE_MOVE_LONG 20 + +typedef enum { + EventTypeInput, +} EventType; + +typedef struct { + union { + InputEvent input; + }; + EventType type; +} UsbMouseEvent; + +static void mouse_jiggler_render_callback(Canvas* canvas, void* ctx) { + canvas_clear(canvas); + + canvas_set_font(canvas, FontPrimary); + canvas_draw_str(canvas, 0, 10, "USB Mouse Jiggler"); + + canvas_set_font(canvas, FontSecondary); + canvas_draw_str(canvas, 0, 51, "Hold [ok] to start"); + canvas_draw_str(canvas, 0, 63, "Hold [back] to exit"); +} + +static void mouse_jiggler_input_callback(InputEvent* input_event, void* ctx) { + FuriMessageQueue* event_queue = ctx; + + UsbMouseEvent event; + event.type = EventTypeInput; + event.input = *input_event; + furi_message_queue_put(event_queue, &event, FuriWaitForever); +} + +int32_t mouse_jiggler_app(void* p) { + FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(UsbMouseEvent)); + furi_check(event_queue); + ViewPort* view_port = view_port_alloc(); + + FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config(); + furi_hal_usb_set_config(&usb_hid,NULL); + + view_port_draw_callback_set(view_port, mouse_jiggler_render_callback, NULL); + view_port_input_callback_set(view_port, mouse_jiggler_input_callback, event_queue); + + // Open GUI and register view_port + Gui* gui = furi_record_open("gui"); + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + + UsbMouseEvent event; + //bool status = 0; + + while(1) { + FuriStatus event_status = furi_message_queue_get(event_queue, &event, FuriWaitForever); + + furi_hal_hid_mouse_move(MOUSE_MOVE_SHORT, 0); + furi_delay_ms(500); + furi_hal_hid_mouse_move(-MOUSE_MOVE_SHORT, 0); + furi_delay_ms(500); + + if(event_status == FuriStatusOk) { + if(event.type == EventTypeInput) { + if(event.input.key == InputKeyBack) { + break; + } + } + } + + view_port_update(view_port); + } + + furi_hal_usb_set_config(usb_mode_prev, NULL); + + // remove & free all stuff created by app + gui_remove_view_port(gui, view_port); + view_port_free(view_port); + furi_message_queue_free(event_queue); + + return 0; +} \ No newline at end of file diff --git a/applications/wav_player/application.fam b/applications/wav_player/application.fam new file mode 100644 index 0000000000..e320c8421b --- /dev/null +++ b/applications/wav_player/application.fam @@ -0,0 +1,9 @@ +App( + appid="APPS_WAVPlayer", + name="WAV Player", + apptype=FlipperAppType.PLUGIN, + entry_point="wav_player_app", + cdefines=["APP_WAV_PLAYER"], + stack_size=2 * 1024, + order=280, +) diff --git a/applications/wav_player/wav_parser.c b/applications/wav_player/wav_parser.c new file mode 100644 index 0000000000..c2897706cd --- /dev/null +++ b/applications/wav_player/wav_parser.c @@ -0,0 +1,84 @@ +#include "wav_parser.h" + +#define TAG "WavParser" + +const char* format_text(FormatTag tag) { + switch(tag) { + case FormatTagPCM: + return "PCM"; + case FormatTagIEEE_FLOAT: + return "IEEE FLOAT"; + default: + return "Unknown"; + } +}; + +struct WavParser { + WavHeaderChunk header; + WavFormatChunk format; + WavDataChunk data; + size_t wav_data_start; + size_t wav_data_end; +}; + +WavParser* wav_parser_alloc() { + return malloc(sizeof(WavParser)); +} + +void wav_parser_free(WavParser* parser) { + free(parser); +} + +bool wav_parser_parse(WavParser* parser, Stream* stream) { + stream_read(stream, (uint8_t*)&parser->header, sizeof(WavHeaderChunk)); + stream_read(stream, (uint8_t*)&parser->format, sizeof(WavFormatChunk)); + stream_read(stream, (uint8_t*)&parser->data, sizeof(WavDataChunk)); + + if(memcmp(parser->header.riff, "RIFF", 4) != 0 || + memcmp(parser->header.wave, "WAVE", 4) != 0) { + FURI_LOG_E(TAG, "WAV: wrong header"); + return false; + } + + if(memcmp(parser->format.fmt, "fmt ", 4) != 0) { + FURI_LOG_E(TAG, "WAV: wrong format"); + return false; + } + + if(parser->format.tag != FormatTagPCM || memcmp(parser->data.data, "data", 4) != 0) { + FURI_LOG_E( + TAG, + "WAV: non-PCM format %u, next '%lu'", + parser->format.tag, + (uint32_t)parser->data.data); + return false; + } + + FURI_LOG_I( + TAG, + "Format tag: %s, ch: %u, smplrate: %lu, bps: %lu, bits: %u", + format_text(parser->format.tag), + parser->format.channels, + parser->format.sample_rate, + parser->format.byte_per_sec, + parser->format.bits_per_sample); + + parser->wav_data_start = stream_tell(stream); + parser->wav_data_end = parser->wav_data_start + parser->data.size; + + FURI_LOG_I(TAG, "data: %u - %u", parser->wav_data_start, parser->wav_data_end); + + return true; +} + +size_t wav_parser_get_data_start(WavParser* parser) { + return parser->wav_data_start; +} + +size_t wav_parser_get_data_end(WavParser* parser) { + return parser->wav_data_end; +} + +size_t wav_parser_get_data_len(WavParser* parser) { + return parser->wav_data_end - parser->wav_data_start; +} diff --git a/applications/wav_player/wav_parser.h b/applications/wav_player/wav_parser.h new file mode 100644 index 0000000000..f50c48b3fd --- /dev/null +++ b/applications/wav_player/wav_parser.h @@ -0,0 +1,51 @@ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + FormatTagPCM = 0x0001, + FormatTagIEEE_FLOAT = 0x0003, +} FormatTag; + +typedef struct { + uint8_t riff[4]; + uint32_t size; + uint8_t wave[4]; +} WavHeaderChunk; + +typedef struct { + uint8_t fmt[4]; + uint32_t size; + uint16_t tag; + uint16_t channels; + uint32_t sample_rate; + uint32_t byte_per_sec; + uint16_t block_align; + uint16_t bits_per_sample; +} WavFormatChunk; + +typedef struct { + uint8_t data[4]; + uint32_t size; +} WavDataChunk; + +typedef struct WavParser WavParser; + +WavParser* wav_parser_alloc(); + +void wav_parser_free(WavParser* parser); + +bool wav_parser_parse(WavParser* parser, Stream* stream); + +size_t wav_parser_get_data_start(WavParser* parser); + +size_t wav_parser_get_data_end(WavParser* parser); + +size_t wav_parser_get_data_len(WavParser* parser); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/applications/wav_player/wav_player.c b/applications/wav_player/wav_player.c new file mode 100644 index 0000000000..c18026331b --- /dev/null +++ b/applications/wav_player/wav_player.c @@ -0,0 +1,298 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "wav_player_hal.h" +#include "wav_parser.h" +#include "wav_player_view.h" +#include + +#define TAG "WavPlayer" + +static bool open_wav_stream(Storage* storage, Stream* stream) { + DialogsApp* dialogs = furi_record_open("dialogs"); + bool result = false; + string_t path; + string_init(path); + string_set_str(path, "/ext/wav_player"); + bool ret = dialog_file_browser_show(dialogs, path, path, ".wav", true, &I_music_10px, false); + + furi_record_close("dialogs"); + if(ret) { + if(!file_stream_open(stream, string_get_cstr(path), FSAM_READ, FSOM_OPEN_EXISTING)) { + FURI_LOG_E(TAG, "Cannot open file \"%s\"", string_get_cstr(path)); + } else { + result = true; + } + } + string_clear(path); + return result; +} + +typedef enum { + WavPlayerEventHalfTransfer, + WavPlayerEventFullTransfer, + WavPlayerEventCtrlVolUp, + WavPlayerEventCtrlVolDn, + WavPlayerEventCtrlMoveL, + WavPlayerEventCtrlMoveR, + WavPlayerEventCtrlOk, + WavPlayerEventCtrlBack, +} WavPlayerEventType; + +typedef struct { + WavPlayerEventType type; +} WavPlayerEvent; + +static void wav_player_dma_isr(void* ctx) { + FuriMessageQueue* event_queue = ctx; + + // half of transfer + if(LL_DMA_IsActiveFlag_HT1(DMA1)) { + LL_DMA_ClearFlag_HT1(DMA1); + // fill first half of buffer + WavPlayerEvent event = {.type = WavPlayerEventHalfTransfer}; + furi_message_queue_put(event_queue, &event, 0); + } + + // transfer complete + if(LL_DMA_IsActiveFlag_TC1(DMA1)) { + LL_DMA_ClearFlag_TC1(DMA1); + // fill second half of buffer + WavPlayerEvent event = {.type = WavPlayerEventFullTransfer}; + furi_message_queue_put(event_queue, &event, 0); + } +} + +typedef struct { + Storage* storage; + Stream* stream; + WavParser* parser; + uint16_t* sample_buffer; + uint8_t* tmp_buffer; + + size_t samples_count_half; + size_t samples_count; + + FuriMessageQueue* queue; + + float volume; + bool play; + + WavPlayerView* view; + ViewDispatcher* view_dispatcher; + Gui* gui; + NotificationApp* notification; +} WavPlayerApp; + +static WavPlayerApp* app_alloc() { + WavPlayerApp* app = malloc(sizeof(WavPlayerApp)); + app->samples_count_half = 1024 * 4; + app->samples_count = app->samples_count_half * 2; + app->storage = furi_record_open("storage"); + app->stream = file_stream_alloc(app->storage); + app->parser = wav_parser_alloc(); + app->sample_buffer = malloc(sizeof(uint16_t) * app->samples_count); + app->tmp_buffer = malloc(sizeof(uint8_t) * app->samples_count); + app->queue = furi_message_queue_alloc(10, sizeof(WavPlayerEvent)); + + app->volume = 10.0f; + app->play = true; + + app->gui = furi_record_open("gui"); + app->view_dispatcher = view_dispatcher_alloc(); + app->view = wav_player_view_alloc(); + + view_dispatcher_add_view(app->view_dispatcher, 0, wav_player_view_get_view(app->view)); + view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen); + view_dispatcher_switch_to_view(app->view_dispatcher, 0); + + app->notification = furi_record_open("notification"); + notification_message(app->notification, &sequence_display_backlight_enforce_on); + + return app; +} + +static void app_free(WavPlayerApp* app) { + view_dispatcher_remove_view(app->view_dispatcher, 0); + view_dispatcher_free(app->view_dispatcher); + wav_player_view_free(app->view); + furi_record_close("gui"); + + furi_message_queue_free(app->queue); + free(app->tmp_buffer); + free(app->sample_buffer); + wav_parser_free(app->parser); + stream_free(app->stream); + furi_record_close("storage"); + + notification_message(app->notification, &sequence_display_backlight_enforce_auto); + furi_record_close("notification"); + free(app); +} + +// TODO: that works only with 8-bit 2ch audio +static bool fill_data(WavPlayerApp* app, size_t index) { + uint16_t* sample_buffer_start = &app->sample_buffer[index]; + size_t count = stream_read(app->stream, app->tmp_buffer, app->samples_count); + + for(size_t i = count; i < app->samples_count; i++) { + app->tmp_buffer[i] = 0; + } + + for(size_t i = 0; i < app->samples_count; i += 2) { + float data = app->tmp_buffer[i]; + data -= UINT8_MAX / 2; // to signed + data /= UINT8_MAX / 2; // scale -1..1 + + data *= app->volume; // volume + data = tanhf(data); // hyperbolic tangent limiter + + data *= UINT8_MAX / 2; // scale -128..127 + data += UINT8_MAX / 2; // to unsigned + + if(data < 0) { + data = 0; + } + + if(data > 255) { + data = 255; + } + + sample_buffer_start[i / 2] = data; + } + + wav_player_view_set_data(app->view, sample_buffer_start, app->samples_count_half); + + return count != app->samples_count; +} + +static void ctrl_callback(WavPlayerCtrl ctrl, void* ctx) { + FuriMessageQueue* event_queue = ctx; + WavPlayerEvent event; + + switch(ctrl) { + case WavPlayerCtrlVolUp: + event.type = WavPlayerEventCtrlVolUp; + furi_message_queue_put(event_queue, &event, 0); + break; + case WavPlayerCtrlVolDn: + event.type = WavPlayerEventCtrlVolDn; + furi_message_queue_put(event_queue, &event, 0); + break; + case WavPlayerCtrlMoveL: + event.type = WavPlayerEventCtrlMoveL; + furi_message_queue_put(event_queue, &event, 0); + break; + case WavPlayerCtrlMoveR: + event.type = WavPlayerEventCtrlMoveR; + furi_message_queue_put(event_queue, &event, 0); + break; + case WavPlayerCtrlOk: + event.type = WavPlayerEventCtrlOk; + furi_message_queue_put(event_queue, &event, 0); + break; + case WavPlayerCtrlBack: + event.type = WavPlayerEventCtrlBack; + furi_message_queue_put(event_queue, &event, 0); + break; + default: + break; + } +} + +static void app_run(WavPlayerApp* app) { + if(!open_wav_stream(app->storage, app->stream)) return; + if(!wav_parser_parse(app->parser, app->stream)) return; + + wav_player_view_set_volume(app->view, app->volume); + wav_player_view_set_start(app->view, wav_parser_get_data_start(app->parser)); + wav_player_view_set_current(app->view, stream_tell(app->stream)); + wav_player_view_set_end(app->view, wav_parser_get_data_end(app->parser)); + wav_player_view_set_play(app->view, app->play); + + wav_player_view_set_context(app->view, app->queue); + wav_player_view_set_ctrl_callback(app->view, ctrl_callback); + + bool eof = fill_data(app, 0); + eof = fill_data(app, app->samples_count_half); + + wav_player_speaker_init(); + wav_player_dma_init((uint32_t)app->sample_buffer, app->samples_count); + + furi_hal_interrupt_set_isr(FuriHalInterruptIdDma1Ch1, wav_player_dma_isr, app->queue); + + wav_player_dma_start(); + wav_player_speaker_start(); + + WavPlayerEvent event; + + while(1) { + if(furi_message_queue_get(app->queue, &event, FuriWaitForever) == FuriStatusOk) { + if(event.type == WavPlayerEventHalfTransfer) { + eof = fill_data(app, 0); + wav_player_view_set_current(app->view, stream_tell(app->stream)); + if(eof) { + stream_seek( + app->stream, + wav_parser_get_data_start(app->parser), + StreamOffsetFromStart); + } + + } else if(event.type == WavPlayerEventFullTransfer) { + eof = fill_data(app, app->samples_count_half); + wav_player_view_set_current(app->view, stream_tell(app->stream)); + if(eof) { + stream_seek( + app->stream, + wav_parser_get_data_start(app->parser), + StreamOffsetFromStart); + } + } else if(event.type == WavPlayerEventCtrlVolUp) { + if(app->volume < 9.9) app->volume += 0.2; + wav_player_view_set_volume(app->view, app->volume); + } else if(event.type == WavPlayerEventCtrlVolDn) { + if(app->volume > 0.01) app->volume -= 0.2; + wav_player_view_set_volume(app->view, app->volume); + } else if(event.type == WavPlayerEventCtrlMoveL) { + int32_t seek = stream_tell(app->stream) - wav_parser_get_data_start(app->parser); + seek = MIN(seek, wav_parser_get_data_len(app->parser) / 100); + stream_seek(app->stream, -seek, StreamOffsetFromCurrent); + wav_player_view_set_current(app->view, stream_tell(app->stream)); + } else if(event.type == WavPlayerEventCtrlMoveR) { + int32_t seek = wav_parser_get_data_end(app->parser) - stream_tell(app->stream); + seek = MIN(seek, wav_parser_get_data_len(app->parser) / 100); + stream_seek(app->stream, seek, StreamOffsetFromCurrent); + wav_player_view_set_current(app->view, stream_tell(app->stream)); + } else if(event.type == WavPlayerEventCtrlOk) { + app->play = !app->play; + wav_player_view_set_play(app->view, app->play); + + if(!app->play) { + wav_player_speaker_stop(); + } else { + wav_player_speaker_start(); + } + } else if(event.type == WavPlayerEventCtrlBack) { + break; + } + } + } + + wav_player_speaker_stop(); + wav_player_dma_stop(); + + furi_hal_interrupt_set_isr(FuriHalInterruptIdDma1Ch1, NULL, NULL); +} + +int32_t wav_player_app(void* p) { + WavPlayerApp* app = app_alloc(); + app_run(app); + app_free(app); + return 0; +} diff --git a/applications/wav_player/wav_player_hal.c b/applications/wav_player/wav_player_hal.c new file mode 100644 index 0000000000..ad0c019be9 --- /dev/null +++ b/applications/wav_player/wav_player_hal.c @@ -0,0 +1,58 @@ +#include "wav_player_hal.h" +#include +#include + +#define FURI_HAL_SPEAKER_TIMER TIM16 +#define FURI_HAL_SPEAKER_CHANNEL LL_TIM_CHANNEL_CH1 +#define DMA_INSTANCE DMA1, LL_DMA_CHANNEL_1 + +void wav_player_speaker_init() { + LL_TIM_InitTypeDef TIM_InitStruct = {0}; + TIM_InitStruct.Prescaler = 4; + TIM_InitStruct.Autoreload = 255; + LL_TIM_Init(FURI_HAL_SPEAKER_TIMER, &TIM_InitStruct); + + LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0}; + TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1; + TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_ENABLE; + TIM_OC_InitStruct.CompareValue = 127; + LL_TIM_OC_Init(FURI_HAL_SPEAKER_TIMER, FURI_HAL_SPEAKER_CHANNEL, &TIM_OC_InitStruct); +} + +void wav_player_speaker_start() { + LL_TIM_EnableAllOutputs(FURI_HAL_SPEAKER_TIMER); + LL_TIM_EnableCounter(FURI_HAL_SPEAKER_TIMER); +} + +void wav_player_speaker_stop() { + LL_TIM_DisableAllOutputs(FURI_HAL_SPEAKER_TIMER); + LL_TIM_DisableCounter(FURI_HAL_SPEAKER_TIMER); +} + +void wav_player_dma_init(uint32_t address, size_t size) { + uint32_t dma_dst = (uint32_t) & (FURI_HAL_SPEAKER_TIMER->CCR1); + + LL_DMA_ConfigAddresses(DMA_INSTANCE, address, dma_dst, LL_DMA_DIRECTION_MEMORY_TO_PERIPH); + LL_DMA_SetDataLength(DMA_INSTANCE, size); + + LL_DMA_SetPeriphRequest(DMA_INSTANCE, LL_DMAMUX_REQ_TIM16_UP); + LL_DMA_SetDataTransferDirection(DMA_INSTANCE, LL_DMA_DIRECTION_MEMORY_TO_PERIPH); + LL_DMA_SetChannelPriorityLevel(DMA_INSTANCE, LL_DMA_PRIORITY_VERYHIGH); + LL_DMA_SetMode(DMA_INSTANCE, LL_DMA_MODE_CIRCULAR); + LL_DMA_SetPeriphIncMode(DMA_INSTANCE, LL_DMA_PERIPH_NOINCREMENT); + LL_DMA_SetMemoryIncMode(DMA_INSTANCE, LL_DMA_MEMORY_INCREMENT); + LL_DMA_SetPeriphSize(DMA_INSTANCE, LL_DMA_PDATAALIGN_HALFWORD); + LL_DMA_SetMemorySize(DMA_INSTANCE, LL_DMA_MDATAALIGN_HALFWORD); + + LL_DMA_EnableIT_TC(DMA_INSTANCE); + LL_DMA_EnableIT_HT(DMA_INSTANCE); +} + +void wav_player_dma_start() { + LL_DMA_EnableChannel(DMA_INSTANCE); + LL_TIM_EnableDMAReq_UPDATE(FURI_HAL_SPEAKER_TIMER); +} + +void wav_player_dma_stop() { + LL_DMA_DisableChannel(DMA_INSTANCE); +} \ No newline at end of file diff --git a/applications/wav_player/wav_player_hal.h b/applications/wav_player/wav_player_hal.h new file mode 100644 index 0000000000..124f51406f --- /dev/null +++ b/applications/wav_player/wav_player_hal.h @@ -0,0 +1,23 @@ +#pragma once +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void wav_player_speaker_init(); + +void wav_player_speaker_start(); + +void wav_player_speaker_stop(); + +void wav_player_dma_init(uint32_t address, size_t size); + +void wav_player_dma_start(); + +void wav_player_dma_stop(); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/applications/wav_player/wav_player_view.c b/applications/wav_player/wav_player_view.c new file mode 100644 index 0000000000..8068bf3511 --- /dev/null +++ b/applications/wav_player/wav_player_view.c @@ -0,0 +1,214 @@ +#include "wav_player_view.h" + +#define DATA_COUNT 116 + +struct WavPlayerView { + View* view; + WavPlayerCtrlCallback callback; + void* context; +}; + +typedef struct { + bool play; + float volume; + size_t start; + size_t end; + size_t current; + uint8_t data[DATA_COUNT]; +} WavPlayerViewModel; + +float map(float x, float in_min, float in_max, float out_min, float out_max) { + return (x - in_min) * (out_max - out_min + 1) / (in_max - in_min + 1) + out_min; +} + +static void wav_player_view_draw_callback(Canvas* canvas, void* _model) { + WavPlayerViewModel* model = _model; + + canvas_clear(canvas); + canvas_set_color(canvas, ColorBlack); + uint8_t x_pos = 0; + uint8_t y_pos = 0; + + // volume + x_pos = 124; + y_pos = 0; + const float volume = (64 / 10.0f) * model->volume; + canvas_draw_frame(canvas, x_pos, y_pos, 4, 64); + canvas_draw_box(canvas, x_pos, y_pos + (64 - volume), 4, volume); + + // play / pause + x_pos = 58; + y_pos = 55; + if(model->play) { + canvas_draw_line(canvas, x_pos, y_pos, x_pos + 8, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos + 8, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos, y_pos); + } else { + canvas_draw_box(canvas, x_pos, y_pos, 3, 9); + canvas_draw_box(canvas, x_pos + 4, y_pos, 3, 9); + } + + x_pos = 78; + y_pos = 55; + canvas_draw_line(canvas, x_pos, y_pos, x_pos + 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos + 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos, y_pos); + + x_pos = 82; + y_pos = 55; + canvas_draw_line(canvas, x_pos, y_pos, x_pos + 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos + 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos, y_pos); + + x_pos = 40; + y_pos = 55; + canvas_draw_line(canvas, x_pos, y_pos, x_pos - 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos - 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos, y_pos); + + x_pos = 44; + y_pos = 55; + canvas_draw_line(canvas, x_pos, y_pos, x_pos - 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos - 4, y_pos + 4); + canvas_draw_line(canvas, x_pos, y_pos + 8, x_pos, y_pos); + + // len + x_pos = 4; + y_pos = 47; + const uint8_t play_len = 116; + uint8_t play_pos = map(model->current, model->start, model->end, 0, play_len - 4); + + canvas_draw_frame(canvas, x_pos, y_pos, play_len, 4); + canvas_draw_box(canvas, x_pos + play_pos, y_pos - 2, 4, 8); + canvas_draw_box(canvas, x_pos, y_pos, play_pos, 4); + + // osc + x_pos = 4; + y_pos = 0; + for(size_t i = 1; i < DATA_COUNT; i++) { + canvas_draw_line(canvas, x_pos + i - 1, model->data[i - 1], x_pos + i, model->data[i]); + } +} + +static bool wav_player_view_input_callback(InputEvent* event, void* context) { + WavPlayerView* wav_player_view = context; + bool consumed = false; + + if(wav_player_view->callback) { + if(event->type == InputTypeShort || event->type == InputTypeRepeat) { + if(event->key == InputKeyUp) { + wav_player_view->callback(WavPlayerCtrlVolUp, wav_player_view->context); + consumed = true; + } else if(event->key == InputKeyDown) { + wav_player_view->callback(WavPlayerCtrlVolDn, wav_player_view->context); + consumed = true; + } else if(event->key == InputKeyLeft) { + wav_player_view->callback(WavPlayerCtrlMoveL, wav_player_view->context); + consumed = true; + } else if(event->key == InputKeyRight) { + wav_player_view->callback(WavPlayerCtrlMoveR, wav_player_view->context); + consumed = true; + } else if(event->key == InputKeyOk) { + wav_player_view->callback(WavPlayerCtrlOk, wav_player_view->context); + consumed = true; + } else if(event->key == InputKeyBack) { + wav_player_view->callback(WavPlayerCtrlBack, wav_player_view->context); + consumed = true; + } + } + } + + return consumed; +} + +WavPlayerView* wav_player_view_alloc() { + WavPlayerView* wav_view = malloc(sizeof(WavPlayerView)); + wav_view->view = view_alloc(); + view_set_context(wav_view->view, wav_view); + view_allocate_model(wav_view->view, ViewModelTypeLocking, sizeof(WavPlayerViewModel)); + view_set_draw_callback(wav_view->view, wav_player_view_draw_callback); + view_set_input_callback(wav_view->view, wav_player_view_input_callback); + + return wav_view; +} + +void wav_player_view_free(WavPlayerView* wav_view) { + furi_assert(wav_view); + view_free(wav_view->view); + free(wav_view); +} + +View* wav_player_view_get_view(WavPlayerView* wav_view) { + furi_assert(wav_view); + return wav_view->view; +} + +void wav_player_view_set_volume(WavPlayerView* wav_view, float volume) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + model->volume = volume; + return true; + }); +} + +void wav_player_view_set_start(WavPlayerView* wav_view, size_t start) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + model->start = start; + return true; + }); +} + +void wav_player_view_set_end(WavPlayerView* wav_view, size_t end) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + model->end = end; + return true; + }); +} + +void wav_player_view_set_current(WavPlayerView* wav_view, size_t current) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + model->current = current; + return true; + }); +} + +void wav_player_view_set_play(WavPlayerView* wav_view, bool play) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + model->play = play; + return true; + }); +} + +void wav_player_view_set_data(WavPlayerView* wav_view, uint16_t* data, size_t data_count) { + furi_assert(wav_view); + with_view_model( + wav_view->view, (WavPlayerViewModel * model) { + size_t inc = (data_count / DATA_COUNT) - 1; + + for(size_t i = 0; i < DATA_COUNT; i++) { + model->data[i] = *data / 6; + if(model->data[i] > 42) model->data[i] = 42; + data += inc; + } + return true; + }); +} + +void wav_player_view_set_ctrl_callback(WavPlayerView* wav_view, WavPlayerCtrlCallback callback) { + furi_assert(wav_view); + wav_view->callback = callback; +} + +void wav_player_view_set_context(WavPlayerView* wav_view, void* context) { + furi_assert(wav_view); + wav_view->context = context; +} \ No newline at end of file diff --git a/applications/wav_player/wav_player_view.h b/applications/wav_player/wav_player_view.h new file mode 100644 index 0000000000..246aeaf3e3 --- /dev/null +++ b/applications/wav_player/wav_player_view.h @@ -0,0 +1,45 @@ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct WavPlayerView WavPlayerView; + +typedef enum { + WavPlayerCtrlVolUp, + WavPlayerCtrlVolDn, + WavPlayerCtrlMoveL, + WavPlayerCtrlMoveR, + WavPlayerCtrlOk, + WavPlayerCtrlBack, +} WavPlayerCtrl; + +typedef void (*WavPlayerCtrlCallback)(WavPlayerCtrl ctrl, void* context); + +WavPlayerView* wav_player_view_alloc(); + +void wav_player_view_free(WavPlayerView* wav_view); + +View* wav_player_view_get_view(WavPlayerView* wav_view); + +void wav_player_view_set_volume(WavPlayerView* wav_view, float volume); + +void wav_player_view_set_start(WavPlayerView* wav_view, size_t start); + +void wav_player_view_set_end(WavPlayerView* wav_view, size_t end); + +void wav_player_view_set_current(WavPlayerView* wav_view, size_t current); + +void wav_player_view_set_play(WavPlayerView* wav_view, bool play); + +void wav_player_view_set_data(WavPlayerView* wav_view, uint16_t* data, size_t data_count); + +void wav_player_view_set_ctrl_callback(WavPlayerView* wav_view, WavPlayerCtrlCallback callback); + +void wav_player_view_set_context(WavPlayerView* wav_view, void* context); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/documentation/HowToBuild.md b/documentation/HowToBuild.md index a6b5b5b4e3..b87e6c6672 100644 --- a/documentation/HowToBuild.md +++ b/documentation/HowToBuild.md @@ -5,7 +5,7 @@ You should clone with ```shell -$ git clone --recursive https://github.com/Eng1n33r/flipperzero-firmware.git +$ git clone --recursive https://github.com/v1nc/flipperzero-firmware.git ``` ## Build with Docker diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..eac0730e8a94b8147db4418bb1331e20d9996708 GIT binary patch literal 276539 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

u!96}$ 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 literal 0 HcmV?d00001 diff --git a/scripts/version.py b/scripts/version.py index 8abb5bbd2d..5df6a5ebc9 100644 --- a/scripts/version.py +++ b/scripts/version.py @@ -34,7 +34,7 @@ def get_version_info(self): version = ( os.environ.get("DIST_SUFFIX", None) - or "unknown" + or "v1nc" ) return { diff --git a/site_scons/cc.scons b/site_scons/cc.scons index e71db2ba29..385ff2d6fa 100644 --- a/site_scons/cc.scons +++ b/site_scons/cc.scons @@ -21,7 +21,6 @@ ENV.AppendUnique( # "-MP", "-Wall", "-Wextra", - "-Werror", "-Wno-address-of-packed-member", "-Wredundant-decls", "-Wdouble-promotion",