Skip to content

Commit 4b8c017

Browse files
committed
Merge branch 'dev' into release
2 parents b579bca + 20a6aa0 commit 4b8c017

File tree

182 files changed

+2497
-6539
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

182 files changed

+2497
-6539
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
* @xMasterX
33

44
# Assets
5-
/assets/resources/infrared/ @xMasterX @amec0e
5+
/assets/resources/infrared/assets/ @amec0e @Leptopt1los @xMasterX

CHANGELOG.md

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
## New changes
2-
* Plugins: **22+ plugins was fixed (UI update issues) in extra pack and in base firmware pack**
3-
* Plugins: Spectrum Analyzer - Modulation switching (hold OK) (by @ALEEF02 | PR #557)
4-
* Plugins: BadBT -> Temp fix for macOS
5-
* Plugins: Update TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) -> + added fix for UI update too
6-
* Infrared: Add Play / Pause in universal projector remote
7-
* Infrared: Update Universal remote assets (by @amec0e)
2+
* SubGHz: Support for Ebyte E07 module power amp switch (works with TehRabbitt's Flux Capacitor Board) (by @Sil333033) (PR #559 by @Z3BRO) -> Remade by @xMasterX -> Driver code fixed and reworked by @gid9798
3+
* Infrared: Update universal remote assets (by @amec0e | PR #570)
4+
* Infrared: Update universal AC asset (by @Leptopt1los | PR #569)
5+
* Plugins: Add * in NFC Maker keyboard (hold `.`)
6+
* Plugins: Update TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator)
7+
* Plugins: Update ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-wifi-marauder)
8+
* Plugins: Update ESP32-CAM -> Camera Suite [(by CodyTolene)](https://github.com/CodyTolene/Flipper-Zero-Camera-Suite) -> (PR #562 by @CodyTolene)
9+
* OFW PR 2949: IR: buttons move feature rework (by nminaylov)
10+
* OFW PR 2941: FDX-B temperature now uses system units (by Astrrra)
11+
* OFW: fbtenv: add additional environ variable to control execution flow
12+
* OFW: NFC CLI: Fix multiple apdu commands from not working when one of them gives an empty response
13+
* OFW: NFC: Fix MFC key invalidation
14+
* OFW: Rename Applications to Apps
15+
* OFW: Fix about screen
16+
* OFW: change FuriThreadPriorityIsr to 31 (configMAX_PRIORITIES-1)
17+
* OFW: External apps icounter
18+
* OFW: Overly missed feature: Infrared: move button (change button order in a remote)
19+
* OFW: Move U2F path to ext
20+
* OFW: New RTC flags in device info
21+
* OFW: Backlight notification fix
22+
* OFW: Fix fbtenv restore
823

924
----
1025

ReadMe.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,10 @@ Encoders made by @assasinfil & @xMasterX:
114114
The majority of this project is developed and maintained by me, @xMasterX.
115115
I'm unemployed, and the only income I receive is from your donations.
116116
Our team is small and the guys are working on this project as much as they can solely based on the enthusiasm they have for this project and the community.
117-
- @assasinfil - SubGHz
117+
- @gid9798 - SubGHz, Plugins, many other things
118+
- @assasinfil - SubGHz protocols
118119
- @Svaarich - UI design and animations
119-
- @Amec0e - Infrared assets
120+
- @amec0e & @Leptopt1los - Infrared assets
120121
- Community moderators in Telegram, Discord, and Reddit
121122
- And of course our GitHub community. Your PRs are a very important part of this firmware and open-source development.
122123

applications/drivers/subghz/cc1101_ext/cc1101_ext.c

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
#define TAG "SubGhz_Device_CC1101_Ext"
1919

2020
#define SUBGHZ_DEVICE_CC1101_EXT_TX_GPIO &gpio_ext_pb2
21-
#define SUBGHZ_DEVICE_CC1101_EXT_DANGEROUS_RANGE false
21+
#define SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO &gpio_ext_pc3
22+
#define SUBGHZ_DEVICE_CC1101_EXT_FORCE_DANGEROUS_RANGE false
23+
24+
#define SUBGHZ_DEVICE_CC1101_CONFIG_VER 1
2225

2326
/* DMA Channels definition */
2427
#define SUBGHZ_DEVICE_CC1101_EXT_DMA DMA2
@@ -78,6 +81,8 @@ typedef struct {
7881
const GpioPin* g0_pin;
7982
SubGhzDeviceCC1101ExtAsyncTx async_tx;
8083
SubGhzDeviceCC1101ExtAsyncRx async_rx;
84+
bool power_amp;
85+
bool extended_range;
8186
} SubGhzDeviceCC1101Ext;
8287

8388
static SubGhzDeviceCC1101Ext* subghz_device_cc1101_ext = NULL;
@@ -187,24 +192,43 @@ static bool subghz_device_cc1101_ext_check_init() {
187192
return ret;
188193
}
189194

190-
bool subghz_device_cc1101_ext_alloc() {
195+
bool subghz_device_cc1101_ext_alloc(SubGhzDeviceConf* conf) {
191196
furi_assert(subghz_device_cc1101_ext == NULL);
192197
subghz_device_cc1101_ext = malloc(sizeof(SubGhzDeviceCC1101Ext));
193198
subghz_device_cc1101_ext->state = SubGhzDeviceCC1101ExtStateInit;
194199
subghz_device_cc1101_ext->regulation = SubGhzDeviceCC1101ExtRegulationTxRx;
195200
subghz_device_cc1101_ext->async_mirror_pin = NULL;
196201
subghz_device_cc1101_ext->spi_bus_handle = &furi_hal_spi_bus_handle_external;
197202
subghz_device_cc1101_ext->g0_pin = SUBGHZ_DEVICE_CC1101_EXT_TX_GPIO;
203+
subghz_device_cc1101_ext->power_amp = false;
204+
subghz_device_cc1101_ext->extended_range = false;
205+
if(conf) {
206+
if(conf->ver == SUBGHZ_DEVICE_CC1101_CONFIG_VER) {
207+
subghz_device_cc1101_ext->power_amp = conf->power_amp;
208+
subghz_device_cc1101_ext->extended_range = conf->extended_range;
209+
} else {
210+
FURI_LOG_E(TAG, "Config version mismatch");
211+
}
212+
}
198213

199214
subghz_device_cc1101_ext->async_rx.capture_delta_duration = 0;
200215

201216
furi_hal_spi_bus_handle_init(subghz_device_cc1101_ext->spi_bus_handle);
217+
if(subghz_device_cc1101_ext->power_amp) {
218+
furi_hal_gpio_init_simple(SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO, GpioModeOutputPushPull);
219+
}
220+
202221
return subghz_device_cc1101_ext_check_init();
203222
}
204223

205224
void subghz_device_cc1101_ext_free() {
206225
furi_assert(subghz_device_cc1101_ext != NULL);
226+
207227
furi_hal_spi_bus_handle_deinit(subghz_device_cc1101_ext->spi_bus_handle);
228+
if(subghz_device_cc1101_ext->power_amp) {
229+
furi_hal_gpio_init_simple(SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO, GpioModeAnalog);
230+
}
231+
208232
free(subghz_device_cc1101_ext);
209233
subghz_device_cc1101_ext = NULL;
210234
}
@@ -221,7 +245,7 @@ bool subghz_device_cc1101_ext_is_connect() {
221245
bool ret = false;
222246

223247
if(subghz_device_cc1101_ext == NULL) { // not initialized
224-
ret = subghz_device_cc1101_ext_alloc();
248+
ret = subghz_device_cc1101_ext_alloc(NULL);
225249
subghz_device_cc1101_ext_free();
226250
} else { // initialized
227251
furi_hal_spi_acquire(subghz_device_cc1101_ext->spi_bus_handle);
@@ -381,19 +405,28 @@ void subghz_device_cc1101_ext_idle() {
381405
furi_hal_spi_acquire(subghz_device_cc1101_ext->spi_bus_handle);
382406
cc1101_switch_to_idle(subghz_device_cc1101_ext->spi_bus_handle);
383407
furi_hal_spi_release(subghz_device_cc1101_ext->spi_bus_handle);
408+
if(subghz_device_cc1101_ext->power_amp) {
409+
furi_hal_gpio_write(SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO, 0);
410+
}
384411
}
385412

386413
void subghz_device_cc1101_ext_rx() {
387414
furi_hal_spi_acquire(subghz_device_cc1101_ext->spi_bus_handle);
388415
cc1101_switch_to_rx(subghz_device_cc1101_ext->spi_bus_handle);
389416
furi_hal_spi_release(subghz_device_cc1101_ext->spi_bus_handle);
417+
if(subghz_device_cc1101_ext->power_amp) {
418+
furi_hal_gpio_write(SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO, 0);
419+
}
390420
}
391421

392422
bool subghz_device_cc1101_ext_tx() {
393423
if(subghz_device_cc1101_ext->regulation != SubGhzDeviceCC1101ExtRegulationTxRx) return false;
394424
furi_hal_spi_acquire(subghz_device_cc1101_ext->spi_bus_handle);
395425
cc1101_switch_to_tx(subghz_device_cc1101_ext->spi_bus_handle);
396426
furi_hal_spi_release(subghz_device_cc1101_ext->spi_bus_handle);
427+
if(subghz_device_cc1101_ext->power_amp) {
428+
furi_hal_gpio_write(SUBGHZ_DEVICE_CC1101_EXT_E07_AMP_GPIO, 1);
429+
}
397430
return true;
398431
}
399432

@@ -432,14 +465,16 @@ bool subghz_device_cc1101_ext_is_frequency_valid(uint32_t value) {
432465
}
433466

434467
bool subghz_device_cc1101_ext_is_tx_allowed(uint32_t value) {
435-
if(!(SUBGHZ_DEVICE_CC1101_EXT_DANGEROUS_RANGE) &&
468+
if(!(SUBGHZ_DEVICE_CC1101_EXT_FORCE_DANGEROUS_RANGE ||
469+
subghz_device_cc1101_ext->extended_range) &&
436470
!(value >= 299999755 && value <= 350000335) && // was increased from 348 to 350
437471
!(value >= 386999938 && value <= 467750000) && // was increased from 464 to 467.75
438472
!(value >= 778999847 && value <= 928000000)) {
439473
FURI_LOG_I(TAG, "Frequency blocked - outside default range");
440474
return false;
441475
} else if(
442-
(SUBGHZ_DEVICE_CC1101_EXT_DANGEROUS_RANGE) &&
476+
(SUBGHZ_DEVICE_CC1101_EXT_FORCE_DANGEROUS_RANGE ||
477+
subghz_device_cc1101_ext->extended_range) &&
443478
!subghz_device_cc1101_ext_is_frequency_valid(value)) {
444479
FURI_LOG_I(TAG, "Frequency blocked - outside dangerous range");
445480
return false;
@@ -529,7 +564,7 @@ void subghz_device_cc1101_ext_start_async_rx(
529564
furi_hal_bus_enable(FuriHalBusTIM17);
530565

531566
// Configure TIM
532-
//Set the timer resolution to 2 µs
567+
//Set the timer resolution to 2 us
533568
LL_TIM_SetPrescaler(TIM17, (64 << 1) - 1);
534569
LL_TIM_SetCounterMode(TIM17, LL_TIM_COUNTERMODE_UP);
535570
LL_TIM_SetAutoReload(TIM17, 0xFFFF);
@@ -710,7 +745,7 @@ bool subghz_device_cc1101_ext_start_async_tx(SubGhzDeviceCC1101ExtCallback callb
710745
furi_hal_bus_enable(FuriHalBusTIM17);
711746

712747
// Configure TIM
713-
// Set the timer resolution to 2 µs
748+
// Set the timer resolution to 2 us
714749
LL_TIM_SetPrescaler(TIM17, (64 << 1) - 1);
715750
LL_TIM_SetCounterMode(TIM17, LL_TIM_COUNTERMODE_UP);
716751
LL_TIM_SetAutoReload(TIM17, 0xFFFF);

applications/drivers/subghz/cc1101_ext/cc1101_ext.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#pragma once
77
#include <lib/subghz/devices/preset.h>
8+
#include <lib/subghz/devices/types.h>
89
#include <stdbool.h>
910
#include <stdint.h>
1011
#include <stddef.h>
@@ -34,7 +35,7 @@ const GpioPin* subghz_device_cc1101_ext_get_data_gpio();
3435
*
3536
* @return true if success
3637
*/
37-
bool subghz_device_cc1101_ext_alloc();
38+
bool subghz_device_cc1101_ext_alloc(SubGhzDeviceConf* conf);
3839

3940
/** Deinitialize device
4041
*/

applications/external/camera_suite/application.fam

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
App(
2-
appid="camerasuite",
2+
appid="camera_suite",
33
apptype=FlipperAppType.EXTERNAL,
44
cdefines=["APP_CAMERA_SUITE"],
55
entry_point="camera_suite_app",
6-
fap_author="Cody Tolene",
6+
fap_author="@CodyTolene @Z4urce @leedave",
77
fap_category="GPIO",
88
fap_description="A camera suite application for the Flipper Zero ESP32-CAM module.",
99
fap_icon="icons/camera_suite.png",

applications/external/camera_suite/camera_suite.c

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void camera_suite_tick_event_callback(void* context) {
1313
scene_manager_handle_tick_event(app->scene_manager);
1414
}
1515

16-
//leave app if back button pressed
16+
// Leave app if back button pressed.
1717
bool camera_suite_navigation_event_callback(void* context) {
1818
furi_assert(context);
1919
CameraSuite* app = context;
@@ -25,10 +25,10 @@ CameraSuite* camera_suite_app_alloc() {
2525
app->gui = furi_record_open(RECORD_GUI);
2626
app->notification = furi_record_open(RECORD_NOTIFICATION);
2727

28-
//Turn backlight on, believe me this makes testing your app easier
28+
// Turn backlight on.
2929
notification_message(app->notification, &sequence_display_backlight_on);
3030

31-
//Scene additions
31+
// Scene additions
3232
app->view_dispatcher = view_dispatcher_alloc();
3333
view_dispatcher_enable_queue(app->view_dispatcher);
3434

@@ -60,17 +60,11 @@ CameraSuite* camera_suite_app_alloc() {
6060
CameraSuiteViewIdStartscreen,
6161
camera_suite_view_start_get_view(app->camera_suite_view_start));
6262

63-
app->camera_suite_view_style_1 = camera_suite_view_style_1_alloc();
63+
app->camera_suite_view_camera = camera_suite_view_camera_alloc();
6464
view_dispatcher_add_view(
6565
app->view_dispatcher,
66-
CameraSuiteViewIdScene1,
67-
camera_suite_view_style_1_get_view(app->camera_suite_view_style_1));
68-
69-
app->camera_suite_view_style_2 = camera_suite_view_style_2_alloc();
70-
view_dispatcher_add_view(
71-
app->view_dispatcher,
72-
CameraSuiteViewIdScene2,
73-
camera_suite_view_style_2_get_view(app->camera_suite_view_style_2));
66+
CameraSuiteViewIdCamera,
67+
camera_suite_view_camera_get_view(app->camera_suite_view_camera));
7468

7569
app->camera_suite_view_guide = camera_suite_view_guide_alloc();
7670
view_dispatcher_add_view(
@@ -98,9 +92,9 @@ void camera_suite_app_free(CameraSuite* app) {
9892
scene_manager_free(app->scene_manager);
9993

10094
// View Dispatcher
95+
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdStartscreen);
10196
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdMenu);
102-
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdScene1);
103-
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdScene2);
97+
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdCamera);
10498
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdGuide);
10599
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdSettings);
106100
submenu_free(app->submenu);
@@ -110,8 +104,7 @@ void camera_suite_app_free(CameraSuite* app) {
110104

111105
// Free remaining resources
112106
camera_suite_view_start_free(app->camera_suite_view_start);
113-
camera_suite_view_style_1_free(app->camera_suite_view_style_1);
114-
camera_suite_view_style_2_free(app->camera_suite_view_style_2);
107+
camera_suite_view_camera_free(app->camera_suite_view_camera);
115108
camera_suite_view_guide_free(app->camera_suite_view_guide);
116109
button_menu_free(app->button_menu);
117110
variable_item_list_free(app->variable_item_list);

applications/external/camera_suite/camera_suite.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
#include "scenes/camera_suite_scene.h"
55
#include "views/camera_suite_view_guide.h"
66
#include "views/camera_suite_view_start.h"
7-
#include "views/camera_suite_view_style_1.h"
8-
#include "views/camera_suite_view_style_2.h"
9-
#include <assets_icons.h>
7+
#include "views/camera_suite_view_camera.h"
108
#include <furi.h>
119
#include <furi_hal.h>
1210
#include <gui/gui.h>
@@ -29,8 +27,7 @@ typedef struct {
2927
SceneManager* scene_manager;
3028
VariableItemList* variable_item_list;
3129
CameraSuiteViewStart* camera_suite_view_start;
32-
CameraSuiteViewStyle1* camera_suite_view_style_1;
33-
CameraSuiteViewStyle2* camera_suite_view_style_2;
30+
CameraSuiteViewCamera* camera_suite_view_camera;
3431
CameraSuiteViewGuide* camera_suite_view_guide;
3532
uint32_t orientation;
3633
uint32_t haptic;
@@ -42,8 +39,7 @@ typedef struct {
4239
typedef enum {
4340
CameraSuiteViewIdStartscreen,
4441
CameraSuiteViewIdMenu,
45-
CameraSuiteViewIdScene1,
46-
CameraSuiteViewIdScene2,
42+
CameraSuiteViewIdCamera,
4743
CameraSuiteViewIdGuide,
4844
CameraSuiteViewIdSettings,
4945
} CameraSuiteViewId;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
## v1.1
2+
3+
- Support and picture stabilization for all camera orientations (0°, 90°, 180°, 270°).
4+
- Rename "Scene 1" to "Camera". No UX changes, strictly internal.
5+
- Clean up unused "Scene 2". This was inaccessible to users previously and unused.
6+
- Add new dithering variations (needs new module firmware, see https://github.com/CodyTolene/Flipper-Zero-Camera-Suite#firmware-installation):
7+
- Add `Jarvis Judice` Ninke Dithering option
8+
- Add `Stucki` dithering option.
9+
- Add ability to toggle dithering options from default `Floyd-Steinberg` and back.
10+
- Resolves issue https://github.com/CodyTolene/Flipper-Zero-Camera-Suite/issues/7
11+
- Resolves issue https://github.com/CodyTolene/Flipper-Zero-Camera-Suite/pull/17
12+
13+
## v1.0
14+
15+
- Builds upon Z4urce's software found here (updated 6 months ago): https://github.com/Z4urce/flipperzero-camera
16+
- Utilizes the superb C boilerplate examples laid out by leedave (updated last month): https://github.com/leedave/flipper-zero-fap-boilerplate
17+
- Repurpose and build upon the "[ESP32] Camera" software into the new "[ESP32] Camera Suite" application with new purpose:
18+
- Adding more scene for a guide.
19+
- Adding more scene for saveable settings.
20+
- Add ability to rotate the camera orientation.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Flipper Zero - Camera Suite
2+
3+
Software to run an ESP32-CAM module on your Flipper Zero device.
4+
5+
## Software Guide <a name="software-guide"></a>
6+
7+
### Flipper Zero button mappings:
8+
9+
🔼 = Contrast Up
10+
11+
🔽 = Contrast Down
12+
13+
◀️ = Toggle invert.
14+
15+
▶️ = Toggle dithering on/off.
16+
17+
⚪ = Cycle Floyd–Steinberg/Jarvis-Judice-Ninke/Stucki dithering types.
18+
19+
↩️ = Go back.
20+
21+
### Camera Suite settings:
22+
23+
**Orientation** = Rotate the camera image 90 degrees counter-clockwise starting at zero by default (0, 90, 180, 270). This is useful if you have your camera module mounted in a different orientation than the default.
24+
25+
**Haptic FX** = Toggle haptic feedback on/off.
26+
27+
**Sound FX** = Toggle sound effects on/off.
28+
29+
**LED FX** = Toggle LED effects on/off.
30+
31+
## Links
32+
33+
Full setup, wiring guide, etc. in the main project README here: https://github.com/CodyTolene/Flipper-Zero-Camera-Suite
34+
35+
A firmware is needed for the ESP32-CAM module, see here for more information: https://github.com/CodyTolene/Flipper-Zero-Camera-Suite#firmware-installation

0 commit comments

Comments
 (0)