Bladeren bron

☦️ Rpc: implement SystemPlayAudiovisualAlert (#937)

* Rpc: update protobuf sources
* Notification: allow user settings override
* Notification: add audiovisual alert sequence
* Rpc: implement SystemPlayAudiovisualAlert
Anna Prosvetova 4 jaren geleden
bovenliggende
commit
475fa91ba6

+ 15 - 4
applications/notification/notification-app.c

@@ -165,6 +165,9 @@ void notification_process_notification_message(
     bool led_active = false;
     bool led_active = false;
     uint8_t led_values[NOTIFICATION_LED_COUNT] = {0x00, 0x00, 0x00};
     uint8_t led_values[NOTIFICATION_LED_COUNT] = {0x00, 0x00, 0x00};
     bool reset_notifications = true;
     bool reset_notifications = true;
+    float speaker_volume_setting = app->settings.speaker_volume;
+    bool vibro_setting = app->settings.vibro_on;
+    float display_brightness_setting = app->settings.display_brightness;
 
 
     uint8_t reset_mask = 0;
     uint8_t reset_mask = 0;
 
 
@@ -177,8 +180,7 @@ void notification_process_notification_message(
             if(notification_message->data.led.value > 0x00) {
             if(notification_message->data.led.value > 0x00) {
                 notification_apply_notification_led_layer(
                 notification_apply_notification_led_layer(
                     &app->display,
                     &app->display,
-                    notification_settings_get_display_brightness(
-                        app, notification_message->data.led.value));
+                    notification_message->data.led.value * display_brightness_setting);
             } else {
             } else {
                 notification_reset_notification_led_layer(&app->display);
                 notification_reset_notification_led_layer(&app->display);
                 if(osTimerIsRunning(app->display_timer)) {
                 if(osTimerIsRunning(app->display_timer)) {
@@ -207,7 +209,7 @@ void notification_process_notification_message(
             break;
             break;
         case NotificationMessageTypeVibro:
         case NotificationMessageTypeVibro:
             if(notification_message->data.vibro.on) {
             if(notification_message->data.vibro.on) {
-                if(app->settings.vibro_on) notification_vibro_on();
+                if(vibro_setting) notification_vibro_on();
             } else {
             } else {
                 notification_vibro_off();
                 notification_vibro_off();
             }
             }
@@ -215,7 +217,7 @@ void notification_process_notification_message(
             break;
             break;
         case NotificationMessageTypeSoundOn:
         case NotificationMessageTypeSoundOn:
             notification_sound_on(
             notification_sound_on(
-                notification_message->data.sound.pwm * app->settings.speaker_volume,
+                notification_message->data.sound.pwm * speaker_volume_setting,
                 notification_message->data.sound.frequency);
                 notification_message->data.sound.frequency);
             reset_mask |= reset_sound_mask;
             reset_mask |= reset_sound_mask;
             break;
             break;
@@ -243,6 +245,15 @@ void notification_process_notification_message(
         case NotificationMessageTypeDoNotReset:
         case NotificationMessageTypeDoNotReset:
             reset_notifications = false;
             reset_notifications = false;
             break;
             break;
+        case NotificationMessageTypeForceSpeakerVolumeSetting:
+            speaker_volume_setting = notification_message->data.forced_settings.speaker_volume;
+            break;
+        case NotificationMessageTypeForceVibroSetting:
+            vibro_setting = notification_message->data.forced_settings.vibro;
+            break;
+        case NotificationMessageTypeForceDisplayBrightnessSetting:
+            display_brightness_setting =
+                notification_message->data.forced_settings.display_brightness;
         }
         }
         notification_message_index++;
         notification_message_index++;
         notification_message = (*message->sequence)[notification_message_index];
         notification_message = (*message->sequence)[notification_message_index];

+ 56 - 0
applications/notification/notification-messages.c

@@ -109,6 +109,27 @@ const NotificationMessage message_do_not_reset = {
     .type = NotificationMessageTypeDoNotReset,
     .type = NotificationMessageTypeDoNotReset,
 };
 };
 
 
+// Override user settings
+const NotificationMessage message_force_speaker_volume_setting_1f = {
+    .type = NotificationMessageTypeForceSpeakerVolumeSetting,
+    .data.forced_settings.speaker_volume = 1.0f,
+};
+
+const NotificationMessage message_force_vibro_setting_on = {
+    .type = NotificationMessageTypeForceVibroSetting,
+    .data.forced_settings.vibro = true,
+};
+
+const NotificationMessage message_force_vibro_setting_off = {
+    .type = NotificationMessageTypeForceVibroSetting,
+    .data.forced_settings.vibro = false,
+};
+
+const NotificationMessage message_force_display_brightness_setting_1f = {
+    .type = NotificationMessageTypeForceDisplayBrightnessSetting,
+    .data.forced_settings.display_brightness = 1.0f,
+};
+
 /****************************** Message sequences ******************************/
 /****************************** Message sequences ******************************/
 
 
 // Reset
 // Reset
@@ -361,3 +382,38 @@ const NotificationSequence sequence_error = {
     &message_sound_off,
     &message_sound_off,
     NULL,
     NULL,
 };
 };
+
+const NotificationSequence sequence_audiovisual_alert = {
+    &message_force_speaker_volume_setting_1f,
+    &message_force_vibro_setting_on,
+    &message_force_display_brightness_setting_1f,
+    &message_vibro_on,
+
+    &message_display_on,
+    &message_note_c7,
+    &message_delay_250,
+
+    &message_display_off,
+    &message_note_c4,
+    &message_delay_250,
+
+    &message_display_on,
+    &message_note_c7,
+    &message_delay_250,
+
+    &message_display_off,
+    &message_note_c4,
+    &message_delay_250,
+
+    &message_display_on,
+    &message_note_c7,
+    &message_delay_250,
+
+    &message_display_off,
+    &message_note_c4,
+    &message_delay_250,
+
+    &message_sound_off,
+    &message_vibro_off,
+    NULL,
+};

+ 7 - 0
applications/notification/notification-messages.h

@@ -42,6 +42,12 @@ extern const NotificationMessage message_vibro_off;
 // Reset
 // Reset
 extern const NotificationMessage message_do_not_reset;
 extern const NotificationMessage message_do_not_reset;
 
 
+// Override user settings
+extern const NotificationMessage message_force_speaker_volume_setting_1f;
+extern const NotificationMessage message_force_vibro_setting_on;
+extern const NotificationMessage message_force_vibro_setting_off;
+extern const NotificationMessage message_force_display_brightness_setting_1f;
+
 /****************************** Message sequences ******************************/
 /****************************** Message sequences ******************************/
 
 
 // Reset
 // Reset
@@ -93,6 +99,7 @@ extern const NotificationSequence sequence_single_vibro;
 extern const NotificationSequence sequence_double_vibro;
 extern const NotificationSequence sequence_double_vibro;
 extern const NotificationSequence sequence_success;
 extern const NotificationSequence sequence_success;
 extern const NotificationSequence sequence_error;
 extern const NotificationSequence sequence_error;
+extern const NotificationSequence sequence_audiovisual_alert;
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 10 - 0
applications/notification/notification.h

@@ -24,11 +24,18 @@ typedef struct {
     uint32_t length;
     uint32_t length;
 } NotificationMessageDataDelay;
 } NotificationMessageDataDelay;
 
 
+typedef struct {
+    float speaker_volume;
+    bool vibro;
+    float display_brightness;
+} NotificationMessageDataForcedSettings;
+
 typedef union {
 typedef union {
     NotificationMessageDataSound sound;
     NotificationMessageDataSound sound;
     NotificationMessageDataLed led;
     NotificationMessageDataLed led;
     NotificationMessageDataVibro vibro;
     NotificationMessageDataVibro vibro;
     NotificationMessageDataDelay delay;
     NotificationMessageDataDelay delay;
+    NotificationMessageDataForcedSettings forced_settings;
 } NotificationMessageData;
 } NotificationMessageData;
 
 
 typedef enum {
 typedef enum {
@@ -41,6 +48,9 @@ typedef enum {
     NotificationMessageTypeDelay,
     NotificationMessageTypeDelay,
     NotificationMessageTypeLedDisplay,
     NotificationMessageTypeLedDisplay,
     NotificationMessageTypeDoNotReset,
     NotificationMessageTypeDoNotReset,
+    NotificationMessageTypeForceSpeakerVolumeSetting,
+    NotificationMessageTypeForceVibroSetting,
+    NotificationMessageTypeForceDisplayBrightnessSetting,
 } NotificationMessageType;
 } NotificationMessageType;
 
 
 typedef struct {
 typedef struct {

+ 17 - 0
applications/rpc/rpc_system.c

@@ -4,6 +4,7 @@
 
 
 #include <furi-hal.h>
 #include <furi-hal.h>
 #include <power/power_service/power.h>
 #include <power/power_service/power.h>
+#include <notification/notification-messages.h>
 
 
 void rpc_system_system_ping_process(const PB_Main* msg_request, void* context) {
 void rpc_system_system_ping_process(const PB_Main* msg_request, void* context) {
     furi_assert(msg_request);
     furi_assert(msg_request);
@@ -157,6 +158,19 @@ void rpc_system_system_factory_reset_process(const PB_Main* request, void* conte
     power_reboot(PowerBootModeNormal);
     power_reboot(PowerBootModeNormal);
 }
 }
 
 
+void rpc_system_system_play_audiovisual_alert_process(const PB_Main* request, void* context) {
+    furi_assert(request);
+    furi_assert(request->which_content == PB_Main_system_play_audiovisual_alert_request_tag);
+    furi_assert(context);
+    Rpc* rpc = context;
+
+    NotificationApp* notification = furi_record_open("notification");
+    notification_message(notification, &sequence_audiovisual_alert);
+    furi_record_close("notification");
+
+    rpc_send_and_release_empty(rpc, request->command_id, PB_CommandStatus_OK);
+}
+
 void* rpc_system_system_alloc(Rpc* rpc) {
 void* rpc_system_system_alloc(Rpc* rpc) {
     RpcHandler rpc_handler = {
     RpcHandler rpc_handler = {
         .message_handler = NULL,
         .message_handler = NULL,
@@ -182,5 +196,8 @@ void* rpc_system_system_alloc(Rpc* rpc) {
     rpc_handler.message_handler = rpc_system_system_set_datetime_process;
     rpc_handler.message_handler = rpc_system_system_set_datetime_process;
     rpc_add_handler(rpc, PB_Main_system_set_datetime_request_tag, &rpc_handler);
     rpc_add_handler(rpc, PB_Main_system_set_datetime_request_tag, &rpc_handler);
 
 
+    rpc_handler.message_handler = rpc_system_system_play_audiovisual_alert_process;
+    rpc_add_handler(rpc, PB_Main_system_play_audiovisual_alert_request_tag, &rpc_handler);
+
     return NULL;
     return NULL;
 }
 }

+ 5 - 1
assets/compiled/flipper.pb.h

@@ -95,6 +95,7 @@ typedef struct _PB_Main {
         PB_System_GetDateTimeRequest system_get_datetime_request;
         PB_System_GetDateTimeRequest system_get_datetime_request;
         PB_System_GetDateTimeResponse system_get_datetime_response;
         PB_System_GetDateTimeResponse system_get_datetime_response;
         PB_System_SetDateTimeRequest system_set_datetime_request;
         PB_System_SetDateTimeRequest system_set_datetime_request;
+        PB_System_PlayAudiovisualAlertRequest system_play_audiovisual_alert_request;
     } content; 
     } content; 
 } PB_Main;
 } PB_Main;
 
 
@@ -155,6 +156,7 @@ extern "C" {
 #define PB_Main_system_get_datetime_request_tag  35
 #define PB_Main_system_get_datetime_request_tag  35
 #define PB_Main_system_get_datetime_response_tag 36
 #define PB_Main_system_get_datetime_response_tag 36
 #define PB_Main_system_set_datetime_request_tag  37
 #define PB_Main_system_set_datetime_request_tag  37
+#define PB_Main_system_play_audiovisual_alert_request_tag 38
 
 
 /* Struct field encoding specification for nanopb */
 /* Struct field encoding specification for nanopb */
 #define PB_Empty_FIELDLIST(X, a) \
 #define PB_Empty_FIELDLIST(X, a) \
@@ -204,7 +206,8 @@ X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_device_info_response,content.
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_factory_reset_request,content.system_factory_reset_request),  34) \
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_factory_reset_request,content.system_factory_reset_request),  34) \
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_get_datetime_request,content.system_get_datetime_request),  35) \
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_get_datetime_request,content.system_get_datetime_request),  35) \
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_get_datetime_response,content.system_get_datetime_response),  36) \
 X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_get_datetime_response,content.system_get_datetime_response),  36) \
