Update UL apps

This commit is contained in:
Willy-JL
2023-03-08 23:39:52 +00:00
parent f53b962722
commit b7ab552519
83 changed files with 115 additions and 650 deletions
-1
View File
@@ -6,6 +6,5 @@ App(
"music_player",
"music_beeper",
"snake_game",
"bt_hid",
],
)
@@ -1,5 +1,5 @@
App(
appid="BlackJack",
appid="Blackjack",
name="BlackJack",
apptype=FlipperAppType.EXTERNAL,
entry_point="blackjack_app",
+1 -1
View File
@@ -13,7 +13,7 @@
#include "util.h"
#include "ui.h"
#include "BlackJack_icons.h"
#include "Blackjack_icons.h"
#define DEALER_MAX 17
@@ -1,7 +1,7 @@
App(
appid="DAP_Link",
name="DAP Link",
apptype=FlipperAppType.EXTERNAL,
appid="dap_link",
name="[GPIO] DAP Link",
apptype=FlipperAppType.PLUGIN,
entry_point="dap_link_app",
requires=[
"gui",
@@ -10,7 +10,7 @@ App(
stack_size=4 * 1024,
order=20,
fap_icon="dap_link.png",
fap_category="Tools",
fap_category="GPIO",
fap_private_libs=[
Lib(
name="free-dap",
+2 -2
View File
@@ -14,7 +14,7 @@
#include "gui/dap_gui.h"
#include "usb/dap_v2_usb.h"
#include <dialogs/dialogs.h>
#include "DAP_Link_icons.h"
#include "dap_link_icons.h"
/***************************************************************************/
/****************************** DAP COMMON *********************************/
@@ -524,4 +524,4 @@ int32_t dap_link_app(void* p) {
dap_app_free(app);
return 0;
}
}
@@ -1,5 +1,5 @@
#include "dap_main_view.h"
#include "DAP_Link_icons.h"
#include "dap_link_icons.h"
#include <gui/elements.h>
// extern const Icon I_ArrowDownEmpty_12x18;
+3 -1
View File
@@ -1,4 +1,6 @@
![Image](assets/dialer.jpg)
![Image](pics/dialer.jpg)
[Original Link](https://github.com/litui/dtmf_dolphin)
## DTMF Dolphin
@@ -1,5 +1,5 @@
App(
appid="DTMF_Dolphin",
appid="dtmf_dolphin",
name="DTMF Dolphin",
apptype=FlipperAppType.EXTERNAL,
entry_point="dtmf_dolphin_app",

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,7 +1,6 @@
#include "flipfrid_scene_load_custom_uids.h"
#include "flipfrid_scene_run_attack.h"
#include "flipfrid_scene_entrypoint.h"
#include "RFID_Fuzzer_icons.h"
#define LFRFID_UIDS_EXTENSION ".txt"
#define RFIDFUZZER_APP_PATH_FOLDER "/ext/rfidfuzzer"
@@ -1,6 +1,5 @@
#include "flipfrid_scene_load_file.h"
#include "flipfrid_scene_entrypoint.h"
#include "RFID_Fuzzer_icons.h"
#define LFRFID_APP_EXTENSION ".rfid"
#define LFRFID_APP_PATH_FOLDER "/ext/lfrfid"
@@ -1,5 +1,6 @@
# flipperzero-i2ctools
[Original link](https://github.com/NaejEL/flipperzero-i2ctools)
Set of i2c tools for Flipper Zero
![Preview](i2ctools.gif)
@@ -1,5 +1,5 @@
App(
appid="I2C_Tools",
appid="i2cTools",
name="[GPIO] i2c Tools",
apptype=FlipperAppType.EXTERNAL,
entry_point="i2ctools_app",
@@ -10,4 +10,4 @@ App(
fap_icon="i2ctools.png",
fap_category="GPIO",
fap_icon_assets="images",
)
)
@@ -1,7 +1,7 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <I2C_Tools_icons.h>
#include <i2cTools_icons.h>
#define APP_NAME "I2C Tools"
#define SCAN_MENU_TEXT "Scan"
@@ -1,7 +1,7 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <I2C_Tools_icons.h>
#include <i2cTools_icons.h>
#include "../i2cscanner.h"
#define SCAN_TEXT "SCAN"
@@ -1,7 +1,7 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <I2C_Tools_icons.h>
#include <i2cTools_icons.h>
#include "../i2csender.h"
#define SEND_TEXT "SEND"
@@ -1,7 +1,7 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <I2C_Tools_icons.h>
#include <i2cTools_icons.h>
#include "../i2csniffer.h"
#define SNIFF_TEXT "SNIFF"
+1 -1
View File
@@ -1,5 +1,5 @@
App(
appid="Game15",
appid="game15",
name="Game 15",
apptype=FlipperAppType.EXTERNAL,
entry_point="game15_app",
@@ -1,6 +1,6 @@
# PLUGIN BY eugene-kirzhanov
App(
appid="2048_improved",
appid="game_2048",
name="2048",
apptype=FlipperAppType.EXTERNAL,
entry_point="game_2048_app",
+1 -5
View File
@@ -1,12 +1,9 @@
# GPS for Flipper Zero
A simple Flipper Zero application for NMEA 0183 serial GPS modules, such as the
[Original link](https://github.com/ezod/flipperzero-gps)
[Adafruit Ultimate GPS Breakout].
[Original link](https://github.com/ezod/flipperzero-gps)
![ui](ui.png)
Heavy lifting (NMEA parsing) provided by [minmea], which is included in this
@@ -35,4 +32,3 @@ baud rate, may be useful for other GPS modules.
[Adafruit Ultimate GPS Breakout]: https://www.adafruit.com/product/746
[minmea]: https://github.com/kosma/minmea
[flipperzero-firmware]: https://github.com/flipperdevices/flipperzero-firmware
[qFlipper]: https://flipperzero.one/update
@@ -1,5 +1,5 @@
App(
appid="NMEA_GPS",
appid="gps_nmea",
name="[NMEA] GPS",
apptype=FlipperAppType.EXTERNAL,
entry_point="gps_app",
+2 -2
View File
@@ -1,5 +1,5 @@
App(
appid="HC_SR04_Dist_Sensor",
appid="hc_sr04",
name="[HC-SR] Dist. Sensor",
apptype=FlipperAppType.EXTERNAL,
entry_point="hc_sr04_app",
@@ -11,4 +11,4 @@ App(
order=20,
fap_icon="dist_sensor10px.png",
fap_category="GPIO",
)
)
@@ -1,5 +1,5 @@
App(
appid="Heap_Defence",
appid="heap_defence",
name="Heap Defence",
apptype=FlipperAppType.EXTERNAL,
entry_point="heap_defence_app",
@@ -7,7 +7,7 @@
#include <string.h>
#include "hede_assets.h"
#include "Heap_Defence_icons.h"
#include "heap_defence_icons.h"
#include <furi.h>
#include <gui/gui.h>
+2 -2
View File
@@ -1,5 +1,5 @@
App(
appid="USB_Remote",
appid="hid_usb",
name="USB Remote",
apptype=FlipperAppType.PLUGIN,
entry_point="hid_usb_app",
@@ -12,7 +12,7 @@ App(
App(
appid="Bluetooth_Remote",
appid="hid_ble",
name="Bluetooth Remote",
apptype=FlipperAppType.PLUGIN,
entry_point="hid_ble_app",
@@ -1,9 +0,0 @@
# iButton Fuzzer
Plugin for Flipper Zero
Made for [Unleashed](https://github.com/DarkFlippers/unleashed-firmware) firmware, but will work on original firmware too
Supported protocols:
- DS1990
- Metakom
- Cyfral
@@ -1,5 +1,5 @@
App(
appid="IBtn_Fuzzer",
appid="iBtn_Fuzzer",
name="iButton Fuzzer",
apptype=FlipperAppType.EXTERNAL,
entry_point="ibtnfuzzer_start",
@@ -15,7 +15,7 @@
#include <toolbox/stream/file_stream.h>
#include <toolbox/stream/buffered_file_stream.h>
#include <IBtn_Fuzzer_icons.h>
#include <iBtn_Fuzzer_icons.h>
#include <lib/one_wire/ibutton/ibutton_worker.h>
#include <lib/one_wire/ibutton/ibutton_key.h>
@@ -1,5 +1,5 @@
App(
appid="BH1750_Lightmeter",
appid="lightmeter",
name="[BH1750] Lightmeter",
apptype=FlipperAppType.EXTERNAL,
entry_point="lightmeter_app",
@@ -1,7 +1,7 @@
#pragma once
#include <gui/view.h>
#include "BH1750_Lightmeter_icons.h"
#include "lightmeter_icons.h"
#include "../../lightmeter_config.h"
typedef struct MainView MainView;
@@ -1,5 +1,7 @@
# Minesweeper
[Original Link](https://github.com/panki27/minesweeper)
This is a Minesweeper implementation for the Flipper Zero device.
![screenshot](img/screenshot.png)
@@ -218,6 +218,10 @@ static bool game_lost(Minesweeper* minesweeper_state) {
dialog_message_set_icon(message, NULL, 0, 10);
// Set cursor to initial position
minesweeper_state->cursor_x = 0;
minesweeper_state->cursor_y = 0;
NotificationApp* notifications = furi_record_open(RECORD_NOTIFICATION);
notification_message(notifications, &sequence_set_vibro_on);
furi_record_close(RECORD_NOTIFICATION);
@@ -474,7 +478,7 @@ int32_t minesweeper_app(void* p) {
// Exit the plugin
processing = false;
break;
case InputKeyMAX:
default:
break;
}
} else if(event.input.type == InputTypeLong) {
@@ -493,7 +497,7 @@ int32_t minesweeper_app(void* p) {
case InputKeyBack:
processing = false;
break;
case InputKeyMAX:
default:
break;
}
}
@@ -1,5 +1,5 @@
App(
appid="Morse_Code",
appid="morse_code",
name="Morse Code",
apptype=FlipperAppType.EXTERNAL,
entry_point="morse_code_app",

Before

Width:  |  Height:  |  Size: 576 B

After

Width:  |  Height:  |  Size: 576 B

@@ -10,8 +10,7 @@
#include <furi_hal_resources.h>
#include <nrf24.h>
#include "mousejacker_ducky.h"
#include <dolphin/dolphin.h>
#include "NRF24_Mouse_Jacker_icons.h"
#include <NRF24_Mouse_Jacker_icons.h>
#define TAG "mousejacker"
#define LOGITECH_MAX_CHANNEL 85
@@ -112,7 +111,7 @@ static bool open_ducky_script(Stream* stream, PluginState* plugin_state) {
DialogsFileBrowserOptions browser_options;
dialog_file_browser_set_basic_options(
&browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badkb_10px);
&browser_options, MOUSEJACKER_APP_PATH_EXTENSION, &I_badusb_10px);
browser_options.hide_ext = false;
bool ret = dialog_file_browser_show(dialogs, path, path, &browser_options);
@@ -184,7 +183,6 @@ static bool process_ducky_file(
mj_process_ducky_script(
nrf24_HANDLE, addr, addr_size, rate, (char*)file_buf, plugin_state);
FURI_LOG_D(TAG, "finished execution");
// DOLPHIN_DEED(getRandomDeed());
loaded = true;
} else {
FURI_LOG_D(TAG, "load failed. file size: %d", file_size);
@@ -1,7 +1,7 @@
App(
appid="Music_Player",
name="Music Player",
apptype=FlipperAppType.EXTERNAL,
apptype=FlipperAppType.PLUGIN,
entry_point="music_player_app",
cdefines=["APP_MUSIC_PLAYER"],
requires=[
@@ -258,7 +258,7 @@ MusicPlayer* music_player_alloc() {
MusicPlayer* instance = malloc(sizeof(MusicPlayer));
instance->model = malloc(sizeof(MusicPlayerModel));
instance->model->volume = 4;
instance->model->volume = 3;
instance->model_mutex = furi_mutex_alloc(FuriMutexTypeNormal);
@@ -1,5 +1,5 @@
App(
appid="NFC_Magic",
appid="nfc_magic",
name="NFC Magic",
apptype=FlipperAppType.EXTERNAL,
targets=["f7"],
+3 -3
View File
@@ -136,9 +136,9 @@ void nfc_magic_free(NfcMagic* nfc_magic) {
free(nfc_magic);
}
static const NotificationSequence nfc_magic_sequence_blink_start_blue = {
static const NotificationSequence nfc_magic_sequence_blink_start_cyan = {
&message_blink_start_10,
&message_blink_set_color_blue,
&message_blink_set_color_cyan,
&message_do_not_reset,
NULL,
};
@@ -149,7 +149,7 @@ static const NotificationSequence nfc_magic_sequence_blink_stop = {
};
void nfc_magic_blink_start(NfcMagic* nfc_magic) {
notification_message(nfc_magic->notifications, &nfc_magic_sequence_blink_start_blue);
notification_message(nfc_magic->notifications, &nfc_magic_sequence_blink_start_cyan);
}
void nfc_magic_blink_stop(NfcMagic* nfc_magic) {
+1 -1
View File
@@ -25,7 +25,7 @@
#include <lib/toolbox/path.h>
#include <lib/nfc/nfc_device.h>
#include "NFC_Magic_icons.h"
#include "nfc_magic_icons.h"
#define NFC_APP_FOLDER ANY_PATH("nfc")
@@ -40,16 +40,24 @@ bool nfc_magic_scene_start_on_event(void* context, SceneManagerEvent event) {
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubmenuIndexCheck) {
scene_manager_set_scene_state(
nfc_magic->scene_manager, NfcMagicSceneStart, SubmenuIndexCheck);
scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneCheck);
consumed = true;
} else if(event.event == SubmenuIndexWriteGen1A) {
// Explicitly save state in each branch so that the
// correct option is reselected if the user cancels
// loading a file.
scene_manager_set_scene_state(
nfc_magic->scene_manager, NfcMagicSceneStart, SubmenuIndexWriteGen1A);
scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneFileSelect);
consumed = true;
} else if(event.event == SubmenuIndexWipe) {
scene_manager_set_scene_state(
nfc_magic->scene_manager, NfcMagicSceneStart, SubmenuIndexWipe);
scene_manager_next_scene(nfc_magic->scene_manager, NfcMagicSceneWipe);
consumed = true;
}
scene_manager_set_scene_state(nfc_magic->scene_manager, NfcMagicSceneStart, event.event);
}
return consumed;
-31
View File
@@ -1,31 +0,0 @@
# flipperzero-nrf24
An [NRF24](https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf) driver for the [Flipper Zero](https://flipperzero.one/) device. The NRF24 is a popular line of 2.4GHz radio transceivers from Nordic Semiconductors. This library is not currently complete, but functional.
## Warning
This repo contains two Flipper Zero apps that utilize the NRF24 driver to sniff for NRF24 addresses and perform mousejack attacks. These apps are for **educational purposes** only. Please use this code responsibly and only use these apps on your own equipment.
## Acknowledgments
The NRF24 sniffing technique was discovered and shared by Travis Goodspeed in [his blog](http://travisgoodspeed.blogspot.com/2011/02/promiscuity-is-nrf24l01s-duty.html).
The mousejack vulnerabilities were discovered and reported by Marc Newlin, see [the blog](https://www.bastille.net/research/vulnerabilities/mousejack/technical-details) for technical details.
Much of the driver code was inspired by [RadioHead's Arduino library](https://www.airspayce.com/mikem/arduino/RadioHead/classRH__NRF24.html).
Much of the mousejack code was inspired by the [Jackit project](https://github.com/insecurityofthings/jackit).
#
## PinOut from from NoComp/Frog
<img src="https://media.discordapp.net/attachments/937479784726949900/994495234618687509/unknown.png?width=567&height=634">
# Mousejack / NRF24 pinout by UberGuidoZ
2/A7 on FZ goes to MOSI/6 on nrf24l01<br>
3/A6 on FZ goes to MISO/7 on nrf24l01<br>
4/A4 on FZ goes to CSN/4 on nrf24l01<br>
5/B3 on FZ goes to SCK/5 on nrf24l01<br>
6/B2 on FZ goes to CE/3 on nrf24l01<br>
8/GND on FZ goes to GND/1 on nrf24l01<br>
9/3V3 on FZ goes to VCC/2 on nrf24l01<br>
IRQ/8 is left disconnected on nrf24l01
![NRF_Pins](https://user-images.githubusercontent.com/57457139/178093717-39effd5c-ebe2-4253-b13c-70517d7902f9.png)
If the nRF module is acting a bit flakey, try adding a capacitor to the vcc/gnd lines! I've not tried the Plus model so it may have a bigger need for a cap. Otherwise, I haven't had any major issues. Anything from a 3.3 uF to 10 uF should do. (Watch your positive/negative placement! Negative to ground.) I learned if you wanna get fancy, include a 0.1 uF cap in parallel. The 3.3 uF to 10 uF will respond to slow freq changes while the 0.1 uF will respond to the high freq switching spikes that the larger one cannot. That said, a single 10 uF will likely suffice for the Mousejack attack. ¯\\\_(ツ)_/¯
![NRF_Capacitor](https://user-images.githubusercontent.com/57457139/178169959-d030f9a6-d2ac-46af-af8b-470ff092c8a7.jpg)
+1 -5
View File
@@ -4,7 +4,7 @@
#include <input/input.h>
#include <notification/notification_messages.h>
#include <stdlib.h>
#include <dolphin/dolphin.h>
#include <nrf24.h>
#include <toolbox/stream/file_stream.h>
@@ -290,7 +290,6 @@ static void wrap_up(Storage* storage, NotificationApp* notification) {
hexlify(addr, 5, top_address);
found_count++;
save_addr_to_file(storage, addr, 5, notification);
// DOLPHIN_DEED(getRandomDeed());
if(confirmed_idx < MAX_CONFIRMED) memcpy(confirmed[confirmed_idx++], addr, 5);
break;
}
@@ -404,9 +403,6 @@ int32_t nrfsniff_app(void* p) {
}
}
}
} else {
// FURI_LOG_D(TAG, "osMessageQueue: event timeout");
// event timeout
}
if(sniffing_state) {
@@ -1,5 +1,5 @@
App(
appid="subghz_playlist",
appid="SubGHz_Playlist",
name="Sub-GHz Playlist",
apptype=FlipperAppType.EXTERNAL,
entry_point="playlist_app",

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 299 B

After

Width:  |  Height:  |  Size: 299 B

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,5 +1,5 @@
App(
appid="POCSAG_Pager",
appid="pocsag_pager",
name="POCSAG Pager",
apptype=FlipperAppType.PLUGIN,
entry_point="pocsag_pager_app",
@@ -1,6 +1,6 @@
#include "pocsag_pager_receiver.h"
#include "../pocsag_pager_app_i.h"
#include <POCSAG_Pager_icons.h>
#include <pocsag_pager_icons.h>
#include <math.h>
#include <input/input.h>
@@ -1,6 +1,6 @@
#include "pocsag_pager_receiver.h"
#include "../pocsag_pager_app_i.h"
#include "POCSAG_Pager_icons.h"
#include "pocsag_pager_icons.h"
#include "../protocols/pcsg_generic.h"
#include <input/input.h>
#include <gui/elements.h>
@@ -1,26 +0,0 @@
# flipperzero-sentry-safe-plugin
Flipper zero exploiting vulnerability to open any Sentry Safe and Master Lock electronic safe without any pin code.
[Vulnerability described here](https://github.com/H4ckd4ddy/bypass-sentry-safe)
### Installation
- Download [last release fap file](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin/releases/latest)
- Copy fap file to the apps folder of your flipper SD card
### Usage
- Start "Sentry Safe" plugin
- Place wires as described on the plugin screen
- Press enter
- Open safe
### Build
- Recursively clone your base firmware (official or not)
- Clone this repository in `applications_user`
- Build with `./fbt fap_dist APPSRC=applications_user/flipperzero-sentry-safe-plugin`
- Retreive builed fap in dist subfolders
(More info about build tool [here](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/fbt.md))
@@ -1,7 +1,7 @@
App(
appid="Signal_Generator",
name="[GPIO] Signal Generator",
apptype=FlipperAppType.EXTERNAL,
apptype=FlipperAppType.PLUGIN,
entry_point="signal_gen_app",
cdefines=["APP_SIGNAL_GEN"],
requires=["gui"],
@@ -1,15 +1,11 @@
App(
appid="Snake",
name="Snake Game",
apptype=FlipperAppType.EXTERNAL,
apptype=FlipperAppType.PLUGIN,
entry_point="snake_game_app",
cdefines=["APP_SNAKE_GAME"],
requires=[
"gui",
"notification",
"storage",
],
stack_size=2 * 1024,
requires=["gui"],
stack_size=1 * 1024,
order=210,
fap_icon="snake_10px.png",
fap_category="Games",
@@ -1,181 +0,0 @@
#include "snake_file_handler.h"
#include <furi.h>
#include <flipper_format/flipper_format.h>
static void snake_game_close_file(FlipperFormat* file) {
if(file == NULL) {
furi_record_close(RECORD_STORAGE);
return;
}
flipper_format_file_close(file);
flipper_format_free(file);
furi_record_close(RECORD_STORAGE);
}
static FlipperFormat* snake_game_open_file() {
Storage* storage = furi_record_open(RECORD_STORAGE);
FlipperFormat* file = flipper_format_file_alloc(storage);
if(storage_common_stat(storage, SNAKE_GAME_FILE_PATH, NULL) == FSE_OK) {
if(!flipper_format_file_open_existing(file, SNAKE_GAME_FILE_PATH)) {
snake_game_close_file(file);
return NULL;
}
} else {
if(storage_common_stat(storage, APPS_DATA, NULL) == FSE_NOT_EXIST) {
if(!storage_simply_mkdir(storage, APPS_DATA)) {
return NULL;
}
}
if(storage_common_stat(storage, SNAKE_GAME_FILE_DIR_PATH, NULL) == FSE_NOT_EXIST) {
if(!storage_simply_mkdir(storage, SNAKE_GAME_FILE_DIR_PATH)) {
return NULL;
}
}
if(!flipper_format_file_open_new(file, SNAKE_GAME_FILE_PATH)) {
snake_game_close_file(file);
return NULL;
}
flipper_format_write_header_cstr(
file, SNAKE_GAME_FILE_HEADER, SNAKE_GAME_FILE_ACTUAL_VERSION);
flipper_format_rewind(file);
}
return file;
}
void snake_game_save_score_to_file(int16_t highscore) {
FlipperFormat* file = snake_game_open_file();
if(file != NULL) {
uint32_t temp = highscore;
if(!flipper_format_insert_or_update_uint32(file, SNAKE_GAME_CONFIG_HIGHSCORE, &temp, 1)) {
snake_game_close_file(file);
return;
}
snake_game_close_file(file);
}
}
void snake_game_save_game_to_file(SnakeState* const snake_state) {
FlipperFormat* file = snake_game_open_file();
if(file != NULL) {
uint32_t temp = snake_state->len;
if(!flipper_format_insert_or_update_uint32(file, SNAKE_GAME_CONFIG_KEY_LEN, &temp, 1)) {
snake_game_close_file(file);
return;
}
uint16_t array_size = snake_state->len * 2;
uint32_t temp_array[array_size];
for(int16_t i = 0, a = 0; a < array_size && i < snake_state->len; i++) {
temp_array[a++] = snake_state->points[i].x;
temp_array[a++] = snake_state->points[i].y;
}
if(!flipper_format_insert_or_update_uint32(
file, SNAKE_GAME_CONFIG_KEY_POINTS, temp_array, array_size)) {
snake_game_close_file(file);
return;
}
temp = snake_state->currentMovement;
if(!flipper_format_insert_or_update_uint32(
file, SNAKE_GAME_CONFIG_KEY_CURRENT_MOVEMENT, &temp, 1)) {
snake_game_close_file(file);
return;
}
temp = snake_state->nextMovement;
if(!flipper_format_insert_or_update_uint32(
file, SNAKE_GAME_CONFIG_KEY_NEXT_MOVEMENT, &temp, 1)) {
snake_game_close_file(file);
return;
}
array_size = 2;
uint32_t temp_point_array[array_size];
temp_point_array[0] = snake_state->fruit.x;
temp_point_array[1] = snake_state->fruit.y;
if(!flipper_format_insert_or_update_uint32(
file, SNAKE_GAME_CONFIG_KEY_FRUIT_POINTS, temp_point_array, array_size)) {
snake_game_close_file(file);
return;
}
snake_game_close_file(file);
}
}
bool snake_game_init_game_from_file(SnakeState* const snake_state) {
FlipperFormat* file = snake_game_open_file();
if(file != NULL) {
FuriString* file_type = furi_string_alloc();
uint32_t version = 1;
if(!flipper_format_read_header(file, file_type, &version)) {
furi_string_free(file_type);
snake_game_close_file(file);
return false;
}
furi_string_free(file_type);
uint32_t temp;
snake_state->highscore =
(flipper_format_read_uint32(file, SNAKE_GAME_CONFIG_HIGHSCORE, &temp, 1)) ? temp : 0;
flipper_format_rewind(file);
if(!flipper_format_read_uint32(file, SNAKE_GAME_CONFIG_KEY_LEN, &temp, 1)) {
snake_game_close_file(file);
return false;
}
snake_state->len = temp;
flipper_format_delete_key(file, SNAKE_GAME_CONFIG_KEY_LEN);
uint16_t array_size = snake_state->len * 2;
uint32_t temp_array[array_size];
if(!flipper_format_read_uint32(
file, SNAKE_GAME_CONFIG_KEY_POINTS, temp_array, array_size)) {
snake_game_close_file(file);
return false;
}
for(int16_t i = 0, a = 0; a < array_size && i < snake_state->len; i++) {
snake_state->points[i].x = temp_array[a++];
snake_state->points[i].y = temp_array[a++];
}
flipper_format_delete_key(file, SNAKE_GAME_CONFIG_KEY_POINTS);
if(!flipper_format_read_uint32(file, SNAKE_GAME_CONFIG_KEY_CURRENT_MOVEMENT, &temp, 1)) {
snake_game_close_file(file);
return false;
}
snake_state->currentMovement = temp;
flipper_format_delete_key(file, SNAKE_GAME_CONFIG_KEY_CURRENT_MOVEMENT);
if(!flipper_format_read_uint32(file, SNAKE_GAME_CONFIG_KEY_NEXT_MOVEMENT, &temp, 1)) {
snake_game_close_file(file);
return false;
}
snake_state->nextMovement = temp;
flipper_format_delete_key(file, SNAKE_GAME_CONFIG_KEY_NEXT_MOVEMENT);
array_size = 2;
uint32_t temp_point_array[array_size];
if(!flipper_format_read_uint32(
file, SNAKE_GAME_CONFIG_KEY_FRUIT_POINTS, temp_point_array, array_size)) {
snake_game_close_file(file);
return false;
}
snake_state->fruit.x = temp_point_array[0];
snake_state->fruit.y = temp_point_array[1];
flipper_format_delete_key(file, SNAKE_GAME_CONFIG_KEY_FRUIT_POINTS);
snake_game_close_file(file);
return true;
}
return false;
}
@@ -1,25 +0,0 @@
#pragma once
#include "snake_types.h"
#include <furi.h>
#include <flipper_format/flipper_format.h>
#define APPS_DATA EXT_PATH("apps_data")
#define SNAKE_GAME_FILE_DIR_PATH APPS_DATA "/snake_game"
#define SNAKE_GAME_FILE_PATH SNAKE_GAME_FILE_DIR_PATH "/.snake"
#define SNAKE_GAME_FILE_HEADER "Flipper Snake plugin run file"
#define SNAKE_GAME_FILE_ACTUAL_VERSION 1
#define SNAKE_GAME_CONFIG_KEY_POINTS "SnakePoints"
#define SNAKE_GAME_CONFIG_KEY_LEN "SnakeLen"
#define SNAKE_GAME_CONFIG_KEY_CURRENT_MOVEMENT "CurrentMovement"
#define SNAKE_GAME_CONFIG_KEY_NEXT_MOVEMENT "NextMovement"
#define SNAKE_GAME_CONFIG_KEY_FRUIT_POINTS "FruitPoints"
#define SNAKE_GAME_CONFIG_HIGHSCORE "Highscore"
void snake_game_save_score_to_file(int16_t highscore);
void snake_game_save_game_to_file(SnakeState* const snake_state);
bool snake_game_init_game_from_file(SnakeState* const snake_state);
@@ -1,51 +0,0 @@
#pragma once
#include <furi.h>
typedef struct {
// +-----x
// |
// |
// y
uint8_t x;
uint8_t y;
} Point;
typedef enum {
GameStateLife,
// https://melmagazine.com/en-us/story/snake-nokia-6110-oral-history-taneli-armanto
// Armanto: While testing the early versions of the game, I noticed it was hard
// to control the snake upon getting close to and edge but not crashing — especially
// in the highest speed levels. I wanted the highest level to be as fast as I could
// possibly make the device "run," but on the other hand, I wanted to be friendly
// and help the player manage that level. Otherwise it might not be fun to play. So
// I implemented a little delay. A few milliseconds of extra time right before
// the player crashes, during which she can still change the directions. And if
// she does, the game continues.
GameStateLastChance,
GameStateGameOver,
} GameState;
// Note: do not change without purpose. Current values are used in smart
// orthogonality calculation in `snake_game_get_turn_snake`.
typedef enum {
DirectionUp,
DirectionRight,
DirectionDown,
DirectionLeft,
} Direction;
#define MAX_SNAKE_LEN 253
typedef struct {
Point points[MAX_SNAKE_LEN];
uint16_t len;
bool isNewHighscore;
int16_t highscore;
Direction currentMovement;
Direction nextMovement; // if backward of currentMovement, ignore
Point fruit;
GameState state;
} SnakeState;
+3 -28
View File
@@ -40,7 +40,7 @@ typedef enum {
DirectionLeft,
} Direction;
#define MAX_SNAKE_LEN 253
#define MAX_SNAKE_LEN 128 * 64 / 4
typedef struct {
Point points[MAX_SNAKE_LEN];
@@ -266,10 +266,7 @@ static void
return;
}
bool can_turn = (snake_state->points[0].x % 2 == 0) && (snake_state->points[0].y % 2 == 0);
if(can_turn) {
snake_state->currentMovement = snake_game_get_turn_snake(snake_state);
}
snake_state->currentMovement = snake_game_get_turn_snake(snake_state);
Point next_step = snake_game_get_next_step(snake_state);
@@ -326,6 +323,7 @@ int32_t snake_game_app(void* p) {
if(!snake_state->mutex) {
FURI_LOG_E("SnakeGame", "cannot create mutex\r\n");
furi_message_queue_free(event_queue);
free(snake_state);
return 255;
}
@@ -406,26 +404,3 @@ int32_t snake_game_app(void* p) {
return 0;
}
// Screen is 128x64 px
// (4 + 4) * 16 - 4 + 2 + 2border == 128
// (4 + 4) * 8 - 4 + 2 + 2border == 64
// Game field from point{x: 0, y: 0} to point{x: 30, y: 14}.
// The snake turns only in even cells - intersections.
// ┌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┐
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// ╎ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ╎
// └╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┘
@@ -74,8 +74,8 @@ bool spi_mem_tools_read_chip_info(SPIMemChip* chip) {
bool spi_mem_tools_check_chip_info(SPIMemChip* chip) {
SPIMemChip new_chip_info;
spi_mem_tools_read_chip_info(&new_chip_info);
do {
if(!spi_mem_tools_read_chip_info(&new_chip_info)) break;
if(chip->vendor_id != new_chip_info.vendor_id) break;
if(chip->type_id != new_chip_info.type_id) break;
if(chip->capacity_id != new_chip_info.capacity_id) break;
@@ -4,9 +4,8 @@
#define SPI_MEM_VERSION_APP "0.1.0"
#define SPI_MEM_DEVELOPER "DrunkBatya"
#define SPI_MEM_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"
#define SPI_MEM_NAME "\e#\e! SPI Mem Manager \e!\n" // NOSONAR
#define SPI_MEM_BLANK_INV \
"\e#\e! \e!\n" // NOSONAR
#define SPI_MEM_NAME "\e#\e! SPI Mem Manager \e!\n"
#define SPI_MEM_BLANK_INV "\e#\e! \e!\n"
void spi_mem_scene_about_on_enter(void* context) {
SPIMemApp* app = context;
@@ -16,11 +15,11 @@ void spi_mem_scene_about_on_enter(void* context) {
app->widget, 0, 0, 128, 14, AlignCenter, AlignBottom, SPI_MEM_BLANK_INV, false);
widget_add_text_box_element(
app->widget, 0, 2, 128, 14, AlignCenter, AlignBottom, SPI_MEM_NAME, false);
furi_string_printf(tmp_string, "\e#%s\n", "Information"); // NOSONAR
furi_string_printf(tmp_string, "\e#%s\n", "Information");
furi_string_cat_printf(tmp_string, "Version: %s\n", SPI_MEM_VERSION_APP);
furi_string_cat_printf(tmp_string, "Developed by: %s\n", SPI_MEM_DEVELOPER);
furi_string_cat_printf(tmp_string, "Github: %s\n\n", SPI_MEM_GITHUB);
furi_string_cat_printf(tmp_string, "\e#%s\n", "Description"); // NOSONAR
furi_string_cat_printf(tmp_string, "\e#%s\n", "Description");
furi_string_cat_printf(
tmp_string,
"SPI memory dumper\n"
@@ -16,7 +16,7 @@ void spi_mem_scene_delete_confirm_on_enter(void* context) {
FuriString* file_name = furi_string_alloc();
FuriString* message = furi_string_alloc();
path_extract_filename(app->file_path, file_name, true);
furi_string_printf(message, "\e#Delete %s?\e#", furi_string_get_cstr(file_name)); // NOSONAR
furi_string_printf(message, "\e#Delete %s?\e#", furi_string_get_cstr(file_name));
widget_add_text_box_element(
app->widget, 0, 0, 128, 27, AlignCenter, AlignCenter, furi_string_get_cstr(message), true);
widget_add_button_element(
View File
-191
View File
@@ -1,191 +0,0 @@
---
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignArrayOfStructures: None
AlignConsecutiveMacros: None
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Left
AlignOperands: Align
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortEnumsOnASingleLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: false
ColumnLimit: 99
CommentPragmas: '^ IWYU pragma:'
QualifierAlignment: Leave
CompactNamespaces: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
PackConstructorInitializers: BinPack
BasedOnStyle: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
FixNamespaceComments: false
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseLabels: false
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentExternBlock: AfterExternBlock
IndentRequires: false
IndentWidth: 4
IndentWrappedFunctionNames: true
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
LambdaBodyIndentation: Signature
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 10
PenaltyBreakBeforeFirstCallParameter: 30
PenaltyBreakComment: 10
PenaltyBreakFirstLessLess: 0
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 10
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 100
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
PointerAlignment: Left
PPIndentWidth: -1
ReferenceAlignment: Pointer
ReflowComments: false
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SortIncludes: Never
SortJavaStaticImport: Before
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: Never
SpaceBeforeParensOptions:
AfterControlStatements: false
AfterForeachMacros: false
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: false
AfterOverloadedOperator: false
BeforeNonEmptyParentheses: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
Standard: c++03
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
...
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2022 Etienne Sellan
Copyright (c) 2022 Alexander Kopachov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+1 -1
View File
@@ -1,5 +1,5 @@
App(
appid="Authenticator",
appid="totp",
name="Authenticator",
apptype=FlipperAppType.EXTERNAL,
entry_point="totp_app",
@@ -132,7 +132,7 @@ static TotpConfigFileOpenResult totp_open_config_file(Storage* storage, FlipperF
flipper_format_write_comment_cstr(fff_data_file, " ");
flipper_format_write_comment_cstr(
fff_data_file,
"How to notify user when new token is generated or badkb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)");
"How to notify user when new token is generated or badusb mode is activated (possible values: 0 - do not notify, 1 - sound, 2 - vibro, 3 sound and vibro)");
flipper_format_write_uint32(
fff_data_file, TOTP_CONFIG_KEY_NOTIFICATION_METHOD, &tmp_uint32, 1);
@@ -1,6 +1,6 @@
#include "totp_app_settings.h"
#include <math.h>
#include <Authenticator_icons.h>
#include <totp_icons.h>
#include "../../ui_controls.h"
#include "../../common_dialogs.h"
#include "../../scene_director.h"
@@ -247,4 +247,4 @@ void totp_scene_app_settings_deactivate(PluginState* plugin_state) {
void totp_scene_app_settings_free(const PluginState* plugin_state) {
UNUSED(plugin_state);
}
}
@@ -1,6 +1,6 @@
#include "totp_scene_authenticate.h"
#include <dialogs/dialogs.h>
#include <Authenticator_icons.h>
#include <totp_icons.h>
#include "../../../types/common.h"
#include "../../constants.h"
#include "../../../services/config/config.h"
@@ -1,7 +1,7 @@
#include <gui/gui.h>
#include <notification/notification.h>
#include <notification/notification_messages.h>
#include <Authenticator_icons.h>
#include <totp_icons.h>
#include "totp_scene_generate_token.h"
#include "../../../types/token_info.h"
#include "../../../types/common.h"
@@ -24,7 +24,7 @@ typedef struct {
uint32_t last_token_gen_time;
TotpTypeCodeWorkerContext* type_code_worker_context;
NotificationMessage const** notification_sequence_new_token;
NotificationMessage const** notification_sequence_badkb;
NotificationMessage const** notification_sequence_badusb;
} SceneState;
static const NotificationSequence*
@@ -69,8 +69,8 @@ static const NotificationSequence*
}
static const NotificationSequence*
get_notification_sequence_badkb(const PluginState* plugin_state, SceneState* scene_state) {
if(scene_state->notification_sequence_badkb == NULL) {
get_notification_sequence_badusb(const PluginState* plugin_state, SceneState* scene_state) {
if(scene_state->notification_sequence_badusb == NULL) {
uint8_t i = 0;
uint8_t length = 3;
if(plugin_state->notification_method & NotificationMethodVibro) {
@@ -81,36 +81,36 @@ static const NotificationSequence*
length += 6;
}
scene_state->notification_sequence_badkb = malloc(sizeof(void*) * length);
furi_check(scene_state->notification_sequence_badkb != NULL);
scene_state->notification_sequence_badusb = malloc(sizeof(void*) * length);
furi_check(scene_state->notification_sequence_badusb != NULL);
scene_state->notification_sequence_badkb[i++] = &message_blue_255;
scene_state->notification_sequence_badusb[i++] = &message_blue_255;
if(plugin_state->notification_method & NotificationMethodVibro) {
scene_state->notification_sequence_badkb[i++] = &message_vibro_on;
scene_state->notification_sequence_badusb[i++] = &message_vibro_on;
}
if(plugin_state->notification_method & NotificationMethodSound) {
scene_state->notification_sequence_badkb[i++] = &message_note_d5; //-V525
scene_state->notification_sequence_badkb[i++] = &message_delay_50;
scene_state->notification_sequence_badkb[i++] = &message_note_e4;
scene_state->notification_sequence_badkb[i++] = &message_delay_50;
scene_state->notification_sequence_badkb[i++] = &message_note_f3;
scene_state->notification_sequence_badusb[i++] = &message_note_d5; //-V525
scene_state->notification_sequence_badusb[i++] = &message_delay_50;
scene_state->notification_sequence_badusb[i++] = &message_note_e4;
scene_state->notification_sequence_badusb[i++] = &message_delay_50;
scene_state->notification_sequence_badusb[i++] = &message_note_f3;
}
scene_state->notification_sequence_badkb[i++] = &message_delay_50;
scene_state->notification_sequence_badusb[i++] = &message_delay_50;
if(plugin_state->notification_method & NotificationMethodVibro) {
scene_state->notification_sequence_badkb[i++] = &message_vibro_off;
scene_state->notification_sequence_badusb[i++] = &message_vibro_off;
}
if(plugin_state->notification_method & NotificationMethodSound) {
scene_state->notification_sequence_badkb[i++] = &message_sound_off;
scene_state->notification_sequence_badusb[i++] = &message_sound_off;
}
scene_state->notification_sequence_badkb[i++] = NULL;
scene_state->notification_sequence_badusb[i++] = NULL;
}
return (NotificationSequence*)scene_state->notification_sequence_badkb;
return (NotificationSequence*)scene_state->notification_sequence_badusb;
}
static void int_token_to_str(uint32_t i_token_code, char* str, TokenDigitsCount len) {
@@ -340,7 +340,7 @@ bool totp_scene_generate_token_handle_event(
scene_state->type_code_worker_context, TotpTypeCodeWorkerEventType);
notification_message(
plugin_state->notification_app,
get_notification_sequence_badkb(plugin_state, scene_state));
get_notification_sequence_badusb(plugin_state, scene_state));
return true;
}
@@ -399,8 +399,8 @@ void totp_scene_generate_token_deactivate(PluginState* plugin_state) {
free(scene_state->notification_sequence_new_token);
}
if(scene_state->notification_sequence_badkb != NULL) {
free(scene_state->notification_sequence_badkb);
if(scene_state->notification_sequence_badusb != NULL) {
free(scene_state->notification_sequence_badusb);
}
free(scene_state);
+1 -1
View File
@@ -1,5 +1,5 @@
#include "ui_controls.h"
#include <Authenticator_icons.h>
#include <totp_icons.h>
#include "constants.h"
#define TEXT_BOX_HEIGHT 13
@@ -1,5 +1,5 @@
App(
appid="Weather_Station",
appid="weather_station",
name="Weather Station",
apptype=FlipperAppType.PLUGIN,
targets=["f7"],
@@ -1,6 +1,6 @@
#include "weather_station_receiver.h"
#include "../weather_station_app_i.h"
#include <Weather_Station_icons.h>
#include <weather_station_icons.h>
#include <math.h>
#include <input/input.h>
@@ -1,6 +1,6 @@
#include "weather_station_receiver.h"
#include "../weather_station_app_i.h"
#include "Weather_Station_icons.h"
#include "weather_station_icons.h"
#include "../protocols/ws_generic.h"
#include <input/input.h>
#include <gui/elements.h>
@@ -92,6 +92,9 @@ void wifi_marauder_app_free(WifiMarauderApp* app) {
int32_t wifi_marauder_app(void* p) {
UNUSED(p);
furi_hal_power_enable_otg();
furi_delay_ms(300);
WifiMarauderApp* wifi_marauder_app = wifi_marauder_app_alloc();
wifi_marauder_app->uart = wifi_marauder_uart_init(wifi_marauder_app);
@@ -100,5 +103,7 @@ int32_t wifi_marauder_app(void* p) {
wifi_marauder_app_free(wifi_marauder_app);
furi_hal_power_disable_otg();
return 0;
}