Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FAP/FW] Experimental WiFi Features #53

Draft
wants to merge 11 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions .github/workflows/pull-request-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@ on:
jobs:
ufbt-test-build-action:
runs-on: ubuntu-latest
name: "PR Build: dev"
strategy:
matrix:
include:
- name: "dev"
sdk-channel: dev

- name: "rc"
sdk-channel: rc

- name: "release"
sdk-channel: release

name: "PR Build: ${{ matrix.name }}"
steps:
- name: "Checkout"
uses: actions/checkout@v3
Expand All @@ -20,11 +32,17 @@ jobs:
id: build-app
with:
app-dir: ./fap
sdk-channel: dev
sdk-channel: ${{ matrix.sdk-channel }}

- name: "Lint"
uses: flipperdevices/[email protected]
with:
app-dir: ./fap
skip-setup: true
task: lint

- name: "Create FAP Download Pre Release (${{ matrix.name }})"
uses: actions/upload-artifact@v3
with:
name: ${{ github.event.repository.name }}-${{ matrix.name }}-${{ steps.build-app.outputs.suffix }}.zip
path: ${{ steps.build-app.outputs.fap-artifacts }}
10 changes: 8 additions & 2 deletions fap/camera_suite.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#include "camera_suite.h"
#include <stdlib.h>
#include <expansion/expansion.h>

bool camera_suite_custom_event_callback(void* context, uint32_t event) {
furi_assert(context);
Expand Down Expand Up @@ -72,6 +70,12 @@ CameraSuite* camera_suite_app_alloc() {
CameraSuiteViewIdCamera,
camera_suite_view_camera_get_view(app->camera_suite_view_camera));

app->camera_suite_view_wifi_camera = camera_suite_view_wifi_camera_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
CameraSuiteViewIdWiFiCamera,
camera_suite_view_wifi_camera_get_view(app->camera_suite_view_wifi_camera));

