 d511d76a1b
			
		
	
	
		d511d76a1b
		
			
		
	
	
	
	
		
			
			* Added new image DolphinSaved_113x58.png for all "saved" pages * New image DolphinDone_80x58.png added * Replaced dolphins on all scenes accroding to new UI specs * New success dolphin image added * Success scene image replaced * Changed image and text for update initial scene * Image and text adjusted for "Original restored" scene * Removed old DolphinNice_96x59.png image * New image for LFRFID scene * Removed unused image * New UI image added to assets * Replaced warning dolphin on mf_classic write initial fail scene * Removed old image * Changed image on scenes to a new one * New dolphin mafia image * Replaced dolphin mafia image to a new one * Removed DolphinMafia_115x62.png * New check symbol on completed state for detect_reader * Adjusted layout elements position * Removed second switching to popup view in order to achieve control in support callbacks In general now we show generic scene and after that in on_enter callback we can redefine it for particular protocol * CardDetected event now also triggers on_event callback * Now on AuthRequest we throw CardDetected custom event * Added callback for read_on_event * Now we show different screen while reading and unlocking * Fixed missing asstes for some scenes * Update DolphinMafia_119x62.png * Adjusted all the scenes with DolphinMafia image * Scenes with save image adjusted * Removed unnecessary assets DolphinMafia_119x62.png and DolphinSaved_113x58.png * All common dolphins moved to Dolphin folder * Moved DolphinReadingSuccess_59x63.png to Dolphin folder * Set proper led color for detect and read scenes * Added new notification sequence for semi_success results * Use new sequence for semi_success nfc reads * Different events are now throwed depending on read result * Added handling of incomplete event for ultralight cards * Replaced image for iButton scene * Updated API for f18 * Fixed issue with unlock retry sequence * Fix after review * Success notification replaced to semi success in case of incomplete mf classic reading * New text for read scene * New read result sound notification logic for mf classic cards Co-authored-by: あく <alleteam@gmail.com> Co-authored-by: gornekich <n.gorbadey@gmail.com>
		
			
				
	
	
		
			596 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			596 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <furi_hal_resources.h>
 | |
| #include "notification.h"
 | |
| #include "notification_messages_notes.h"
 | |
| #include <stddef.h>
 | |
| 
 | |
| /*********************************** Messages **********************************/
 | |
| 
 | |
| /** Display: backlight wakeup */
 | |
| const NotificationMessage message_display_backlight_on = {
 | |
|     .type = NotificationMessageTypeLedDisplayBacklight,
 | |
|     .data.led.value = 0xFF,
 | |
| };
 | |
| 
 | |
| /** Display: backlight force off */
 | |
| const NotificationMessage message_display_backlight_off = {
 | |
|     .type = NotificationMessageTypeLedDisplayBacklight,
 | |
|     .data.led.value = 0x00,
 | |
| };
 | |
| 
 | |
| /** Display: backlight always on */
 | |
| const NotificationMessage message_display_backlight_enforce_on = {
 | |
|     .type = NotificationMessageTypeLedDisplayBacklightEnforceOn,
 | |
|     .data.led.value = 0xFF,
 | |
| };
 | |
| 
 | |
| /** Display: automatic backlight management, with configured timeout */
 | |
| const NotificationMessage message_display_backlight_enforce_auto = {
 | |
|     .type = NotificationMessageTypeLedDisplayBacklightEnforceAuto,
 | |
|     .data.led.value = 0x00,
 | |
| };
 | |
| 
 | |
| // Led ON
 | |