-X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_set_datetime_request,content.system_set_datetime_request),  37)
+X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_set_datetime_request,content.system_set_datetime_request),  37) \
+X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_play_audiovisual_alert_request,content.system_play_audiovisual_alert_request),  38)
 #define PB_Main_CALLBACK NULL
 #define PB_Main_CALLBACK NULL
 #define PB_Main_DEFAULT NULL
 #define PB_Main_DEFAULT NULL
 #define PB_Main_content_empty_MSGTYPE PB_Empty
 #define PB_Main_content_empty_MSGTYPE PB_Empty
@@ -241,6 +244,7 @@ X(a, STATIC,   ONEOF,    MSG_W_CB, (content,system_set_datetime_request,content.
 #define PB_Main_content_system_get_datetime_request_MSGTYPE PB_System_GetDateTimeRequest
 #define PB_Main_content_system_get_datetime_request_MSGTYPE PB_System_GetDateTimeRequest
 #define PB_Main_content_system_get_datetime_response_MSGTYPE PB_System_GetDateTimeResponse
 #define PB_Main_content_system_get_datetime_response_MSGTYPE PB_System_GetDateTimeResponse
 #define PB_Main_content_system_set_datetime_request_MSGTYPE PB_System_SetDateTimeRequest
 #define PB_Main_content_system_set_datetime_request_MSGTYPE PB_System_SetDateTimeRequest
+#define PB_Main_content_system_play_audiovisual_alert_request_MSGTYPE PB_System_PlayAudiovisualAlertRequest
 
 
 extern const pb_msgdesc_t PB_Empty_msg;
 extern const pb_msgdesc_t PB_Empty_msg;
 extern const pb_msgdesc_t PB_StopSession_msg;
 extern const pb_msgdesc_t PB_StopSession_msg;

+ 3 - 0
assets/compiled/system.pb.c

@@ -36,5 +36,8 @@ PB_BIND(PB_System_SetDateTimeRequest, PB_System_SetDateTimeRequest, AUTO)
 PB_BIND(PB_System_DateTime, PB_System_DateTime, AUTO)
 PB_BIND(PB_System_DateTime, PB_System_DateTime, AUTO)
 
 
 
 
+PB_BIND(PB_System_PlayAudiovisualAlertRequest, PB_System_PlayAudiovisualAlertRequest, AUTO)
+
+
 
 
 
 

+ 14 - 0
assets/compiled/system.pb.h

@@ -41,6 +41,10 @@ typedef struct _PB_System_PingResponse {
     pb_bytes_array_t *data; 
     pb_bytes_array_t *data; 
 } PB_System_PingResponse;
 } PB_System_PingResponse;
 
 
+typedef struct _PB_System_PlayAudiovisualAlertRequest { 
+    char dummy_field;
+} PB_System_PlayAudiovisualAlertRequest;
+
 typedef struct _PB_System_DateTime { 
 typedef struct _PB_System_DateTime { 
     /* Time */
     /* Time */
     uint8_t hour; /* *< Hour in 24H format: 0-23 */
     uint8_t hour; /* *< Hour in 24H format: 0-23 */
@@ -89,6 +93,7 @@ extern "C" {
 #define PB_System_GetDateTimeResponse_init_default {false, PB_System_DateTime_init_default}
 #define PB_System_GetDateTimeResponse_init_default {false, PB_System_DateTime_init_default}
 #define PB_System_SetDateTimeRequest_init_default {false, PB_System_DateTime_init_default}
 #define PB_System_SetDateTimeRequest_init_default {false, PB_System_DateTime_init_default}
 #define PB_System_DateTime_init_default          {0, 0, 0, 0, 0, 0, 0}
 #define PB_System_DateTime_init_default          {0, 0, 0, 0, 0, 0, 0}
+#define PB_System_PlayAudiovisualAlertRequest_init_default {0}
 #define PB_System_PingRequest_init_zero          {NULL}
 #define PB_System_PingRequest_init_zero          {NULL}
 #define PB_System_PingResponse_init_zero         {NULL}
 #define PB_System_PingResponse_init_zero         {NULL}
 #define PB_System_RebootRequest_init_zero        {_PB_System_RebootRequest_RebootMode_MIN}
 #define PB_System_RebootRequest_init_zero        {_PB_System_RebootRequest_RebootMode_MIN}
@@ -99,6 +104,7 @@ extern "C" {
 #define PB_System_GetDateTimeResponse_init_zero  {false, PB_System_DateTime_init_zero}
 #define PB_System_GetDateTimeResponse_init_zero  {false, PB_System_DateTime_init_zero}
 #define PB_System_SetDateTimeRequest_init_zero   {false, PB_System_DateTime_init_zero}
 #define PB_System_SetDateTimeRequest_init_zero   {false, PB_System_DateTime_init_zero}
 #define PB_System_DateTime_init_zero             {0, 0, 0, 0, 0, 0, 0}
 #define PB_System_DateTime_init_zero             {0, 0, 0, 0, 0, 0, 0}
+#define PB_System_PlayAudiovisualAlertRequest_init_zero {0}
 
 
 /* Field tags (for use in manual encoding/decoding) */
 /* Field tags (for use in manual encoding/decoding) */
 #define PB_System_DeviceInfoResponse_key_tag     1
 #define PB_System_DeviceInfoResponse_key_tag     1
@@ -176,6 +182,11 @@ X(a, STATIC,   SINGULAR, UINT32,   weekday,           7)
 #define PB_System_DateTime_CALLBACK NULL
 #define PB_System_DateTime_CALLBACK NULL
 #define PB_System_DateTime_DEFAULT NULL
 #define PB_System_DateTime_DEFAULT NULL
 
 
+#define PB_System_PlayAudiovisualAlertRequest_FIELDLIST(X, a) \
+
+#define PB_System_PlayAudiovisualAlertRequest_CALLBACK NULL
+#define PB_System_PlayAudiovisualAlertRequest_DEFAULT NULL
+
 extern const pb_msgdesc_t PB_System_PingRequest_msg;
 extern const pb_msgdesc_t PB_System_PingRequest_msg;
 extern const pb_msgdesc_t PB_System_PingResponse_msg;
 extern const pb_msgdesc_t PB_System_PingResponse_msg;
 extern const pb_msgdesc_t PB_System_RebootRequest_msg;
 extern const pb_msgdesc_t PB_System_RebootRequest_msg;
@@ -186,6 +197,7 @@ extern const pb_msgdesc_t PB_System_GetDateTimeRequest_msg;
 extern const pb_msgdesc_t PB_System_GetDateTimeResponse_msg;
 extern const pb_msgdesc_t PB_System_GetDateTimeResponse_msg;
 extern const pb_msgdesc_t PB_System_SetDateTimeRequest_msg;
 extern const pb_msgdesc_t PB_System_SetDateTimeRequest_msg;
 extern const pb_msgdesc_t PB_System_DateTime_msg;
 extern const pb_msgdesc_t PB_System_DateTime_msg;
+extern const pb_msgdesc_t PB_System_PlayAudiovisualAlertRequest_msg;
 
 
 /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
 /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
 #define PB_System_PingRequest_fields &PB_System_PingRequest_msg
 #define PB_System_PingRequest_fields &PB_System_PingRequest_msg
@@ -198,6 +210,7 @@ extern const pb_msgdesc_t PB_System_DateTime_msg;
 #define PB_System_GetDateTimeResponse_fields &PB_System_GetDateTimeResponse_msg
 #define PB_System_GetDateTimeResponse_fields &PB_System_GetDateTimeResponse_msg
 #define PB_System_SetDateTimeRequest_fields &PB_System_SetDateTimeRequest_msg
 #define PB_System_SetDateTimeRequest_fields &PB_System_SetDateTimeRequest_msg
 #define PB_System_DateTime_fields &PB_System_DateTime_msg
 #define PB_System_DateTime_fields &PB_System_DateTime_msg
+#define PB_System_PlayAudiovisualAlertRequest_fields &PB_System_PlayAudiovisualAlertRequest_msg
 
 
 /* Maximum encoded size of messages (where known) */
 /* Maximum encoded size of messages (where known) */
 /* PB_System_PingRequest_size depends on runtime parameters */
 /* PB_System_PingRequest_size depends on runtime parameters */
@@ -208,6 +221,7 @@ extern const pb_msgdesc_t PB_System_DateTime_msg;
 #define PB_System_FactoryResetRequest_size       0
 #define PB_System_FactoryResetRequest_size       0
 #define PB_System_GetDateTimeRequest_size        0
 #define PB_System_GetDateTimeRequest_size        0
 #define PB_System_GetDateTimeResponse_size       24
 #define PB_System_GetDateTimeResponse_size       24
+#define PB_System_PlayAudiovisualAlertRequest_size 0
 #define PB_System_RebootRequest_size             2
 #define PB_System_RebootRequest_size             2
 #define PB_System_SetDateTimeRequest_size        24
 #define PB_System_SetDateTimeRequest_size        24
 
 

+ 1 - 1
assets/protobuf

@@ -1 +1 @@
-Subproject commit f5365c36aa458eb344280560440d6e27232a5667
+Subproject commit 5409d34a29073f5b51acad1cb5c24663f4e625e2