app->camera_suite_view_guide = camera_suite_view_guide_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
Expand Down Expand Up @@ -105,6 +109,7 @@ void camera_suite_app_free(CameraSuite* app) {
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdStartscreen);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdMenu);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdCamera);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdWiFiCamera);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdGuide);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdAppSettings);
view_dispatcher_remove_view(app->view_dispatcher, CameraSuiteViewIdCamSettings);
Expand All @@ -116,6 +121,7 @@ void camera_suite_app_free(CameraSuite* app) {
// Free remaining resources
camera_suite_view_start_free(app->camera_suite_view_start);
camera_suite_view_camera_free(app->camera_suite_view_camera);
camera_suite_view_wifi_camera_free(app->camera_suite_view_wifi_camera);
camera_suite_view_guide_free(app->camera_suite_view_guide);

button_menu_free(app->button_menu);
Expand Down
45 changes: 45 additions & 0 deletions fap/camera_suite.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include <expansion/expansion.h>
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
Expand All @@ -16,10 +17,41 @@
#include "views/camera_suite_view_guide.h"
#include "views/camera_suite_view_start.h"
#include "views/camera_suite_view_camera.h"
#include "views/camera_suite_view_wifi_camera.h"
#include "helpers/camera_suite_storage.h"

#define TAG "Camera Suite"

#ifdef FW_ORIGIN_Xtreme
/**
* Enable the following line for "Xtreme Firmware" & "Xtreme Apps" (Flipper-XFW).
*
* @see https://github.com/Flipper-XFW/Xtreme-Firmware
* @see https://github.com/Flipper-XFW/Xtreme-Apps
*/
#include <xtreme/xtreme.h>
#define UART_CH (xtreme_settings.uart_esp_channel)
#elif defined FW_ORIGIN_Momentum
/**
* Enable the following line for "Momentum Firmware" & "Momentum Apps".
*
* @see https://github.com/Next-Flip/Momentum-Firmware
* @see https://github.com/Next-Flip/Momentum-Apps
*/
#include <momentum/momentum.h>
#define UART_CH (momentum_settings.uart_esp_channel)
#elif defined FW_ORIGIN_RM
/**
* Enable the following line for "RogueMaster Firmware".
*
* @see https://github.com/RogueMaster/flipperzero-firmware-wPlugins
*/
#include <cfw/cfw.h>
#define UART_CH (cfw_settings.uart_esp_channel)
#else
#define UART_CH (FuriHalSerialIdUsart)
#endif

typedef struct {
Gui* gui;
NotificationApp* notification;
Expand All @@ -29,6 +61,7 @@ typedef struct {
VariableItemList* variable_item_list;
CameraSuiteViewStart* camera_suite_view_start;
CameraSuiteViewCamera* camera_suite_view_camera;
CameraSuiteViewWiFiCamera* camera_suite_view_wifi_camera;
CameraSuiteViewGuide* camera_suite_view_guide;
uint32_t orientation;
uint32_t dither;
Expand All @@ -44,11 +77,23 @@ typedef enum {
CameraSuiteViewIdStartscreen,
CameraSuiteViewIdMenu,
CameraSuiteViewIdCamera,
CameraSuiteViewIdWiFiCamera,
CameraSuiteViewIdGuide,
CameraSuiteViewIdAppSettings,
CameraSuiteViewIdCamSettings,
} CameraSuiteViewId;

typedef enum {
// Reserved for StreamBuffer internal event
WorkerEventReserved = (1 << 0),
// Stop worker thread
WorkerEventStop = (1 << 1),
// Rx event
WorkerEventRx = (1 << 2),
} WorkerEventFlags;

#define CAMERA_WORKER_EVENTS_MASK (WorkerEventStop | WorkerEventRx)

typedef enum {
CameraSuiteOrientation0,
CameraSuiteOrientation90,
Expand Down
7 changes: 7 additions & 0 deletions fap/helpers/camera_suite_custom_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ typedef enum {
CameraSuiteCustomEventSceneCameraRight,
CameraSuiteCustomEventSceneCameraOk,
CameraSuiteCustomEventSceneCameraBack,
// Scene events: WiFi Camera
CameraSuiteCustomEventSceneWiFiCameraUp,
CameraSuiteCustomEventSceneWiFiCameraDown,
CameraSuiteCustomEventSceneWiFiCameraLeft,
CameraSuiteCustomEventSceneWiFiCameraRight,
CameraSuiteCustomEventSceneWiFiCameraOk,
CameraSuiteCustomEventSceneWiFiCameraBack,
// Scene events: Guide
CameraSuiteCustomEventSceneGuideUp,
CameraSuiteCustomEventSceneGuideDown,
Expand Down
2 changes: 2 additions & 0 deletions fap/helpers/camera_suite_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ void camera_suite_read_settings(void* context) {
camera_suite_close_storage();
return;
}

uint32_t file_version;
FuriString* temp_str = furi_string_alloc();

Expand All @@ -96,6 +97,7 @@ void camera_suite_read_settings(void* context) {
furi_string_free(temp_str);
return;
}

furi_string_free(temp_str);

if(file_version < BOILERPLATE_SETTINGS_FILE_VERSION) {
Expand Down
1 change: 1 addition & 0 deletions fap/scenes/camera_suite_scene_config.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
ADD_SCENE(camera_suite, start, Start)
ADD_SCENE(camera_suite, menu, Menu)
ADD_SCENE(camera_suite, camera, Camera)
ADD_SCENE(camera_suite, wifi_camera, WiFiCamera)
ADD_SCENE(camera_suite, guide, Guide)
ADD_SCENE(camera_suite, app_settings, AppSettings)
ADD_SCENE(camera_suite, cam_settings, CamSettings)
14 changes: 14 additions & 0 deletions fap/scenes/camera_suite_scene_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
enum SubmenuIndex {
/** Camera. */
SubmenuIndexSceneCamera = 10,
/** WiFi Camera */
SubmenuIndexSceneWiFiCamera,
/** Cam settings menu. */
SubmenuIndexCamSettings,
/** App settings menu. */
Expand All @@ -26,6 +28,13 @@ void camera_suite_scene_menu_on_enter(void* context) {
camera_suite_scene_menu_submenu_callback,
app);

submenu_add_item(
app->submenu,
"Stream Camera to WiFi",
SubmenuIndexSceneWiFiCamera,
camera_suite_scene_menu_submenu_callback,
app);

submenu_add_item(
app->submenu,
"Camera Settings",
Expand Down Expand Up @@ -67,6 +76,11 @@ bool camera_suite_scene_menu_on_event(void* context, SceneManagerEvent event) {
app->scene_manager, CameraSuiteSceneMenu, SubmenuIndexSceneCamera);
scene_manager_next_scene(app->scene_manager, CameraSuiteSceneCamera);
return true;
} else if(event.event == SubmenuIndexSceneWiFiCamera) {
scene_manager_set_scene_state(
app->scene_manager, CameraSuiteSceneMenu, SubmenuIndexSceneWiFiCamera);
scene_manager_next_scene(app->scene_manager, CameraSuiteSceneWiFiCamera);
return true;
} else if(event.event == SubmenuIndexAppSettings) {
scene_manager_set_scene_state(
app->scene_manager, CameraSuiteSceneMenu, SubmenuIndexAppSettings);
Expand Down
51 changes: 51 additions & 0 deletions fap/scenes/camera_suite_scene_wifi_camera.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#include "../camera_suite.h"
#include "../helpers/camera_suite_custom_event.h"
#include "../views/camera_suite_view_wifi_camera.h"

void camera_suite_view_wifi_camera_callback(CameraSuiteCustomEvent event, void* context) {
furi_assert(context);
CameraSuite* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, event);
}

void camera_suite_scene_wifi_camera_on_enter(void* context) {
furi_assert(context);
CameraSuite* app = context;
camera_suite_view_wifi_camera_set_callback(
app->camera_suite_view_wifi_camera, camera_suite_view_wifi_camera_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, CameraSuiteViewIdWiFiCamera);
}

bool camera_suite_scene_wifi_camera_on_event(void* context, SceneManagerEvent event) {
CameraSuite* app = context;
bool consumed = false;

if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) {
case CameraSuiteCustomEventSceneWiFiCameraLeft:
case CameraSuiteCustomEventSceneWiFiCameraRight:
case CameraSuiteCustomEventSceneWiFiCameraUp:
case CameraSuiteCustomEventSceneWiFiCameraDown:
// Do nothing.
break;
case CameraSuiteCustomEventSceneWiFiCameraBack:
notification_message(app->notification, &sequence_reset_red);
notification_message(app->notification, &sequence_reset_green);
notification_message(app->notification, &sequence_reset_blue);
if(!scene_manager_search_and_switch_to_previous_scene(
app->scene_manager, CameraSuiteSceneMenu)) {
scene_manager_stop(app->scene_manager);
view_dispatcher_stop(app->view_dispatcher);
}
consumed = true;
break;
}
}

return consumed;
}

void camera_suite_scene_wifi_camera_on_exit(void* context) {
CameraSuite* app = context;
UNUSED(app);
}
Loading
Loading