| const NotificationMessage message_red_255 = {
 | |
|     .type = NotificationMessageTypeLedRed,
 | |
|     .data.led.value = 0xFF,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_green_255 = {
 | |
|     .type = NotificationMessageTypeLedGreen,
 | |
|     .data.led.value = 0xFF,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blue_255 = {
 | |
|     .type = NotificationMessageTypeLedBlue,
 | |
|     .data.led.value = 0xFF,
 | |
| };
 | |
| 
 | |
| // Led OFF
 | |
| const NotificationMessage message_red_0 = {
 | |
|     .type = NotificationMessageTypeLedRed,
 | |
|     .data.led.value = 0x00,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_green_0 = {
 | |
|     .type = NotificationMessageTypeLedGreen,
 | |
|     .data.led.value = 0x00,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blue_0 = {
 | |
|     .type = NotificationMessageTypeLedBlue,
 | |
|     .data.led.value = 0x00,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_start_10 = {
 | |
|     .type = NotificationMessageTypeLedBlinkStart,
 | |
|     .data.led_blink.color = 0,
 | |
|     .data.led_blink.on_time = 10,
 | |
|     .data.led_blink.period = 100,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_start_100 = {
 | |
|     .type = NotificationMessageTypeLedBlinkStart,
 | |
|     .data.led_blink.color = 0,
 | |
|     .data.led_blink.on_time = 100,
 | |
|     .data.led_blink.period = 1000,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_stop = {
 | |
|     .type = NotificationMessageTypeLedBlinkStop,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_red = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightRed,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_green = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightGreen,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_blue = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightBlue,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_cyan = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightBlue | LightGreen,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_magenta = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightBlue | LightRed,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_yellow = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightGreen | LightRed,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_blink_set_color_white = {
 | |
|     .type = NotificationMessageTypeLedBlinkColor,
 | |
|     .data.led_blink.color = LightRed | LightGreen | LightBlue,
 | |
| };
 | |
| 
 | |
| // Delay
 | |
| const NotificationMessage message_delay_1 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 1,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_10 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 10,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_25 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 25,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_50 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 50,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_100 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 100,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_250 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 250,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_500 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 500,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_delay_1000 = {
 | |
|     .type = NotificationMessageTypeDelay,
 | |
|     .data.delay.length = 1000,
 | |
| };
 | |
| 
 | |
| // Sound
 | |
| const NotificationMessage message_sound_off = {
 | |
|     .type = NotificationMessageTypeSoundOff,
 | |
| };
 | |
| 
 | |
| // Vibro
 | |
| const NotificationMessage message_vibro_on = {
 | |
|     .type = NotificationMessageTypeVibro,
 | |
|     .data.vibro.on = true,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_vibro_off = {
 | |
|     .type = NotificationMessageTypeVibro,
 | |
|     .data.vibro.on = false,
 | |
| };
 | |
| 
 | |
| // Reset
 | |
| const NotificationMessage message_do_not_reset = {
 | |
|     .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,
 | |
| };
 | |
| 
 | |
| const NotificationMessage message_lcd_contrast_update = {
 | |
|     .type = NotificationMessageTypeLcdContrastUpdate,
 | |
| };
 | |
| 
 | |
| /****************************** Message sequences ******************************/
 | |
| 
 | |
| // Reset
 | |
| const NotificationSequence sequence_reset_red = {
 | |
|     &message_red_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_green = {
 | |
|     &message_green_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_blue = {
 | |
|     &message_blue_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_rgb = {
 | |
|     &message_red_0,
 | |
|     &message_blue_0,
 | |
|     &message_green_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_display = {
 | |
|     &message_display_backlight_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_sound = {
 | |
|     &message_sound_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_reset_vibro = {
 | |
|     &message_vibro_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Vibro
 | |
| const NotificationSequence sequence_set_vibro_on = {
 | |
|     &message_vibro_on,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Display
 | |
| const NotificationSequence sequence_display_backlight_on = {
 | |
|     &message_display_backlight_on,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_display_backlight_off = {
 | |
|     &message_display_backlight_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| /** Display: backlight always on lock */
 | |
| const NotificationSequence sequence_display_backlight_enforce_on = {
 | |
|     &message_display_backlight_enforce_on,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| /** Display: backlight always on unlock */
 | |
| const NotificationSequence sequence_display_backlight_enforce_auto = {
 | |
|     &message_display_backlight_enforce_auto,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_display_backlight_off_delay_1000 = {
 | |
|     &message_delay_1000,
 | |
|     &message_display_backlight_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Charging
 | |
| const NotificationSequence sequence_charging = {
 | |
|     &message_red_255,
 | |
|     &message_green_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_charged = {
 | |
|     &message_green_255,
 | |
|     &message_red_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_not_charging = {
 | |
|     &message_red_0,
 | |
|     &message_green_0,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Light up
 | |
| const NotificationSequence sequence_set_only_red_255 = {
 | |
|     &message_red_255,
 | |
|     &message_green_0,
 | |
|     &message_blue_0,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_set_only_green_255 = {
 | |
|     &message_red_0,
 | |
|     &message_green_255,
 | |
|     &message_blue_0,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_set_only_blue_255 = {
 | |
|     &message_red_0,
 | |
|     &message_green_0,
 | |
|     &message_blue_255,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_set_red_255 = {
 | |
|     &message_red_255,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_set_green_255 = {
 | |
|     &message_green_255,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_set_blue_255 = {
 | |
|     &message_blue_255,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Solid colors
 | |
| const NotificationSequence sequence_solid_yellow = {
 | |
|     &message_red_255,
 | |
|     &message_green_255,
 | |
|     &message_blue_0,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Blink
 | |
| const NotificationSequence sequence_blink_blue_10 = {
 | |
|     &message_blue_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_red_10 = {
 | |
|     &message_red_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_green_10 = {
 | |
|     &message_green_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_yellow_10 = {
 | |
|     &message_red_255,
 | |
|     &message_green_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_cyan_10 = {
 | |
|     &message_green_255,
 | |
|     &message_blue_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_magenta_10 = {
 | |
|     &message_red_255,
 | |
|     &message_blue_255,
 | |
|     &message_delay_10,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_red_100 = {
 | |
|     &message_red_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_green_100 = {
 | |
|     &message_green_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_blue_100 = {
 | |
|     &message_blue_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_yellow_100 = {
 | |
|     &message_red_255,
 | |
|     &message_green_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_cyan_100 = {
 | |
|     &message_green_255,
 | |
|     &message_blue_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_magenta_100 = {
 | |
|     &message_red_255,
 | |
|     &message_blue_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_white_100 = {
 | |
|     &message_red_255,
 | |
|     &message_green_255,
 | |
|     &message_blue_255,
 | |
|     &message_delay_100,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| // Hardware blink
 | |
| const NotificationSequence sequence_blink_start_blue = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_blue,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_start_red = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_red,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_start_green = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_green,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_start_yellow = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_yellow,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_start_cyan = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_cyan,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_start_magenta = {
 | |
|     &message_blink_start_10,
 | |
|     &message_blink_set_color_magenta,
 | |
|     &message_do_not_reset,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_blink_stop = {
 | |
|     &message_blink_stop,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| //General
 | |
| const NotificationSequence sequence_single_vibro = {
 | |
|     &message_vibro_on,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_double_vibro = {
 | |
|     &message_vibro_on,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_off,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_on,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_success = {
 | |
|     &message_display_backlight_on,
 | |
|     &message_green_255,
 | |
|     &message_vibro_on,
 | |
|     &message_note_c5,
 | |
|     &message_delay_50,
 | |
|     &message_vibro_off,
 | |
|     &message_note_e5,
 | |
|     &message_delay_50,
 | |
|     &message_note_g5,
 | |
|     &message_delay_50,
 | |
|     &message_note_c6,
 | |
|     &message_delay_50,
 | |
|     &message_sound_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_semi_success = {
 | |
|     &message_display_backlight_on,
 | |
|     &message_green_255,
 | |
|     &message_vibro_on,
 | |
|     &message_note_c4,
 | |
|     &message_delay_50,
 | |
|     &message_note_e4,
 | |
|     &message_delay_50,
 | |
|     &message_note_g4,
 | |
|     &message_delay_50,
 | |
|     &message_sound_off,
 | |
|     &message_delay_50,
 | |
|     &message_note_c5,
 | |
|     &message_delay_50,
 | |
|     &message_sound_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_error = {
 | |
|     &message_display_backlight_on,
 | |
|     &message_red_255,
 | |
|     &message_vibro_on,
 | |
|     &message_note_c5,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_off,
 | |
|     &message_sound_off,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_on,
 | |
|     &message_note_c5,
 | |
|     &message_delay_100,
 | |
|     &message_vibro_off,
 | |
|     &message_sound_off,
 | |
|     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_backlight_on,
 | |
|     &message_note_c7,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_display_backlight_off,
 | |
|     &message_note_c4,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_display_backlight_on,
 | |
|     &message_note_c7,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_display_backlight_off,
 | |
|     &message_note_c4,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_display_backlight_on,
 | |
|     &message_note_c7,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_display_backlight_off,
 | |
|     &message_note_c4,
 | |
|     &message_delay_250,
 | |
| 
 | |
|     &message_sound_off,
 | |
|     &message_vibro_off,
 | |
|     NULL,
 | |
| };
 | |
| 
 | |
| const NotificationSequence sequence_lcd_contrast_update = {
 | |
|     &message_lcd_contrast_update,
 | |
|     NULL,
 | |
| };
 |