[FL-2279] IR doxygen, rename irda -> infrared (#1010)
* IR: Doxygen docs, some rename * Rename irda -> infrared * Rollback collateral renames Co-authored-by: あく <alleteam@gmail.com>
							
								
								
									
										2
									
								
								.github/CODEOWNERS
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -14,7 +14,7 @@ applications/gui/** @skotopes @DrZlo13 | |||||||
| applications/gui-test/** @skotopes @DrZlo13 | applications/gui-test/** @skotopes @DrZlo13 | ||||||
| applications/ibutton/** @skotopes @DrZlo13 | applications/ibutton/** @skotopes @DrZlo13 | ||||||
| applications/input/** @skotopes @DrZlo13 | applications/input/** @skotopes @DrZlo13 | ||||||
| applications/irda/** @skotopes @DrZlo13 @albkharisov | applications/infrared/** @skotopes @DrZlo13 | ||||||
| applications/lf-rfid/** @skotopes @DrZlo13 | applications/lf-rfid/** @skotopes @DrZlo13 | ||||||
| applications/menu/** @skotopes @DrZlo13 | applications/menu/** @skotopes @DrZlo13 | ||||||
| applications/music-player/** @skotopes @DrZlo13 | applications/music-player/** @skotopes @DrZlo13 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						| @ -13,7 +13,7 @@ PROJECT_SOURCE_DIRECTORIES := \ | |||||||
| 	$(PROJECT_ROOT)/lib/cyfral \
 | 	$(PROJECT_ROOT)/lib/cyfral \
 | ||||||
| 	$(PROJECT_ROOT)/lib/drivers \
 | 	$(PROJECT_ROOT)/lib/drivers \
 | ||||||
| 	$(PROJECT_ROOT)/lib/flipper_file \
 | 	$(PROJECT_ROOT)/lib/flipper_file \
 | ||||||
| 	$(PROJECT_ROOT)/lib/irda \
 | 	$(PROJECT_ROOT)/lib/infrared \
 | ||||||
| 	$(PROJECT_ROOT)/lib/nfc_protocols \
 | 	$(PROJECT_ROOT)/lib/nfc_protocols \
 | ||||||
| 	$(PROJECT_ROOT)/lib/ST25RFAL002 \
 | 	$(PROJECT_ROOT)/lib/ST25RFAL002 \
 | ||||||
| 	$(PROJECT_ROOT)/lib/onewire \
 | 	$(PROJECT_ROOT)/lib/onewire \
 | ||||||
|  | |||||||
| @ -15,8 +15,8 @@ | |||||||
| - `gui`                 - GUI service and API | - `gui`                 - GUI service and API | ||||||
| - `ibutton`             - iButton application, onewire keys and more | - `ibutton`             - iButton application, onewire keys and more | ||||||
| - `input`               - Input service | - `input`               - Input service | ||||||
| - `irda`                - Irda application, controls your IR devices | - `infrared`            - Infrared application, controls your IR devices | ||||||
| - `irda_monitor`        - Irda debug tool | - `infrared_monitor`    - Infrared debug tool | ||||||
| - `lfrfid`              - LF RFID application | - `lfrfid`              - LF RFID application | ||||||
| - `lfrfid_debug`        - LF RFID debug tool | - `lfrfid_debug`        - LF RFID debug tool | ||||||
| - `loader`              - Application loader service | - `loader`              - Application loader service | ||||||
|  | |||||||
| @ -27,8 +27,8 @@ extern int32_t delay_test_app(void* p); | |||||||
| extern int32_t display_test_app(void* p); | extern int32_t display_test_app(void* p); | ||||||
| extern int32_t gpio_app(void* p); | extern int32_t gpio_app(void* p); | ||||||
| extern int32_t ibutton_app(void* p); | extern int32_t ibutton_app(void* p); | ||||||
| extern int32_t irda_app(void* p); | extern int32_t infrared_app(void* p); | ||||||
| extern int32_t irda_monitor_app(void* p); | extern int32_t infrared_monitor_app(void* p); | ||||||
| extern int32_t keypad_test_app(void* p); | extern int32_t keypad_test_app(void* p); | ||||||
| extern int32_t lfrfid_app(void* p); | extern int32_t lfrfid_app(void* p); | ||||||
| extern int32_t lfrfid_debug_app(void* p); | extern int32_t lfrfid_debug_app(void* p); | ||||||
| @ -51,7 +51,7 @@ extern int32_t snake_game_app(void* p); | |||||||
| extern void bt_on_system_start(); | extern void bt_on_system_start(); | ||||||
| extern void crypto_on_system_start(); | extern void crypto_on_system_start(); | ||||||
| extern void ibutton_on_system_start(); | extern void ibutton_on_system_start(); | ||||||
| extern void irda_on_system_start(); | extern void infrared_on_system_start(); | ||||||
| extern void lfrfid_on_system_start(); | extern void lfrfid_on_system_start(); | ||||||
| extern void nfc_on_system_start(); | extern void nfc_on_system_start(); | ||||||
| extern void storage_on_system_start(); | extern void storage_on_system_start(); | ||||||
| @ -136,8 +136,8 @@ const FlipperApplication FLIPPER_APPS[] = { | |||||||
|     {.app = nfc_app, .name = "NFC", .stack_size = 4096, .icon = &A_NFC_14}, |     {.app = nfc_app, .name = "NFC", .stack_size = 4096, .icon = &A_NFC_14}, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef APP_IRDA | #ifdef APP_INFRARED | ||||||
|     {.app = irda_app, .name = "Infrared", .stack_size = 1024 * 3, .icon = &A_Infrared_14}, |     {.app = infrared_app, .name = "Infrared", .stack_size = 1024 * 3, .icon = &A_Infrared_14}, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef APP_GPIO | #ifdef APP_GPIO | ||||||
| @ -164,8 +164,8 @@ const size_t FLIPPER_APPS_COUNT = sizeof(FLIPPER_APPS) / sizeof(FlipperApplicati | |||||||
| const FlipperOnStartHook FLIPPER_ON_SYSTEM_START[] = { | const FlipperOnStartHook FLIPPER_ON_SYSTEM_START[] = { | ||||||
|     crypto_on_system_start, |     crypto_on_system_start, | ||||||
| 
 | 
 | ||||||
| #ifdef APP_IRDA | #ifdef APP_INFRARED | ||||||
|     irda_on_system_start, |     infrared_on_system_start, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef APP_NFC | #ifdef APP_NFC | ||||||
| @ -251,8 +251,8 @@ const FlipperApplication FLIPPER_DEBUG_APPS[] = { | |||||||
|     {.app = uart_echo_app, .name = "Uart Echo", .stack_size = 2048, .icon = NULL}, |     {.app = uart_echo_app, .name = "Uart Echo", .stack_size = 2048, .icon = NULL}, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef APP_IRDA_MONITOR | #ifdef APP_INFRARED_MONITOR | ||||||
|     {.app = irda_monitor_app, .name = "Irda Monitor", .stack_size = 1024, .icon = NULL}, |     {.app = infrared_monitor_app, .name = "Infrared Monitor", .stack_size = 1024, .icon = NULL}, | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef APP_SCENED | #ifdef APP_SCENED | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ SRV_DESKTOP	= 1 | |||||||
| APP_ARCHIVE	= 1 | APP_ARCHIVE	= 1 | ||||||
| APP_GPIO = 1 | APP_GPIO = 1 | ||||||
| APP_IBUTTON	= 1 | APP_IBUTTON	= 1 | ||||||
| APP_IRDA	= 1 | APP_INFRARED	= 1 | ||||||
| APP_LF_RFID	= 1 | APP_LF_RFID	= 1 | ||||||
| APP_NFC		= 1 | APP_NFC		= 1 | ||||||
| APP_SUBGHZ	= 1 | APP_SUBGHZ	= 1 | ||||||
| @ -40,7 +40,7 @@ APP_SNAKE_GAME = 1 | |||||||
| # Debug
 | # Debug
 | ||||||
| APP_ACCESSOR = 1 | APP_ACCESSOR = 1 | ||||||
| APP_BLINK = 1 | APP_BLINK = 1 | ||||||
| APP_IRDA_MONITOR = 1 | APP_INFRARED_MONITOR = 1 | ||||||
| APP_KEYPAD_TEST = 1 | APP_KEYPAD_TEST = 1 | ||||||
| APP_SD_TEST	= 1 | APP_SD_TEST	= 1 | ||||||
| APP_VIBRO_TEST = 1 | APP_VIBRO_TEST = 1 | ||||||
| @ -59,9 +59,9 @@ endif | |||||||
| # Prefix with APP_*
 | # Prefix with APP_*
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| APP_IRDA_MONITOR	?= 0 | APP_INFRARED_MONITOR	?= 0 | ||||||
| ifeq ($(APP_IRDA_MONITOR), 1) | ifeq ($(APP_INFRARED_MONITOR), 1) | ||||||
| CFLAGS		+= -DAPP_IRDA_MONITOR | CFLAGS		+= -DAPP_INFRARED_MONITOR | ||||||
| SRV_GUI		= 1 | SRV_GUI		= 1 | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| @ -122,9 +122,9 @@ SRV_GUI		= 1 | |||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| APP_IRDA ?= 0 | APP_INFRARED ?= 0 | ||||||
| ifeq ($(APP_IRDA), 1) | ifeq ($(APP_INFRARED), 1) | ||||||
| CFLAGS		+= -DAPP_IRDA | CFLAGS		+= -DAPP_INFRARED | ||||||
| SRV_GUI		= 1 | SRV_GUI		= 1 | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ static const char* tab_default_paths[] = { | |||||||
|     [ArchiveTabNFC] = "/any/nfc", |     [ArchiveTabNFC] = "/any/nfc", | ||||||
|     [ArchiveTabSubGhz] = "/any/subghz", |     [ArchiveTabSubGhz] = "/any/subghz", | ||||||
|     [ArchiveTabLFRFID] = "/any/lfrfid", |     [ArchiveTabLFRFID] = "/any/lfrfid", | ||||||
|     [ArchiveTabIrda] = "/any/irda", |     [ArchiveTabInfrared] = "/any/infrared", | ||||||
|     [ArchiveTabBadUsb] = "/any/badusb", |     [ArchiveTabBadUsb] = "/any/badusb", | ||||||
|     [ArchiveTabU2f] = "/app:u2f", |     [ArchiveTabU2f] = "/app:u2f", | ||||||
|     [ArchiveTabBrowser] = "/any", |     [ArchiveTabBrowser] = "/any", | ||||||
| @ -21,7 +21,7 @@ static const char* known_ext[] = { | |||||||
|     [ArchiveFileTypeNFC] = ".nfc", |     [ArchiveFileTypeNFC] = ".nfc", | ||||||
|     [ArchiveFileTypeSubGhz] = ".sub", |     [ArchiveFileTypeSubGhz] = ".sub", | ||||||
|     [ArchiveFileTypeLFRFID] = ".rfid", |     [ArchiveFileTypeLFRFID] = ".rfid", | ||||||
|     [ArchiveFileTypeIrda] = ".ir", |     [ArchiveFileTypeInfrared] = ".ir", | ||||||
|     [ArchiveFileTypeBadUsb] = ".txt", |     [ArchiveFileTypeBadUsb] = ".txt", | ||||||
|     [ArchiveFileTypeU2f] = "?", |     [ArchiveFileTypeU2f] = "?", | ||||||
|     [ArchiveFileTypeFolder] = "?", |     [ArchiveFileTypeFolder] = "?", | ||||||
| @ -34,7 +34,7 @@ static const ArchiveFileTypeEnum known_type[] = { | |||||||
|     [ArchiveTabNFC] = ArchiveFileTypeNFC, |     [ArchiveTabNFC] = ArchiveFileTypeNFC, | ||||||
|     [ArchiveTabSubGhz] = ArchiveFileTypeSubGhz, |     [ArchiveTabSubGhz] = ArchiveFileTypeSubGhz, | ||||||
|     [ArchiveTabLFRFID] = ArchiveFileTypeLFRFID, |     [ArchiveTabLFRFID] = ArchiveFileTypeLFRFID, | ||||||
|     [ArchiveTabIrda] = ArchiveFileTypeIrda, |     [ArchiveTabInfrared] = ArchiveFileTypeInfrared, | ||||||
|     [ArchiveTabBadUsb] = ArchiveFileTypeBadUsb, |     [ArchiveTabBadUsb] = ArchiveFileTypeBadUsb, | ||||||
|     [ArchiveTabU2f] = ArchiveFileTypeU2f, |     [ArchiveTabU2f] = ArchiveFileTypeU2f, | ||||||
|     [ArchiveTabBrowser] = ArchiveFileTypeUnknown, |     [ArchiveTabBrowser] = ArchiveFileTypeUnknown, | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ typedef enum { | |||||||
|     ArchiveFileTypeNFC, |     ArchiveFileTypeNFC, | ||||||
|     ArchiveFileTypeSubGhz, |     ArchiveFileTypeSubGhz, | ||||||
|     ArchiveFileTypeLFRFID, |     ArchiveFileTypeLFRFID, | ||||||
|     ArchiveFileTypeIrda, |     ArchiveFileTypeInfrared, | ||||||
|     ArchiveFileTypeBadUsb, |     ArchiveFileTypeBadUsb, | ||||||
|     ArchiveFileTypeU2f, |     ArchiveFileTypeU2f, | ||||||
|     ArchiveFileTypeFolder, |     ArchiveFileTypeFolder, | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ static const char* flipper_app_name[] = { | |||||||
|     [ArchiveFileTypeNFC] = "NFC", |     [ArchiveFileTypeNFC] = "NFC", | ||||||
|     [ArchiveFileTypeSubGhz] = "Sub-GHz", |     [ArchiveFileTypeSubGhz] = "Sub-GHz", | ||||||
|     [ArchiveFileTypeLFRFID] = "125 kHz RFID", |     [ArchiveFileTypeLFRFID] = "125 kHz RFID", | ||||||
|     [ArchiveFileTypeIrda] = "Infrared", |     [ArchiveFileTypeInfrared] = "Infrared", | ||||||
|     [ArchiveFileTypeBadUsb] = "Bad USB", |     [ArchiveFileTypeBadUsb] = "Bad USB", | ||||||
|     [ArchiveFileTypeU2f] = "U2F", |     [ArchiveFileTypeU2f] = "U2F", | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ static const char* ArchiveTabNames[] = { | |||||||
|     [ArchiveTabNFC] = "NFC", |     [ArchiveTabNFC] = "NFC", | ||||||
|     [ArchiveTabSubGhz] = "Sub-GHz", |     [ArchiveTabSubGhz] = "Sub-GHz", | ||||||
|     [ArchiveTabLFRFID] = "RFID LF", |     [ArchiveTabLFRFID] = "RFID LF", | ||||||
|     [ArchiveTabIrda] = "Infrared", |     [ArchiveTabInfrared] = "Infrared", | ||||||
|     [ArchiveTabBadUsb] = "Bad USB", |     [ArchiveTabBadUsb] = "Bad USB", | ||||||
|     [ArchiveTabU2f] = "U2F", |     [ArchiveTabU2f] = "U2F", | ||||||
|     [ArchiveTabBrowser] = "Browser"}; |     [ArchiveTabBrowser] = "Browser"}; | ||||||
| @ -19,7 +19,7 @@ static const Icon* ArchiveItemIcons[] = { | |||||||
|     [ArchiveFileTypeNFC] = &I_Nfc_10px, |     [ArchiveFileTypeNFC] = &I_Nfc_10px, | ||||||
|     [ArchiveFileTypeSubGhz] = &I_sub1_10px, |     [ArchiveFileTypeSubGhz] = &I_sub1_10px, | ||||||
|     [ArchiveFileTypeLFRFID] = &I_125_10px, |     [ArchiveFileTypeLFRFID] = &I_125_10px, | ||||||
|     [ArchiveFileTypeIrda] = &I_ir_10px, |     [ArchiveFileTypeInfrared] = &I_ir_10px, | ||||||
|     [ArchiveFileTypeBadUsb] = &I_badusb_10px, |     [ArchiveFileTypeBadUsb] = &I_badusb_10px, | ||||||
|     [ArchiveFileTypeU2f] = &I_u2f_10px, |     [ArchiveFileTypeU2f] = &I_u2f_10px, | ||||||
|     [ArchiveFileTypeFolder] = &I_dir_10px, |     [ArchiveFileTypeFolder] = &I_dir_10px, | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ typedef enum { | |||||||
|     ArchiveTabSubGhz, |     ArchiveTabSubGhz, | ||||||
|     ArchiveTabLFRFID, |     ArchiveTabLFRFID, | ||||||
|     ArchiveTabNFC, |     ArchiveTabNFC, | ||||||
|     ArchiveTabIrda, |     ArchiveTabInfrared, | ||||||
|     ArchiveTabIButton, |     ArchiveTabIButton, | ||||||
|     ArchiveTabBadUsb, |     ArchiveTabBadUsb, | ||||||
|     ArchiveTabU2f, |     ArchiveTabU2f, | ||||||
|  | |||||||
| @ -108,11 +108,11 @@ static void button_menu_view_draw_callback(Canvas* canvas, void* _model) { | |||||||
|     ButtonMenuItemArray_it_t it; |     ButtonMenuItemArray_it_t it; | ||||||
| 
 | 
 | ||||||
|     if(active_screen > 0) { |     if(active_screen > 0) { | ||||||
|         canvas_draw_icon(canvas, 28, 1, &I_IrdaArrowUp_4x8); |         canvas_draw_icon(canvas, 28, 1, &I_InfraredArrowUp_4x8); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(max_screen > active_screen) { |     if(max_screen > active_screen) { | ||||||
|         canvas_draw_icon(canvas, 28, 123, &I_IrdaArrowDown_4x8); |         canvas_draw_icon(canvas, 28, 123, &I_InfraredArrowDown_4x8); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(model->header) { |     if(model->header) { | ||||||
|  | |||||||
| @ -1,52 +1,52 @@ | |||||||
| #include <furi_hal_delay.h> | #include <furi_hal_delay.h> | ||||||
| #include <irda.h> | #include <infrared.h> | ||||||
| #include <app_template.h> | #include <app_template.h> | ||||||
| #include <cli/cli.h> | #include <cli/cli.h> | ||||||
| #include <cmsis_os2.h> | #include <cmsis_os2.h> | ||||||
| #include <irda_worker.h> | #include <infrared_worker.h> | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <furi_hal_irda.h> | #include <furi_hal_infrared.h> | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <string> | #include <string> | ||||||
| #include <m-string.h> | #include <m-string.h> | ||||||
| #include <irda_transmit.h> | #include <infrared_transmit.h> | ||||||
| #include <sys/types.h> | #include <sys/types.h> | ||||||
| #include "../helpers/irda_parser.h" | #include "../helpers/infrared_parser.h" | ||||||
| 
 | 
 | ||||||
| static void irda_cli_start_ir_rx(Cli* cli, string_t args); | static void infrared_cli_start_ir_rx(Cli* cli, string_t args); | ||||||
| static void irda_cli_start_ir_tx(Cli* cli, string_t args); | static void infrared_cli_start_ir_tx(Cli* cli, string_t args); | ||||||
| 
 | 
 | ||||||
| static const struct { | static const struct { | ||||||
|     const char* cmd; |     const char* cmd; | ||||||
|     void (*process_function)(Cli* cli, string_t args); |     void (*process_function)(Cli* cli, string_t args); | ||||||
| } irda_cli_commands[] = { | } infrared_cli_commands[] = { | ||||||
|     {.cmd = "rx", .process_function = irda_cli_start_ir_rx}, |     {.cmd = "rx", .process_function = infrared_cli_start_ir_rx}, | ||||||
|     {.cmd = "tx", .process_function = irda_cli_start_ir_tx}, |     {.cmd = "tx", .process_function = infrared_cli_start_ir_tx}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void signal_received_callback(void* context, IrdaWorkerSignal* received_signal) { | static void signal_received_callback(void* context, InfraredWorkerSignal* received_signal) { | ||||||
|     furi_assert(received_signal); |     furi_assert(received_signal); | ||||||
|     char buf[100]; |     char buf[100]; | ||||||
|     size_t buf_cnt; |     size_t buf_cnt; | ||||||
|     Cli* cli = (Cli*)context; |     Cli* cli = (Cli*)context; | ||||||
| 
 | 
 | ||||||
|     if(irda_worker_signal_is_decoded(received_signal)) { |     if(infrared_worker_signal_is_decoded(received_signal)) { | ||||||
|         const IrdaMessage* message = irda_worker_get_decoded_signal(received_signal); |         const InfraredMessage* message = infrared_worker_get_decoded_signal(received_signal); | ||||||
|         buf_cnt = sniprintf( |         buf_cnt = sniprintf( | ||||||
|             buf, |             buf, | ||||||
|             sizeof(buf), |             sizeof(buf), | ||||||
|             "%s, A:0x%0*lX, C:0x%0*lX%s\r\n", |             "%s, A:0x%0*lX, C:0x%0*lX%s\r\n", | ||||||
|             irda_get_protocol_name(message->protocol), |             infrared_get_protocol_name(message->protocol), | ||||||
|             ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4), |             ROUND_UP_TO(infrared_get_protocol_address_length(message->protocol), 4), | ||||||
|             message->address, |             message->address, | ||||||
|             ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4), |             ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4), | ||||||
|             message->command, |             message->command, | ||||||
|             message->repeat ? " R" : ""); |             message->repeat ? " R" : ""); | ||||||
|         cli_write(cli, (uint8_t*)buf, buf_cnt); |         cli_write(cli, (uint8_t*)buf, buf_cnt); | ||||||
|     } else { |     } else { | ||||||
|         const uint32_t* timings; |         const uint32_t* timings; | ||||||
|         size_t timings_cnt; |         size_t timings_cnt; | ||||||
|         irda_worker_get_raw_signal(received_signal, &timings, &timings_cnt); |         infrared_worker_get_raw_signal(received_signal, &timings, &timings_cnt); | ||||||
| 
 | 
 | ||||||
|         buf_cnt = sniprintf(buf, sizeof(buf), "RAW, %d samples:\r\n", timings_cnt); |         buf_cnt = sniprintf(buf, sizeof(buf), "RAW, %d samples:\r\n", timings_cnt); | ||||||
|         cli_write(cli, (uint8_t*)buf, buf_cnt); |         cli_write(cli, (uint8_t*)buf, buf_cnt); | ||||||
| @ -59,39 +59,39 @@ static void signal_received_callback(void* context, IrdaWorkerSignal* received_s | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void irda_cli_start_ir_rx(Cli* cli, string_t args) { | static void infrared_cli_start_ir_rx(Cli* cli, string_t args) { | ||||||
|     IrdaWorker* worker = irda_worker_alloc(); |     InfraredWorker* worker = infrared_worker_alloc(); | ||||||
|     irda_worker_rx_start(worker); |     infrared_worker_rx_start(worker); | ||||||
|     irda_worker_rx_set_received_signal_callback(worker, signal_received_callback, cli); |     infrared_worker_rx_set_received_signal_callback(worker, signal_received_callback, cli); | ||||||
| 
 | 
 | ||||||
|     printf("Receiving IRDA...\r\nPress Ctrl+C to abort\r\n"); |     printf("Receiving INFRARED...\r\nPress Ctrl+C to abort\r\n"); | ||||||
|     while(!cli_cmd_interrupt_received(cli)) { |     while(!cli_cmd_interrupt_received(cli)) { | ||||||
|         delay(50); |         delay(50); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     irda_worker_rx_stop(worker); |     infrared_worker_rx_stop(worker); | ||||||
|     irda_worker_free(worker); |     infrared_worker_free(worker); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void irda_cli_print_usage(void) { | static void infrared_cli_print_usage(void) { | ||||||
|     printf("Usage:\r\n"); |     printf("Usage:\r\n"); | ||||||
|     printf("\tir rx\r\n"); |     printf("\tir rx\r\n"); | ||||||
|     printf("\tir tx <protocol> <address> <command>\r\n"); |     printf("\tir tx <protocol> <address> <command>\r\n"); | ||||||
|     printf("\t<command> and <address> are hex-formatted\r\n"); |     printf("\t<command> and <address> are hex-formatted\r\n"); | ||||||
|     printf("\tAvailable protocols:"); |     printf("\tAvailable protocols:"); | ||||||
|     for(int i = 0; irda_is_protocol_valid((IrdaProtocol)i); ++i) { |     for(int i = 0; infrared_is_protocol_valid((InfraredProtocol)i); ++i) { | ||||||
|         printf(" %s", irda_get_protocol_name((IrdaProtocol)i)); |         printf(" %s", infrared_get_protocol_name((InfraredProtocol)i)); | ||||||
|     } |     } | ||||||
|     printf("\r\n"); |     printf("\r\n"); | ||||||
|     printf("\tRaw format:\r\n"); |     printf("\tRaw format:\r\n"); | ||||||
|     printf("\tir_tx RAW F:<frequency> DC:<duty_cycle> <sample0> <sample1>...\r\n"); |     printf("\tir_tx RAW F:<frequency> DC:<duty_cycle> <sample0> <sample1>...\r\n"); | ||||||
|     printf( |     printf( | ||||||
|         "\tFrequency (%d - %d), Duty cycle (0 - 100), max 512 samples\r\n", |         "\tFrequency (%d - %d), Duty cycle (0 - 100), max 512 samples\r\n", | ||||||
|         IRDA_MIN_FREQUENCY, |         INFRARED_MIN_FREQUENCY, | ||||||
|         IRDA_MAX_FREQUENCY); |         INFRARED_MAX_FREQUENCY); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static bool parse_message(const char* str, IrdaMessage* message) { | static bool parse_message(const char* str, InfraredMessage* message) { | ||||||
|     char protocol_name[32]; |     char protocol_name[32]; | ||||||
|     int parsed = sscanf(str, "%31s %lX %lX", protocol_name, &message->address, &message->command); |     int parsed = sscanf(str, "%31s %lX %lX", protocol_name, &message->address, &message->command); | ||||||
| 
 | 
 | ||||||
| @ -99,10 +99,10 @@ static bool parse_message(const char* str, IrdaMessage* message) { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     message->protocol = irda_get_protocol_by_name(protocol_name); |     message->protocol = infrared_get_protocol_by_name(protocol_name); | ||||||
|     message->repeat = false; |     message->repeat = false; | ||||||
| 
 | 
 | ||||||
|     return irda_parser_is_parsed_signal_valid(message); |     return infrared_parser_is_parsed_signal_valid(message); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static bool parse_signal_raw( | static bool parse_signal_raw( | ||||||
| @ -136,11 +136,11 @@ static bool parse_signal_raw( | |||||||
|         ++*timings_cnt; |         ++*timings_cnt; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return irda_parser_is_raw_signal_valid(*frequency, *duty_cycle, *timings_cnt); |     return infrared_parser_is_raw_signal_valid(*frequency, *duty_cycle, *timings_cnt); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void irda_cli_start_ir_tx(Cli* cli, string_t args) { | static void infrared_cli_start_ir_tx(Cli* cli, string_t args) { | ||||||
|     IrdaMessage message; |     InfraredMessage message; | ||||||
|     const char* str = string_get_cstr(args); |     const char* str = string_get_cstr(args); | ||||||
|     uint32_t frequency; |     uint32_t frequency; | ||||||
|     float duty_cycle; |     float duty_cycle; | ||||||
| @ -148,27 +148,27 @@ static void irda_cli_start_ir_tx(Cli* cli, string_t args) { | |||||||
|     uint32_t* timings = (uint32_t*)malloc(sizeof(uint32_t) * timings_cnt); |     uint32_t* timings = (uint32_t*)malloc(sizeof(uint32_t) * timings_cnt); | ||||||
| 
 | 
 | ||||||
|     if(parse_message(str, &message)) { |     if(parse_message(str, &message)) { | ||||||
|         irda_send(&message, 1); |         infrared_send(&message, 1); | ||||||
|     } else if(parse_signal_raw(str, timings, &timings_cnt, &duty_cycle, &frequency)) { |     } else if(parse_signal_raw(str, timings, &timings_cnt, &duty_cycle, &frequency)) { | ||||||
|         irda_send_raw_ext(timings, timings_cnt, true, frequency, duty_cycle); |         infrared_send_raw_ext(timings, timings_cnt, true, frequency, duty_cycle); | ||||||
|     } else { |     } else { | ||||||
|         printf("Wrong arguments.\r\n"); |         printf("Wrong arguments.\r\n"); | ||||||
|         irda_cli_print_usage(); |         infrared_cli_print_usage(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     free(timings); |     free(timings); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void irda_cli_start_ir(Cli* cli, string_t args, void* context) { | static void infrared_cli_start_ir(Cli* cli, string_t args, void* context) { | ||||||
|     if(furi_hal_irda_is_busy()) { |     if(furi_hal_infrared_is_busy()) { | ||||||
|         printf("IRDA is busy. Exit."); |         printf("INFRARED is busy. Exit."); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     size_t i = 0; |     size_t i = 0; | ||||||
|     for(; i < COUNT_OF(irda_cli_commands); ++i) { |     for(; i < COUNT_OF(infrared_cli_commands); ++i) { | ||||||
|         size_t size = strlen(irda_cli_commands[i].cmd); |         size_t size = strlen(infrared_cli_commands[i].cmd); | ||||||
|         bool cmd_found = !strncmp(string_get_cstr(args), irda_cli_commands[i].cmd, size); |         bool cmd_found = !strncmp(string_get_cstr(args), infrared_cli_commands[i].cmd, size); | ||||||
|         if(cmd_found) { |         if(cmd_found) { | ||||||
|             if(string_size(args) == size) { |             if(string_size(args) == size) { | ||||||
|                 break; |                 break; | ||||||
| @ -180,17 +180,17 @@ static void irda_cli_start_ir(Cli* cli, string_t args, void* context) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(i < COUNT_OF(irda_cli_commands)) { |     if(i < COUNT_OF(infrared_cli_commands)) { | ||||||
|         irda_cli_commands[i].process_function(cli, args); |         infrared_cli_commands[i].process_function(cli, args); | ||||||
|     } else { |     } else { | ||||||
|         irda_cli_print_usage(); |         infrared_cli_print_usage(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| extern "C" void irda_on_system_start() { | extern "C" void infrared_on_system_start() { | ||||||
| #ifdef SRV_CLI | #ifdef SRV_CLI | ||||||
|     Cli* cli = (Cli*)furi_record_open("cli"); |     Cli* cli = (Cli*)furi_record_open("cli"); | ||||||
|     cli_add_command(cli, "ir", CliCommandFlagDefault, irda_cli_start_ir, NULL); |     cli_add_command(cli, "ir", CliCommandFlagDefault, infrared_cli_start_ir, NULL); | ||||||
|     furi_record_close("cli"); |     furi_record_close("cli"); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| @ -1,19 +1,19 @@ | |||||||
| 
 | 
 | ||||||
| #include "../irda_app_signal.h" | #include "../infrared_app_signal.h" | ||||||
| #include "irda.h" | #include "infrared.h" | ||||||
| #include "irda/helpers/irda_parser.h" | #include "infrared/helpers/infrared_parser.h" | ||||||
| #include "irda_worker.h" | #include "infrared_worker.h" | ||||||
| #include "m-string.h" | #include "m-string.h" | ||||||
| #include <flipper_format/flipper_format.h> | #include <flipper_format/flipper_format.h> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <furi_hal_irda.h> | #include <furi_hal_infrared.h> | ||||||
| 
 | 
 | ||||||
| #define TAG "IrdaParser" | #define TAG "InfraredParser" | ||||||
| 
 | 
 | ||||||
| bool irda_parser_save_signal( | bool infrared_parser_save_signal( | ||||||
|     FlipperFormat* ff, |     FlipperFormat* ff, | ||||||
|     const IrdaAppSignal& signal, |     const InfraredAppSignal& signal, | ||||||
|     const std::string& name) { |     const std::string& name) { | ||||||
|     furi_assert(ff); |     furi_assert(ff); | ||||||
|     furi_assert(!name.empty()); |     furi_assert(!name.empty()); | ||||||
| @ -33,7 +33,7 @@ bool irda_parser_save_signal( | |||||||
|                 break; |                 break; | ||||||
|         } else { |         } else { | ||||||
|             auto parsed_signal = signal.get_message(); |             auto parsed_signal = signal.get_message(); | ||||||
|             const char* protocol_name = irda_get_protocol_name(parsed_signal.protocol); |             const char* protocol_name = infrared_get_protocol_name(parsed_signal.protocol); | ||||||
|             if(!flipper_format_write_string_cstr(ff, "type", "parsed")) break; |             if(!flipper_format_write_string_cstr(ff, "type", "parsed")) break; | ||||||
|             if(!flipper_format_write_string_cstr(ff, "protocol", protocol_name)) break; |             if(!flipper_format_write_string_cstr(ff, "protocol", protocol_name)) break; | ||||||
|             if(!flipper_format_write_hex(ff, "address", (uint8_t*)&parsed_signal.address, 4)) |             if(!flipper_format_write_hex(ff, "address", (uint8_t*)&parsed_signal.address, 4)) | ||||||
| @ -47,7 +47,7 @@ bool irda_parser_save_signal( | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool irda_parser_read_signal(FlipperFormat* ff, IrdaAppSignal& signal, std::string& name) { | bool infrared_parser_read_signal(FlipperFormat* ff, InfraredAppSignal& signal, std::string& name) { | ||||||
|     furi_assert(ff); |     furi_assert(ff); | ||||||
| 
 | 
 | ||||||
|     bool result = false; |     bool result = false; | ||||||
| @ -75,12 +75,12 @@ bool irda_parser_read_signal(FlipperFormat* ff, IrdaAppSignal& signal, std::stri | |||||||
|             } |             } | ||||||
|             free(timings); |             free(timings); | ||||||
|         } else if(!string_cmp_str(read_string, "parsed")) { |         } else if(!string_cmp_str(read_string, "parsed")) { | ||||||
|             IrdaMessage parsed_signal; |             InfraredMessage parsed_signal; | ||||||
|             if(!flipper_format_read_string(ff, "protocol", read_string)) break; |             if(!flipper_format_read_string(ff, "protocol", read_string)) break; | ||||||
|             parsed_signal.protocol = irda_get_protocol_by_name(string_get_cstr(read_string)); |             parsed_signal.protocol = infrared_get_protocol_by_name(string_get_cstr(read_string)); | ||||||
|             if(!flipper_format_read_hex(ff, "address", (uint8_t*)&parsed_signal.address, 4)) break; |             if(!flipper_format_read_hex(ff, "address", (uint8_t*)&parsed_signal.address, 4)) break; | ||||||
|             if(!flipper_format_read_hex(ff, "command", (uint8_t*)&parsed_signal.command, 4)) break; |             if(!flipper_format_read_hex(ff, "command", (uint8_t*)&parsed_signal.command, 4)) break; | ||||||
|             if(!irda_parser_is_parsed_signal_valid(&parsed_signal)) break; |             if(!infrared_parser_is_parsed_signal_valid(&parsed_signal)) break; | ||||||
|             signal.set_message(&parsed_signal); |             signal.set_message(&parsed_signal); | ||||||
|             result = true; |             result = true; | ||||||
|         } else { |         } else { | ||||||
| @ -92,17 +92,17 @@ bool irda_parser_read_signal(FlipperFormat* ff, IrdaAppSignal& signal, std::stri | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool irda_parser_is_parsed_signal_valid(const IrdaMessage* signal) { | bool infrared_parser_is_parsed_signal_valid(const InfraredMessage* signal) { | ||||||
|     furi_assert(signal); |     furi_assert(signal); | ||||||
|     bool result = true; |     bool result = true; | ||||||
| 
 | 
 | ||||||
|     if(!irda_is_protocol_valid(signal->protocol)) { |     if(!infrared_is_protocol_valid(signal->protocol)) { | ||||||
|         FURI_LOG_E(TAG, "Unknown protocol"); |         FURI_LOG_E(TAG, "Unknown protocol"); | ||||||
|         result = false; |         result = false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(result) { |     if(result) { | ||||||
|         uint32_t address_length = irda_get_protocol_address_length(signal->protocol); |         uint32_t address_length = infrared_get_protocol_address_length(signal->protocol); | ||||||
|         uint32_t address_mask = (1LU << address_length) - 1; |         uint32_t address_mask = (1LU << address_length) - 1; | ||||||
|         if(signal->address != (signal->address & address_mask)) { |         if(signal->address != (signal->address & address_mask)) { | ||||||
|             FURI_LOG_E( |             FURI_LOG_E( | ||||||
| @ -115,7 +115,7 @@ bool irda_parser_is_parsed_signal_valid(const IrdaMessage* signal) { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(result) { |     if(result) { | ||||||
|         uint32_t command_length = irda_get_protocol_command_length(signal->protocol); |         uint32_t command_length = infrared_get_protocol_command_length(signal->protocol); | ||||||
|         uint32_t command_mask = (1LU << command_length) - 1; |         uint32_t command_mask = (1LU << command_length) - 1; | ||||||
|         if(signal->command != (signal->command & command_mask)) { |         if(signal->command != (signal->command & command_mask)) { | ||||||
|             FURI_LOG_E( |             FURI_LOG_E( | ||||||
| @ -130,15 +130,18 @@ bool irda_parser_is_parsed_signal_valid(const IrdaMessage* signal) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool irda_parser_is_raw_signal_valid(uint32_t frequency, float duty_cycle, uint32_t timings_cnt) { | bool infrared_parser_is_raw_signal_valid( | ||||||
|  |     uint32_t frequency, | ||||||
|  |     float duty_cycle, | ||||||
|  |     uint32_t timings_cnt) { | ||||||
|     bool result = true; |     bool result = true; | ||||||
| 
 | 
 | ||||||
|     if((frequency > IRDA_MAX_FREQUENCY) || (frequency < IRDA_MIN_FREQUENCY)) { |     if((frequency > INFRARED_MAX_FREQUENCY) || (frequency < INFRARED_MIN_FREQUENCY)) { | ||||||
|         FURI_LOG_E( |         FURI_LOG_E( | ||||||
|             TAG, |             TAG, | ||||||
|             "Frequency is out of range (%lX - %lX): %lX", |             "Frequency is out of range (%lX - %lX): %lX", | ||||||
|             IRDA_MIN_FREQUENCY, |             INFRARED_MIN_FREQUENCY, | ||||||
|             IRDA_MAX_FREQUENCY, |             INFRARED_MAX_FREQUENCY, | ||||||
|             frequency); |             frequency); | ||||||
|         result = false; |         result = false; | ||||||
|     } else if((duty_cycle <= 0) || (duty_cycle > 1)) { |     } else if((duty_cycle <= 0) || (duty_cycle > 1)) { | ||||||
							
								
								
									
										48
									
								
								applications/infrared/helpers/infrared_parser.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,48 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_parser.h | ||||||
|  |   * Infrared: Helper file for conversion Flipper File Format | ||||||
|  |   *     to Infrared signal class, and backwards | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "../infrared_app_signal.h" | ||||||
|  | #include <flipper_format/flipper_format.h> | ||||||
|  | #include <string> | ||||||
|  | 
 | ||||||
|  | /** Save Infrared signal into file
 | ||||||
|  |  * | ||||||
|  |  * @param ff - Flipper File Format instance | ||||||
|  |  * @param signal - Infrared signal to save | ||||||
|  |  * @param name - name for saved signal. Every | ||||||
|  |  *      signal on disk has name. | ||||||
|  |  */ | ||||||
|  | bool infrared_parser_save_signal( | ||||||
|  |     FlipperFormat* ff, | ||||||
|  |     const InfraredAppSignal& signal, | ||||||
|  |     const std::string& name); | ||||||
|  | 
 | ||||||
|  | /** Read Infrared signal from file
 | ||||||
|  |  * | ||||||
|  |  * @param ff - Flipper File Format instance | ||||||
|  |  * @param signal - Infrared signal to read to | ||||||
|  |  * @param name - name for saved signal. Every | ||||||
|  |  *      signal in file has name. | ||||||
|  |  */ | ||||||
|  | bool infrared_parser_read_signal(FlipperFormat* ff, InfraredAppSignal& signal, std::string& name); | ||||||
|  | 
 | ||||||
|  | /** Validate parsed signal
 | ||||||
|  |  * | ||||||
|  |  * @signal - signal to validate | ||||||
|  |  * @retval true if valid, false otherwise | ||||||
|  |  */ | ||||||
|  | bool infrared_parser_is_parsed_signal_valid(const InfraredMessage* signal); | ||||||
|  | 
 | ||||||
|  | /** Validate raw signal
 | ||||||
|  |  * | ||||||
|  |  * @signal - signal to validate | ||||||
|  |  * @retval true if valid, false otherwise | ||||||
|  |  */ | ||||||
|  | bool infrared_parser_is_raw_signal_valid( | ||||||
|  |     uint32_t frequency, | ||||||
|  |     float duty_cycle, | ||||||
|  |     uint32_t timings_cnt); | ||||||
| @ -1,13 +1,13 @@ | |||||||
| #include "irda_app.h" | #include "infrared_app.h" | ||||||
| #include <irda_worker.h> | #include <infrared_worker.h> | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <gui/gui.h> | #include <gui/gui.h> | ||||||
| #include <input/input.h> | #include <input/input.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <callback-connector.h> | #include <callback-connector.h> | ||||||
| 
 | 
 | ||||||
| int32_t IrdaApp::run(void* args) { | int32_t InfraredApp::run(void* args) { | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
|     bool consumed; |     bool consumed; | ||||||
|     bool exit = false; |     bool exit = false; | ||||||
| 
 | 
 | ||||||
| @ -17,7 +17,7 @@ int32_t IrdaApp::run(void* args) { | |||||||
|         remote_name.erase(remote_name.find_last_of('.')); |         remote_name.erase(remote_name.find_last_of('.')); | ||||||
|         bool result = remote_manager.load(remote_name); |         bool result = remote_manager.load(remote_name); | ||||||
|         if(result) { |         if(result) { | ||||||
|             current_scene = IrdaApp::Scene::Remote; |             current_scene = InfraredApp::Scene::Remote; | ||||||
|         } else { |         } else { | ||||||
|             printf("Failed to load remote \'%s\'\r\n", remote_name.c_str()); |             printf("Failed to load remote \'%s\'\r\n", remote_name.c_str()); | ||||||
|             return -1; |             return -1; | ||||||
| @ -29,12 +29,12 @@ int32_t IrdaApp::run(void* args) { | |||||||
|     while(!exit) { |     while(!exit) { | ||||||
|         view_manager.receive_event(&event); |         view_manager.receive_event(&event); | ||||||
| 
 | 
 | ||||||
|         if(event.type == IrdaAppEvent::Type::Exit) break; |         if(event.type == InfraredAppEvent::Type::Exit) break; | ||||||
| 
 | 
 | ||||||
|         consumed = scenes[current_scene]->on_event(this, &event); |         consumed = scenes[current_scene]->on_event(this, &event); | ||||||
| 
 | 
 | ||||||
|         if(!consumed) { |         if(!consumed) { | ||||||
|             if(event.type == IrdaAppEvent::Type::Back) { |             if(event.type == InfraredAppEvent::Type::Back) { | ||||||
|                 exit = switch_to_previous_scene(); |                 exit = switch_to_previous_scene(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -45,36 +45,36 @@ int32_t IrdaApp::run(void* args) { | |||||||
|     return 0; |     return 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| IrdaApp::IrdaApp() { | InfraredApp::InfraredApp() { | ||||||
|     furi_check(IrdaAppRemoteManager::max_button_name_length < get_text_store_size()); |     furi_check(InfraredAppRemoteManager::max_button_name_length < get_text_store_size()); | ||||||
|     notification = static_cast<NotificationApp*>(furi_record_open("notification")); |     notification = static_cast<NotificationApp*>(furi_record_open("notification")); | ||||||
|     irda_worker = irda_worker_alloc(); |     infrared_worker = infrared_worker_alloc(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaApp::~IrdaApp() { | InfraredApp::~InfraredApp() { | ||||||
|     irda_worker_free(irda_worker); |     infrared_worker_free(infrared_worker); | ||||||
|     furi_record_close("notification"); |     furi_record_close("notification"); | ||||||
|     for(auto& [key, scene] : scenes) delete scene; |     for(auto& [key, scene] : scenes) delete scene; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppViewManager* IrdaApp::get_view_manager() { | InfraredAppViewManager* InfraredApp::get_view_manager() { | ||||||
|     return &view_manager; |     return &view_manager; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_learn_new_remote(bool value) { | void InfraredApp::set_learn_new_remote(bool value) { | ||||||
|     learn_new_remote = value; |     learn_new_remote = value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaApp::get_learn_new_remote() { | bool InfraredApp::get_learn_new_remote() { | ||||||
|     return learn_new_remote; |     return learn_new_remote; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::switch_to_next_scene(Scene next_scene) { | void InfraredApp::switch_to_next_scene(Scene next_scene) { | ||||||
|     previous_scenes_list.push_front(current_scene); |     previous_scenes_list.push_front(current_scene); | ||||||
|     switch_to_next_scene_without_saving(next_scene); |     switch_to_next_scene_without_saving(next_scene); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::switch_to_next_scene_without_saving(Scene next_scene) { | void InfraredApp::switch_to_next_scene_without_saving(Scene next_scene) { | ||||||
|     if(next_scene != Scene::Exit) { |     if(next_scene != Scene::Exit) { | ||||||
|         scenes[current_scene]->on_exit(this); |         scenes[current_scene]->on_exit(this); | ||||||
|         current_scene = next_scene; |         current_scene = next_scene; | ||||||
| @ -83,7 +83,8 @@ void IrdaApp::switch_to_next_scene_without_saving(Scene next_scene) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list) { | void InfraredApp::search_and_switch_to_previous_scene( | ||||||
|  |     const std::initializer_list<Scene>& scenes_list) { | ||||||
|     Scene previous_scene = Scene::Start; |     Scene previous_scene = Scene::Start; | ||||||
|     bool scene_found = false; |     bool scene_found = false; | ||||||
| 
 | 
 | ||||||
| @ -101,8 +102,8 @@ void IrdaApp::search_and_switch_to_previous_scene(const std::initializer_list<Sc | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(previous_scene == Scene::Exit) { |     if(previous_scene == Scene::Exit) { | ||||||
|         IrdaAppEvent event; |         InfraredAppEvent event; | ||||||
|         event.type = IrdaAppEvent::Type::Exit; |         event.type = InfraredAppEvent::Type::Exit; | ||||||
|         view_manager.send_event(&event); |         view_manager.send_event(&event); | ||||||
|     } else { |     } else { | ||||||
|         scenes[current_scene]->on_exit(this); |         scenes[current_scene]->on_exit(this); | ||||||
| @ -112,7 +113,7 @@ void IrdaApp::search_and_switch_to_previous_scene(const std::initializer_list<Sc | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaApp::switch_to_previous_scene(uint8_t count) { | bool InfraredApp::switch_to_previous_scene(uint8_t count) { | ||||||
|     Scene previous_scene = Scene::Start; |     Scene previous_scene = Scene::Start; | ||||||
| 
 | 
 | ||||||
|     for(uint8_t i = 0; i < count; i++) previous_scene = get_previous_scene(); |     for(uint8_t i = 0; i < count; i++) previous_scene = get_previous_scene(); | ||||||
| @ -126,7 +127,7 @@ bool IrdaApp::switch_to_previous_scene(uint8_t count) { | |||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaApp::Scene IrdaApp::get_previous_scene() { | InfraredApp::Scene InfraredApp::get_previous_scene() { | ||||||
|     Scene scene = Scene::Exit; |     Scene scene = Scene::Exit; | ||||||
| 
 | 
 | ||||||
|     if(!previous_scenes_list.empty()) { |     if(!previous_scenes_list.empty()) { | ||||||
| @ -137,11 +138,11 @@ IrdaApp::Scene IrdaApp::get_previous_scene() { | |||||||
|     return scene; |     return scene; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppRemoteManager* IrdaApp::get_remote_manager() { | InfraredAppRemoteManager* InfraredApp::get_remote_manager() { | ||||||
|     return &remote_manager; |     return &remote_manager; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_text_store(uint8_t index, const char* text...) { | void InfraredApp::set_text_store(uint8_t index, const char* text...) { | ||||||
|     furi_check(index < text_store_max); |     furi_check(index < text_store_max); | ||||||
| 
 | 
 | ||||||
|     va_list args; |     va_list args; | ||||||
| @ -152,77 +153,63 @@ void IrdaApp::set_text_store(uint8_t index, const char* text...) { | |||||||
|     va_end(args); |     va_end(args); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| char* IrdaApp::get_text_store(uint8_t index) { | char* InfraredApp::get_text_store(uint8_t index) { | ||||||
|     furi_check(index < text_store_max); |     furi_check(index < text_store_max); | ||||||
| 
 | 
 | ||||||
|     return text_store[index]; |     return text_store[index]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint8_t IrdaApp::get_text_store_size() { | uint8_t InfraredApp::get_text_store_size() { | ||||||
|     return text_store_size; |     return text_store_size; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::text_input_callback(void* context) { | void InfraredApp::text_input_callback(void* context) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
|     event.type = IrdaAppEvent::Type::TextEditDone; |     event.type = InfraredAppEvent::Type::TextEditDone; | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::popup_callback(void* context) { | void InfraredApp::popup_callback(void* context) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
|     event.type = IrdaAppEvent::Type::PopupTimer; |     event.type = InfraredAppEvent::Type::PopupTimer; | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_edit_element(IrdaApp::EditElement value) { | void InfraredApp::set_edit_element(InfraredApp::EditElement value) { | ||||||
|     element = value; |     element = value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaApp::EditElement IrdaApp::get_edit_element(void) { | InfraredApp::EditElement InfraredApp::get_edit_element(void) { | ||||||
|     return element; |     return element; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_edit_action(IrdaApp::EditAction value) { | void InfraredApp::set_edit_action(InfraredApp::EditAction value) { | ||||||
|     action = value; |     action = value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaApp::EditAction IrdaApp::get_edit_action(void) { | InfraredApp::EditAction InfraredApp::get_edit_action(void) { | ||||||
|     return action; |     return action; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_current_button(int value) { | void InfraredApp::set_current_button(int value) { | ||||||
|     current_button = value; |     current_button = value; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int IrdaApp::get_current_button() { | int InfraredApp::get_current_button() { | ||||||
|     return current_button; |     return current_button; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_success() { | void InfraredApp::notify_success() { | ||||||
|     notification_message(notification, &sequence_success); |     notification_message(notification, &sequence_success); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_red_blink() { | void InfraredApp::notify_red_blink() { | ||||||
|     notification_message(notification, &sequence_blink_red_10); |     notification_message(notification, &sequence_blink_red_10); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_sent_just_learnt() { | void InfraredApp::notify_click() { | ||||||
|     static const NotificationSequence sequence = { |  | ||||||
|         &message_green_0, |  | ||||||
|         &message_vibro_on, |  | ||||||
|         &message_delay_50, |  | ||||||
|         &message_vibro_off, |  | ||||||
|         &message_green_255, |  | ||||||
|         &message_do_not_reset, |  | ||||||
|         NULL, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     notification_message_block(notification, &sequence); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaApp::notify_click() { |  | ||||||
|     static const NotificationSequence sequence = { |     static const NotificationSequence sequence = { | ||||||
|         &message_click, |         &message_click, | ||||||
|         &message_delay_1, |         &message_delay_1, | ||||||
| @ -233,7 +220,7 @@ void IrdaApp::notify_click() { | |||||||
|     notification_message_block(notification, &sequence); |     notification_message_block(notification, &sequence); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_click_and_green_blink() { | void InfraredApp::notify_click_and_green_blink() { | ||||||
|     static const NotificationSequence sequence = { |     static const NotificationSequence sequence = { | ||||||
|         &message_click, |         &message_click, | ||||||
|         &message_delay_1, |         &message_delay_1, | ||||||
| @ -248,7 +235,7 @@ void IrdaApp::notify_click_and_green_blink() { | |||||||
|     notification_message_block(notification, &sequence); |     notification_message_block(notification, &sequence); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_blink_green() { | void InfraredApp::notify_blink_green() { | ||||||
|     static const NotificationSequence sequence = { |     static const NotificationSequence sequence = { | ||||||
|         &message_green_255, |         &message_green_255, | ||||||
|         &message_delay_10, |         &message_delay_10, | ||||||
| @ -260,27 +247,27 @@ void IrdaApp::notify_blink_green() { | |||||||
|     notification_message(notification, &sequence); |     notification_message(notification, &sequence); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_green_on() { | void InfraredApp::notify_green_on() { | ||||||
|     notification_message(notification, &sequence_set_only_green_255); |     notification_message(notification, &sequence_set_only_green_255); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::notify_green_off() { | void InfraredApp::notify_green_off() { | ||||||
|     notification_message(notification, &sequence_reset_green); |     notification_message(notification, &sequence_reset_green); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaWorker* IrdaApp::get_irda_worker() { | InfraredWorker* InfraredApp::get_infrared_worker() { | ||||||
|     return irda_worker; |     return infrared_worker; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const IrdaAppSignal& IrdaApp::get_received_signal() const { | const InfraredAppSignal& InfraredApp::get_received_signal() const { | ||||||
|     return received_signal; |     return received_signal; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::set_received_signal(const IrdaAppSignal& signal) { | void InfraredApp::set_received_signal(const InfraredAppSignal& signal) { | ||||||
|     received_signal = signal; |     received_signal = signal; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaApp::signal_sent_callback(void* context) { | void InfraredApp::signal_sent_callback(void* context) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     app->notify_blink_green(); |     app->notify_blink_green(); | ||||||
| } | } | ||||||
							
								
								
									
										322
									
								
								applications/infrared/infrared_app.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,322 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app.h | ||||||
|  |   * Infrared: Main infrared application class | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | #include <map> | ||||||
|  | #include <infrared.h> | ||||||
|  | #include <furi.h> | ||||||
|  | #include <forward_list> | ||||||
|  | #include <stdint.h> | ||||||
|  | #include <notification/notification_messages.h> | ||||||
|  | #include <infrared_worker.h> | ||||||
|  | 
 | ||||||
|  | #include "scene/infrared_app_scene.h" | ||||||
|  | #include "scene/infrared_app_scene.h" | ||||||
|  | #include "infrared_app_view_manager.h" | ||||||
|  | #include "infrared_app_remote_manager.h" | ||||||
|  | #include "infrared_app_view_manager.h" | ||||||
|  | 
 | ||||||
|  | /** Main Infrared application class */ | ||||||
|  | class InfraredApp { | ||||||
|  | public: | ||||||
|  |     /** Enum to save scene state: edit element */ | ||||||
|  |     enum class EditElement : uint8_t { | ||||||
|  |         Button, | ||||||
|  |         Remote, | ||||||
|  |     }; | ||||||
|  |     /** Enum to save scene state: edit action */ | ||||||
|  |     enum class EditAction : uint8_t { | ||||||
|  |         Rename, | ||||||
|  |         Delete, | ||||||
|  |     }; | ||||||
|  |     /** List of scenes for Infrared application */ | ||||||
|  |     enum class Scene : uint8_t { | ||||||
|  |         Exit, | ||||||
|  |         Start, | ||||||
|  |         Universal, | ||||||
|  |         UniversalTV, | ||||||
|  |         UniversalAudio, | ||||||
|  |         UniversalAirConditioner, | ||||||
|  |         Learn, | ||||||
|  |         LearnSuccess, | ||||||
|  |         LearnEnterName, | ||||||
|  |         LearnDone, | ||||||
|  |         AskBack, | ||||||
|  |         Remote, | ||||||
|  |         RemoteList, | ||||||
|  |         Edit, | ||||||
|  |         EditKeySelect, | ||||||
|  |         EditRename, | ||||||
|  |         EditDelete, | ||||||
|  |         EditRenameDone, | ||||||
|  |         EditDeleteDone, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     /** Start application
 | ||||||
|  |  * | ||||||
|  |  * @param args - application arguments. | ||||||
|  |  *      Allowed argument is path to remote file. | ||||||
|  |  * @retval 0 on success, error code otherwise | ||||||
|  |  */ | ||||||
|  |     int32_t run(void* args); | ||||||
|  | 
 | ||||||
|  |     /** Switch to next scene. Put current scene number on stack.
 | ||||||
|  |  * Doesn't save scene state. | ||||||
|  |  * | ||||||
|  |  * @param index - next scene index | ||||||
|  |  */ | ||||||
|  |     void switch_to_next_scene(Scene index); | ||||||
|  | 
 | ||||||
|  |     /** Switch to next scene, but don't put current scene on
 | ||||||
|  |  * stack. Thus calling switch_to_previous_scene() doesn't return | ||||||
|  |  * to current scene. | ||||||
|  |  * | ||||||
|  |  * @param index - next scene index | ||||||
|  |  */ | ||||||
|  |     void switch_to_next_scene_without_saving(Scene index); | ||||||
|  | 
 | ||||||
|  |     /** Switch to previous scene. Pop scenes from stack and switch to last one.
 | ||||||
|  |  * | ||||||
|  |  * @param count - how many scenes should be popped | ||||||
|  |  * @retval false on failed, true on success | ||||||
|  |  */ | ||||||
|  |     bool switch_to_previous_scene(uint8_t count = 1); | ||||||
|  | 
 | ||||||
|  |     /** Get previous scene in scene stack
 | ||||||
|  |  * | ||||||
|  |  * @retval previous scene | ||||||
|  |  */ | ||||||
|  |     Scene get_previous_scene(); | ||||||
|  | 
 | ||||||
|  |     /** Get view manager instance
 | ||||||
|  |  * | ||||||
|  |  * @retval view manager instance | ||||||
|  |  */ | ||||||
|  |     InfraredAppViewManager* get_view_manager(); | ||||||
|  | 
 | ||||||
|  |     /** Set one of text stores
 | ||||||
|  |  * | ||||||
|  |  * @param index - index of text store | ||||||
|  |  * @param text - text to set | ||||||
|  |  */ | ||||||
|  |     void set_text_store(uint8_t index, const char* text...); | ||||||
|  | 
 | ||||||
|  |     /** Get value in text store
 | ||||||
|  |  * | ||||||
|  |  * @param index - index of text store | ||||||
|  |  * @retval value in text_store | ||||||
|  |  */ | ||||||
|  |     char* get_text_store(uint8_t index); | ||||||
|  | 
 | ||||||
|  |     /** Get text store size
 | ||||||
|  |  * | ||||||
|  |  * @retval size of text store | ||||||
|  |  */ | ||||||
|  |     uint8_t get_text_store_size(); | ||||||
|  | 
 | ||||||
|  |     /** Get remote manager instance
 | ||||||
|  |  * | ||||||
|  |  * @retval remote manager instance | ||||||
|  |  */ | ||||||
|  |     InfraredAppRemoteManager* get_remote_manager(); | ||||||
|  | 
 | ||||||
|  |     /** Get infrared worker instance
 | ||||||
|  |  * | ||||||
|  |  * @retval infrared worker instance | ||||||
|  |  */ | ||||||
|  |     InfraredWorker* get_infrared_worker(); | ||||||
|  | 
 | ||||||
|  |     /** Get signal, previously got on Learn scene
 | ||||||
|  |  * | ||||||
|  |  * @retval received signal | ||||||
|  |  */ | ||||||
|  |     const InfraredAppSignal& get_received_signal() const; | ||||||
|  | 
 | ||||||
|  |     /** Set received signal
 | ||||||
|  |  * | ||||||
|  |  * @param signal - signal | ||||||
|  |  */ | ||||||
|  |     void set_received_signal(const InfraredAppSignal& signal); | ||||||
|  | 
 | ||||||
|  |     /** Switch to previous scene in one of provided in list.
 | ||||||
|  |  * Pop scene stack, and find first scene from list. | ||||||
|  |  * | ||||||
|  |  * @param scenes_list - list of scenes | ||||||
|  |  */ | ||||||
|  |     void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list); | ||||||
|  | 
 | ||||||
|  |     /** Set edit element value. It is used on edit scene to determine
 | ||||||
|  |  * what should be deleted - remote or button. | ||||||
|  |  * | ||||||
|  |  * @param value - value to set | ||||||
|  |  */ | ||||||
|  |     void set_edit_element(EditElement value); | ||||||
|  | 
 | ||||||
|  |     /** Get edit element
 | ||||||
|  |  * | ||||||
|  |  * @retval edit element value | ||||||
|  |  */ | ||||||
|  |     EditElement get_edit_element(void); | ||||||
|  | 
 | ||||||
|  |     /** Set edit action value. It is used on edit scene to determine
 | ||||||
|  |  * what action to perform - deletion or renaming. | ||||||
|  |  * | ||||||
|  |  * @param value - value to set | ||||||
|  |  */ | ||||||
|  |     void set_edit_action(EditAction value); | ||||||
|  | 
 | ||||||
|  |     /** Get edit action
 | ||||||
|  |  * | ||||||
|  |  * @retval edit action value | ||||||
|  |  */ | ||||||
|  |     EditAction get_edit_action(void); | ||||||
|  | 
 | ||||||
|  |     /** Get state of learning new signal.
 | ||||||
|  |  * Adding new remote with 1 button from start scene and | ||||||
|  |  * learning 1 additional button to remote have very similar | ||||||
|  |  * flow, so they are joined. Difference in flow is handled | ||||||
|  |  * by this boolean flag. | ||||||
|  |  * | ||||||
|  |  * @retval false if flow is in learning new remote, true if | ||||||
|  |  *      adding signal to created remote | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |     bool get_learn_new_remote(); | ||||||
|  | 
 | ||||||
|  |     /** Set state of learning new signal.
 | ||||||
|  |  * Adding new remote with 1 button from start scene and | ||||||
|  |  * learning 1 additional button to remote have very similar | ||||||
|  |  * flow, so they are joined. Difference in flow is handled | ||||||
|  |  * by this boolean flag. | ||||||
|  |  * | ||||||
|  |  * @param value - false if flow is in learning new remote, true if | ||||||
|  |  *      adding signal to created remote | ||||||
|  |  */ | ||||||
|  |     void set_learn_new_remote(bool value); | ||||||
|  | 
 | ||||||
|  |     /** Button is not assigned value
 | ||||||
|  |  */ | ||||||
|  |     enum : int { | ||||||
|  |         ButtonNA = -1, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     /** Get current button index
 | ||||||
|  |  * | ||||||
|  |  * @retval current button index | ||||||
|  |  */ | ||||||
|  |     int get_current_button(); | ||||||
|  | 
 | ||||||
|  |     /** Set current button index
 | ||||||
|  |  * | ||||||
|  |  * @param current button index | ||||||
|  |  */ | ||||||
|  |     void set_current_button(int value); | ||||||
|  | 
 | ||||||
|  |     /** Play success notification */ | ||||||
|  |     void notify_success(); | ||||||
|  |     /** Play red blink notification */ | ||||||
|  |     void notify_red_blink(); | ||||||
|  |     /** Light green */ | ||||||
|  |     void notify_green_on(); | ||||||
|  |     /** Disable green light */ | ||||||
|  |     void notify_green_off(); | ||||||
|  |     /** Play click sound */ | ||||||
|  |     void notify_click(); | ||||||
|  |     /** Play click and green notification */ | ||||||
|  |     void notify_click_and_green_blink(); | ||||||
|  |     /** Blink green light */ | ||||||
|  |     void notify_blink_green(); | ||||||
|  | 
 | ||||||
|  |     /** Text input callback
 | ||||||
|  |  * | ||||||
|  |  * @param context - context to pass to callback | ||||||
|  |  */ | ||||||
|  |     static void text_input_callback(void* context); | ||||||
|  | 
 | ||||||
|  |     /** Popup callback
 | ||||||
|  |  * | ||||||
|  |  * @param context - context to pass to callback | ||||||
|  |  */ | ||||||
|  |     static void popup_callback(void* context); | ||||||
|  | 
 | ||||||
|  |     /** Signal sent callback
 | ||||||
|  |  * | ||||||
|  |  * @param context - context to pass to callback | ||||||
|  |  */ | ||||||
|  |     static void signal_sent_callback(void* context); | ||||||
|  | 
 | ||||||
|  |     /** Main class constructor, initializes all critical objects */ | ||||||
|  |     InfraredApp(); | ||||||
|  |     /** Main class destructor, deinitializes all critical objects */ | ||||||
|  |     ~InfraredApp(); | ||||||
|  | 
 | ||||||
|  |     /** Path to Infrared directory */ | ||||||
|  |     static constexpr const char* infrared_directory = "/any/infrared"; | ||||||
|  |     /** Infrared files extension (remote files and universal databases) */ | ||||||
|  |     static constexpr const char* infrared_extension = ".ir"; | ||||||
|  |     /** Max Raw timings in signal */ | ||||||
|  |     static constexpr const uint32_t max_raw_timings_in_signal = 512; | ||||||
|  |     /** Max line length in Infrared file */ | ||||||
|  |     static constexpr const uint32_t max_line_length = | ||||||
|  |         (9 + 1) * InfraredApp::max_raw_timings_in_signal + 100; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Text store size */ | ||||||
|  |     static constexpr const uint8_t text_store_size = 128; | ||||||
|  |     /** Amount of text stores */ | ||||||
|  |     static constexpr const uint8_t text_store_max = 2; | ||||||
|  |     /** Store text here, for some views, because they doesn't
 | ||||||
|  |  * hold ownership of text */ | ||||||
|  |     char text_store[text_store_max][text_store_size + 1]; | ||||||
|  |     /**
 | ||||||
|  |  * Flag to control adding new signal flow. | ||||||
|  |  * Adding new remote with 1 button from start scene and | ||||||
|  |  * learning 1 additional button to remote have very similar | ||||||
|  |  * flow, so they are joined. Difference in flow is handled | ||||||
|  |  * by this boolean flag. | ||||||
|  |  */ | ||||||
|  |     bool learn_new_remote; | ||||||
|  |     /** Value to control edit scene */ | ||||||
|  |     EditElement element; | ||||||
|  |     /** Value to control edit scene */ | ||||||
|  |     EditAction action; | ||||||
|  |     /** Selected button index */ | ||||||
|  |     uint32_t current_button; | ||||||
|  | 
 | ||||||
|  |     /** Notification instance */ | ||||||
|  |     NotificationApp* notification; | ||||||
|  |     /** View manager instance */ | ||||||
|  |     InfraredAppViewManager view_manager; | ||||||
|  |     /** Remote manager instance */ | ||||||
|  |     InfraredAppRemoteManager remote_manager; | ||||||
|  |     /** Infrared worker instance */ | ||||||
|  |     InfraredWorker* infrared_worker; | ||||||
|  |     /** Signal received on Learn scene */ | ||||||
|  |     InfraredAppSignal received_signal; | ||||||
|  | 
 | ||||||
|  |     /** Stack of previous scenes */ | ||||||
|  |     std::forward_list<Scene> previous_scenes_list; | ||||||
|  |     /** Now acting scene */ | ||||||
|  |     Scene current_scene = Scene::Start; | ||||||
|  | 
 | ||||||
|  |     /** Map of index/scene objects */ | ||||||
|  |     std::map<Scene, InfraredAppScene*> scenes = { | ||||||
|  |         {Scene::Start, new InfraredAppSceneStart()}, | ||||||
|  |         {Scene::Universal, new InfraredAppSceneUniversal()}, | ||||||
|  |         {Scene::UniversalTV, new InfraredAppSceneUniversalTV()}, | ||||||
|  |         {Scene::Learn, new InfraredAppSceneLearn()}, | ||||||
|  |         {Scene::LearnSuccess, new InfraredAppSceneLearnSuccess()}, | ||||||
|  |         {Scene::LearnEnterName, new InfraredAppSceneLearnEnterName()}, | ||||||
|  |         {Scene::LearnDone, new InfraredAppSceneLearnDone()}, | ||||||
|  |         {Scene::AskBack, new InfraredAppSceneAskBack()}, | ||||||
|  |         {Scene::Remote, new InfraredAppSceneRemote()}, | ||||||
|  |         {Scene::RemoteList, new InfraredAppSceneRemoteList()}, | ||||||
|  |         {Scene::Edit, new InfraredAppSceneEdit()}, | ||||||
|  |         {Scene::EditKeySelect, new InfraredAppSceneEditKeySelect()}, | ||||||
|  |         {Scene::EditRename, new InfraredAppSceneEditRename()}, | ||||||
|  |         {Scene::EditDelete, new InfraredAppSceneEditDelete()}, | ||||||
|  |         {Scene::EditRenameDone, new InfraredAppSceneEditRenameDone()}, | ||||||
|  |         {Scene::EditDeleteDone, new InfraredAppSceneEditDeleteDone()}, | ||||||
|  |     }; | ||||||
|  | }; | ||||||
| @ -1,18 +1,18 @@ | |||||||
| 
 | 
 | ||||||
| #include "helpers/irda_parser.h" | #include "helpers/infrared_parser.h" | ||||||
| #include "irda_app_brute_force.h" | #include "infrared_app_brute_force.h" | ||||||
| #include "irda_app_signal.h" | #include "infrared_app_signal.h" | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <m-string.h> | #include <m-string.h> | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <file_worker_cpp.h> | #include <file_worker_cpp.h> | ||||||
| 
 | 
 | ||||||
| void IrdaAppBruteForce::add_record(int index, const char* name) { | void InfraredAppBruteForce::add_record(int index, const char* name) { | ||||||
|     records[name].index = index; |     records[name].index = index; | ||||||
|     records[name].amount = 0; |     records[name].amount = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppBruteForce::calculate_messages() { | bool InfraredAppBruteForce::calculate_messages() { | ||||||
|     bool result = false; |     bool result = false; | ||||||
| 
 | 
 | ||||||
|     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); |     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); | ||||||
| @ -20,7 +20,7 @@ bool IrdaAppBruteForce::calculate_messages() { | |||||||
|     result = flipper_format_file_open_existing(ff, universal_db_filename); |     result = flipper_format_file_open_existing(ff, universal_db_filename); | ||||||
| 
 | 
 | ||||||
|     if(result) { |     if(result) { | ||||||
|         IrdaAppSignal signal; |         InfraredAppSignal signal; | ||||||
| 
 | 
 | ||||||
|         string_t signal_name; |         string_t signal_name; | ||||||
|         string_init(signal_name); |         string_init(signal_name); | ||||||
| @ -38,7 +38,7 @@ bool IrdaAppBruteForce::calculate_messages() { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppBruteForce::stop_bruteforce() { | void InfraredAppBruteForce::stop_bruteforce() { | ||||||
|     furi_assert((current_record.size())); |     furi_assert((current_record.size())); | ||||||
| 
 | 
 | ||||||
|     if(current_record.size()) { |     if(current_record.size()) { | ||||||
| @ -49,15 +49,15 @@ void IrdaAppBruteForce::stop_bruteforce() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppBruteForce::send_next_bruteforce(void) { | bool InfraredAppBruteForce::send_next_bruteforce(void) { | ||||||
|     furi_assert(current_record.size()); |     furi_assert(current_record.size()); | ||||||
|     furi_assert(ff); |     furi_assert(ff); | ||||||
| 
 | 
 | ||||||
|     IrdaAppSignal signal; |     InfraredAppSignal signal; | ||||||
|     std::string signal_name; |     std::string signal_name; | ||||||
|     bool result = false; |     bool result = false; | ||||||
|     do { |     do { | ||||||
|         result = irda_parser_read_signal(ff, signal, signal_name); |         result = infrared_parser_read_signal(ff, signal, signal_name); | ||||||
|     } while(result && current_record.compare(signal_name)); |     } while(result && current_record.compare(signal_name)); | ||||||
| 
 | 
 | ||||||
|     if(result) { |     if(result) { | ||||||
| @ -66,7 +66,7 @@ bool IrdaAppBruteForce::send_next_bruteforce(void) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppBruteForce::start_bruteforce(int index, int& record_amount) { | bool InfraredAppBruteForce::start_bruteforce(int index, int& record_amount) { | ||||||
|     bool result = false; |     bool result = false; | ||||||
|     record_amount = 0; |     record_amount = 0; | ||||||
| 
 | 
 | ||||||
							
								
								
									
										67
									
								
								applications/infrared/infrared_app_brute_force.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,67 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app_brute_force.h | ||||||
|  |   * Infrared: Brute Force class description | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <unordered_map> | ||||||
|  | #include <memory> | ||||||
|  | #include <flipper_format/flipper_format.h> | ||||||
|  | 
 | ||||||
|  | /** Class handles brute force mechanic */ | ||||||
|  | class InfraredAppBruteForce { | ||||||
|  |     /** Universal database filename */ | ||||||
|  |     const char* universal_db_filename; | ||||||
|  | 
 | ||||||
|  |     /** Current record name (POWER, MUTE, VOL+, etc).
 | ||||||
|  |      * This is the name of signal to brute force. */ | ||||||
|  |     std::string current_record; | ||||||
|  | 
 | ||||||
|  |     /** Flipper File Format instance */ | ||||||
|  |     FlipperFormat* ff; | ||||||
|  | 
 | ||||||
|  |     /** Data about every record - index in button panel view
 | ||||||
|  |      * and amount of signals, which is need for correct | ||||||
|  |      * progress bar displaying. */ | ||||||
|  |     typedef struct { | ||||||
|  |         /** Index of record in button panel view model */ | ||||||
|  |         int index; | ||||||
|  |         /** Amount of signals of that type (POWER, MUTE, etc) */ | ||||||
|  |         int amount; | ||||||
|  |     } Record; | ||||||
|  | 
 | ||||||
|  |     /** Container to hold Record info.
 | ||||||
|  |      * 'key' is record name, because we have to search by both, index and name, | ||||||
|  |      * but index search has place once per button press, and should not be | ||||||
|  |      * noticed, but name search should occur during entering universal menu, | ||||||
|  |      * and will go through container for every record in file, that's why | ||||||
|  |      * more critical to have faster search by record name. | ||||||
|  |      */ | ||||||
|  |     std::unordered_map<std::string, Record> records; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     /** Calculate messages. Walk through the file ('universal_db_name')
 | ||||||
|  |      * and calculate amount of records of certain type. */ | ||||||
|  |     bool calculate_messages(); | ||||||
|  | 
 | ||||||
|  |     /** Start brute force */ | ||||||
|  |     bool start_bruteforce(int index, int& record_amount); | ||||||
|  | 
 | ||||||
|  |     /** Stop brute force */ | ||||||
|  |     void stop_bruteforce(); | ||||||
|  | 
 | ||||||
|  |     /** Send next signal during brute force */ | ||||||
|  |     bool send_next_bruteforce(); | ||||||
|  | 
 | ||||||
|  |     /** Add record to container of records */ | ||||||
|  |     void add_record(int index, const char* name); | ||||||
|  | 
 | ||||||
|  |     /** Initialize class, set db file */ | ||||||
|  |     InfraredAppBruteForce(const char* filename) | ||||||
|  |         : universal_db_filename(filename) { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Deinitialize class */ | ||||||
|  |     ~InfraredAppBruteForce() { | ||||||
|  |     } | ||||||
|  | }; | ||||||
							
								
								
									
										47
									
								
								applications/infrared/infrared_app_event.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,47 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app_event.h | ||||||
|  |   * Infrared: Scene events description | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | #include <infrared.h> | ||||||
|  | #include <gui/modules/dialog_ex.h> | ||||||
|  | 
 | ||||||
|  | /** Infrared events class */ | ||||||
|  | class InfraredAppEvent { | ||||||
|  | public: | ||||||
|  |     /** Type of event enum */ | ||||||
|  |     enum class Type : uint8_t { | ||||||
|  |         /** Tick event come after no other events came in 100 ms */ | ||||||
|  |         Tick, | ||||||
|  |         /** Exit application event */ | ||||||
|  |         Exit, | ||||||
|  |         /** Back event */ | ||||||
|  |         Back, | ||||||
|  |         /** Menu selected event type. Provided with payload value. */ | ||||||
|  |         MenuSelected, | ||||||
|  |         /** Button press event. Need for continuous signal sending. */ | ||||||
|  |         MenuSelectedPress, | ||||||
|  |         /** Button release event. Need for continuous signal sending. */ | ||||||
|  |         MenuSelectedRelease, | ||||||
|  |         /** Events from DialogEx view module */ | ||||||
|  |         DialogExSelected, | ||||||
|  |         /** Infrared signal received event */ | ||||||
|  |         InfraredMessageReceived, | ||||||
|  |         /** Text edit done event */ | ||||||
|  |         TextEditDone, | ||||||
|  |         /** Popup timer finished event */ | ||||||
|  |         PopupTimer, | ||||||
|  |         /** Button panel pressed event */ | ||||||
|  |         ButtonPanelPressed, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     union { | ||||||
|  |         /** Menu selected event type payload. Selected index. */ | ||||||
|  |         int32_t menu_index; | ||||||
|  |         /** DialogEx view module event type payload */ | ||||||
|  |         DialogExResult dialog_ex_result; | ||||||
|  |     } payload; | ||||||
|  | 
 | ||||||
|  |     /** Type of event */ | ||||||
|  |     Type type; | ||||||
|  | }; | ||||||
| @ -1,25 +1,26 @@ | |||||||
| #include <file_worker_cpp.h> | #include <file_worker_cpp.h> | ||||||
| #include <flipper_format/flipper_format.h> | #include <flipper_format/flipper_format.h> | ||||||
| #include "irda_app_remote_manager.h" | #include "infrared_app_remote_manager.h" | ||||||
| #include "irda/helpers/irda_parser.h" | #include "infrared/helpers/infrared_parser.h" | ||||||
| #include "irda/irda_app_signal.h" | #include "infrared/infrared_app_signal.h" | ||||||
| 
 | 
 | ||||||
| #include <utility> | #include <utility> | ||||||
| 
 | 
 | ||||||
| #include <irda.h> | #include <infrared.h> | ||||||
| #include <cstdio> | #include <cstdio> | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <gui/modules/button_menu.h> | #include <gui/modules/button_menu.h> | ||||||
| #include <storage/storage.h> | #include <storage/storage.h> | ||||||
| #include "irda_app.h" | #include "infrared_app.h" | ||||||
| 
 | 
 | ||||||
| static const std::string default_remote_name = "remote"; | static const std::string default_remote_name = "remote"; | ||||||
| 
 | 
 | ||||||
| std::string IrdaAppRemoteManager::make_full_name(const std::string& remote_name) const { | std::string InfraredAppRemoteManager::make_full_name(const std::string& remote_name) const { | ||||||
|     return std::string("") + IrdaApp::irda_directory + "/" + remote_name + IrdaApp::irda_extension; |     return std::string("") + InfraredApp::infrared_directory + "/" + remote_name + | ||||||
|  |            InfraredApp::infrared_extension; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::string IrdaAppRemoteManager::find_vacant_remote_name(const std::string& name) { | std::string InfraredAppRemoteManager::find_vacant_remote_name(const std::string& name) { | ||||||
|     bool exist = true; |     bool exist = true; | ||||||
|     FileWorkerCpp file_worker; |     FileWorkerCpp file_worker; | ||||||
| 
 | 
 | ||||||
| @ -41,14 +42,14 @@ std::string IrdaAppRemoteManager::find_vacant_remote_name(const std::string& nam | |||||||
|     return !exist ? name + std::to_string(i) : std::string(); |     return !exist ? name + std::to_string(i) : std::string(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::add_button(const char* button_name, const IrdaAppSignal& signal) { | bool InfraredAppRemoteManager::add_button(const char* button_name, const InfraredAppSignal& signal) { | ||||||
|     remote->buttons.emplace_back(button_name, signal); |     remote->buttons.emplace_back(button_name, signal); | ||||||
|     return store(); |     return store(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::add_remote_with_button( | bool InfraredAppRemoteManager::add_remote_with_button( | ||||||
|     const char* button_name, |     const char* button_name, | ||||||
|     const IrdaAppSignal& signal) { |     const InfraredAppSignal& signal) { | ||||||
|     furi_check(button_name != nullptr); |     furi_check(button_name != nullptr); | ||||||
| 
 | 
 | ||||||
|     auto new_name = find_vacant_remote_name(default_remote_name); |     auto new_name = find_vacant_remote_name(default_remote_name); | ||||||
| @ -56,11 +57,11 @@ bool IrdaAppRemoteManager::add_remote_with_button( | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     remote = std::make_unique<IrdaAppRemote>(new_name); |     remote = std::make_unique<InfraredAppRemote>(new_name); | ||||||
|     return add_button(button_name, signal); |     return add_button(button_name, signal); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::vector<std::string> IrdaAppRemoteManager::get_button_list(void) const { | std::vector<std::string> InfraredAppRemoteManager::get_button_list(void) const { | ||||||
|     std::vector<std::string> name_vector; |     std::vector<std::string> name_vector; | ||||||
|     name_vector.reserve(remote->buttons.size()); |     name_vector.reserve(remote->buttons.size()); | ||||||
| 
 | 
 | ||||||
| @ -72,7 +73,7 @@ std::vector<std::string> IrdaAppRemoteManager::get_button_list(void) const { | |||||||
|     return name_vector; |     return name_vector; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const IrdaAppSignal& IrdaAppRemoteManager::get_button_data(size_t index) const { | const InfraredAppSignal& InfraredAppRemoteManager::get_button_data(size_t index) const { | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
|     auto& buttons = remote->buttons; |     auto& buttons = remote->buttons; | ||||||
|     furi_check(index < buttons.size()); |     furi_check(index < buttons.size()); | ||||||
| @ -80,7 +81,7 @@ const IrdaAppSignal& IrdaAppRemoteManager::get_button_data(size_t index) const { | |||||||
|     return buttons.at(index).signal; |     return buttons.at(index).signal; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::delete_remote() { | bool InfraredAppRemoteManager::delete_remote() { | ||||||
|     bool result; |     bool result; | ||||||
|     FileWorkerCpp file_worker; |     FileWorkerCpp file_worker; | ||||||
|     result = file_worker.remove(make_full_name(remote->name).c_str()); |     result = file_worker.remove(make_full_name(remote->name).c_str()); | ||||||
| @ -89,11 +90,11 @@ bool IrdaAppRemoteManager::delete_remote() { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppRemoteManager::reset_remote() { | void InfraredAppRemoteManager::reset_remote() { | ||||||
|     remote.reset(); |     remote.reset(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::delete_button(uint32_t index) { | bool InfraredAppRemoteManager::delete_button(uint32_t index) { | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
|     auto& buttons = remote->buttons; |     auto& buttons = remote->buttons; | ||||||
|     furi_check(index < buttons.size()); |     furi_check(index < buttons.size()); | ||||||
| @ -102,30 +103,18 @@ bool IrdaAppRemoteManager::delete_button(uint32_t index) { | |||||||
|     return store(); |     return store(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::string IrdaAppRemoteManager::get_button_name(uint32_t index) { | std::string InfraredAppRemoteManager::get_button_name(uint32_t index) { | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
|     auto& buttons = remote->buttons; |     auto& buttons = remote->buttons; | ||||||
|     furi_check(index < buttons.size()); |     furi_check(index < buttons.size()); | ||||||
|     return buttons[index].name.c_str(); |     return buttons[index].name.c_str(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::string IrdaAppRemoteManager::get_remote_name() { | std::string InfraredAppRemoteManager::get_remote_name() { | ||||||
|     return remote.get() ? remote->name : std::string(); |     return remote.get() ? remote->name : std::string(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int IrdaAppRemoteManager::find_remote_name(const std::vector<std::string>& strings) { | bool InfraredAppRemoteManager::rename_remote(const char* str) { | ||||||
|     furi_assert(remote.get() != nullptr); |  | ||||||
|     int i = 0; |  | ||||||
|     for(const auto& str : strings) { |  | ||||||
|         if(!str.compare(remote->name)) { |  | ||||||
|             return i; |  | ||||||
|         } |  | ||||||
|         ++i; |  | ||||||
|     } |  | ||||||
|     return -1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppRemoteManager::rename_remote(const char* str) { |  | ||||||
|     furi_check(str != nullptr); |     furi_check(str != nullptr); | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
| 
 | 
 | ||||||
| @ -148,7 +137,7 @@ bool IrdaAppRemoteManager::rename_remote(const char* str) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::rename_button(uint32_t index, const char* str) { | bool InfraredAppRemoteManager::rename_button(uint32_t index, const char* str) { | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
|     auto& buttons = remote->buttons; |     auto& buttons = remote->buttons; | ||||||
|     furi_check(index < buttons.size()); |     furi_check(index < buttons.size()); | ||||||
| @ -157,16 +146,16 @@ bool IrdaAppRemoteManager::rename_button(uint32_t index, const char* str) { | |||||||
|     return store(); |     return store(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| size_t IrdaAppRemoteManager::get_number_of_buttons() { | size_t InfraredAppRemoteManager::get_number_of_buttons() { | ||||||
|     furi_check(remote.get() != nullptr); |     furi_check(remote.get() != nullptr); | ||||||
|     return remote->buttons.size(); |     return remote->buttons.size(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::store(void) { | bool InfraredAppRemoteManager::store(void) { | ||||||
|     bool result = false; |     bool result = false; | ||||||
|     FileWorkerCpp file_worker; |     FileWorkerCpp file_worker; | ||||||
| 
 | 
 | ||||||
|     if(!file_worker.mkdir(IrdaApp::irda_directory)) return false; |     if(!file_worker.mkdir(InfraredApp::infrared_directory)) return false; | ||||||
| 
 | 
 | ||||||
|     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); |     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); | ||||||
|     FlipperFormat* ff = flipper_format_file_alloc(storage); |     FlipperFormat* ff = flipper_format_file_alloc(storage); | ||||||
| @ -178,7 +167,7 @@ bool IrdaAppRemoteManager::store(void) { | |||||||
|     } |     } | ||||||
|     if(result) { |     if(result) { | ||||||
|         for(const auto& button : remote->buttons) { |         for(const auto& button : remote->buttons) { | ||||||
|             result = irda_parser_save_signal(ff, button.signal, button.name.c_str()); |             result = infrared_parser_save_signal(ff, button.signal, button.name.c_str()); | ||||||
|             if(!result) { |             if(!result) { | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
| @ -190,7 +179,7 @@ bool IrdaAppRemoteManager::store(void) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppRemoteManager::load(const std::string& remote_name) { | bool InfraredAppRemoteManager::load(const std::string& remote_name) { | ||||||
|     bool result = false; |     bool result = false; | ||||||
|     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); |     Storage* storage = static_cast<Storage*>(furi_record_open("storage")); | ||||||
|     FlipperFormat* ff = flipper_format_file_alloc(storage); |     FlipperFormat* ff = flipper_format_file_alloc(storage); | ||||||
| @ -208,10 +197,10 @@ bool IrdaAppRemoteManager::load(const std::string& remote_name) { | |||||||
|         string_clear(header); |         string_clear(header); | ||||||
|     } |     } | ||||||
|     if(result) { |     if(result) { | ||||||
|         remote = std::make_unique<IrdaAppRemote>(remote_name); |         remote = std::make_unique<InfraredAppRemote>(remote_name); | ||||||
|         IrdaAppSignal signal; |         InfraredAppSignal signal; | ||||||
|         std::string signal_name; |         std::string signal_name; | ||||||
|         while(irda_parser_read_signal(ff, signal, signal_name)) { |         while(infrared_parser_read_signal(ff, signal, signal_name)) { | ||||||
|             remote->buttons.emplace_back(signal_name.c_str(), std::move(signal)); |             remote->buttons.emplace_back(signal_name.c_str(), std::move(signal)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
							
								
								
									
										188
									
								
								applications/infrared/infrared_app_remote_manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,188 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app_remote_manager.h | ||||||
|  |   * Infrared: Remote manager class. | ||||||
|  |   * It holds remote, can load/save/rename remote, | ||||||
|  |   * add/remove/rename buttons. | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "infrared_app_signal.h" | ||||||
|  | 
 | ||||||
|  | #include <infrared_worker.h> | ||||||
|  | #include <infrared.h> | ||||||
|  | 
 | ||||||
|  | #include <cstdint> | ||||||
|  | #include <string> | ||||||
|  | #include <memory> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | /** Class to handle remote button */ | ||||||
|  | class InfraredAppRemoteButton { | ||||||
|  |     /** Allow field access */ | ||||||
|  |     friend class InfraredAppRemoteManager; | ||||||
|  |     /** Name of signal */ | ||||||
|  |     std::string name; | ||||||
|  |     /** Signal data */ | ||||||
|  |     InfraredAppSignal signal; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     /** Initialize remote button
 | ||||||
|  |      * | ||||||
|  |      * @param name - button name | ||||||
|  |      * @param signal - signal to copy for remote button | ||||||
|  |      */ | ||||||
|  |     InfraredAppRemoteButton(const char* name, const InfraredAppSignal& signal) | ||||||
|  |         : name(name) | ||||||
|  |         , signal(signal) { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Initialize remote button
 | ||||||
|  |      * | ||||||
|  |      * @param name - button name | ||||||
|  |      * @param signal - signal to move for remote button | ||||||
|  |      */ | ||||||
|  |     InfraredAppRemoteButton(const char* name, InfraredAppSignal&& signal) | ||||||
|  |         : name(name) | ||||||
|  |         , signal(std::move(signal)) { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Deinitialize remote button */ | ||||||
|  |     ~InfraredAppRemoteButton() { | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Class to handle remote */ | ||||||
|  | class InfraredAppRemote { | ||||||
|  |     /** Allow field access */ | ||||||
|  |     friend class InfraredAppRemoteManager; | ||||||
|  |     /** Button container */ | ||||||
|  |     std::vector<InfraredAppRemoteButton> buttons; | ||||||
|  |     /** Name of remote */ | ||||||
|  |     std::string name; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     /** Initialize new remote
 | ||||||
|  |      * | ||||||
|  |      * @param name - new remote name | ||||||
|  |      */ | ||||||
|  |     InfraredAppRemote(const std::string& name) | ||||||
|  |         : name(name) { | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Class to handle remote manager */ | ||||||
|  | class InfraredAppRemoteManager { | ||||||
|  |     /** Remote instance. There can be 1 remote loaded at a time. */ | ||||||
|  |     std::unique_ptr<InfraredAppRemote> remote; | ||||||
|  |     /** Make full name from remote name
 | ||||||
|  |      * | ||||||
|  |      * @param remote_name name of remote | ||||||
|  |      * @retval full name of remote on disk | ||||||
|  |      */ | ||||||
|  |     std::string make_full_name(const std::string& remote_name) const; | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     /** Restriction to button name length. Buttons larger are ignored. */ | ||||||
|  |     static constexpr const uint32_t max_button_name_length = 22; | ||||||
|  | 
 | ||||||
|  |     /** Restriction to remote name length. Remotes larger are ignored. */ | ||||||
|  |     static constexpr const uint32_t max_remote_name_length = 22; | ||||||
|  | 
 | ||||||
|  |     /** Construct button from signal, and create remote
 | ||||||
|  |      * | ||||||
|  |      * @param button_name - name of button to create | ||||||
|  |      * @param signal - signal to create button from | ||||||
|  |      * @retval true for success, false otherwise | ||||||
|  |      * */ | ||||||
|  |     bool add_remote_with_button(const char* button_name, const InfraredAppSignal& signal); | ||||||
|  | 
 | ||||||
|  |     /** Add button to current remote
 | ||||||
|  |      * | ||||||
|  |      * @param button_name - name of button to create | ||||||
|  |      * @param signal - signal to create button from | ||||||
|  |      * @retval true for success, false otherwise | ||||||
|  |      * */ | ||||||
|  |     bool add_button(const char* button_name, const InfraredAppSignal& signal); | ||||||
|  | 
 | ||||||
|  |     /** Rename button in current remote
 | ||||||
|  |      * | ||||||
|  |      * @param index - index of button to rename | ||||||
|  |      * @param str - new button name | ||||||
|  |      */ | ||||||
|  |     bool rename_button(uint32_t index, const char* str); | ||||||
|  | 
 | ||||||
|  |     /** Rename current remote
 | ||||||
|  |      * | ||||||
|  |      * @param str - new remote name | ||||||
|  |      */ | ||||||
|  |     bool rename_remote(const char* str); | ||||||
|  | 
 | ||||||
|  |     /** Find vacant remote name. If suggested name is occupied,
 | ||||||
|  |      * incremented digit(2,3,4,etc) added to name and check repeated. | ||||||
|  |      * | ||||||
|  |      * @param name - suggested remote name | ||||||
|  |      * @retval garanteed free remote name, prefixed with suggested | ||||||
|  |      */ | ||||||
|  |     std::string find_vacant_remote_name(const std::string& name); | ||||||
|  | 
 | ||||||
|  |     /** Get button list
 | ||||||
|  |      * | ||||||
|  |      * @retval container of button names | ||||||
|  |      */ | ||||||
|  |     std::vector<std::string> get_button_list() const; | ||||||
|  | 
 | ||||||
|  |     /** Get button name by index
 | ||||||
|  |      * | ||||||
|  |      * @param index - index of button to get name from | ||||||
|  |      * @retval button name | ||||||
|  |      */ | ||||||
|  |     std::string get_button_name(uint32_t index); | ||||||
|  | 
 | ||||||
|  |     /** Get remote name
 | ||||||
|  |      * | ||||||
|  |      * @retval remote name | ||||||
|  |      */ | ||||||
|  |     std::string get_remote_name(); | ||||||
|  | 
 | ||||||
|  |     /** Get number of buttons
 | ||||||
|  |      * | ||||||
|  |      * @retval number of buttons | ||||||
|  |      */ | ||||||
|  |     size_t get_number_of_buttons(); | ||||||
|  | 
 | ||||||
|  |     /** Get button's signal
 | ||||||
|  |      * | ||||||
|  |      * @param index - index of interested button | ||||||
|  |      * @retval signal | ||||||
|  |      */ | ||||||
|  |     const InfraredAppSignal& get_button_data(size_t index) const; | ||||||
|  | 
 | ||||||
|  |     /** Delete button
 | ||||||
|  |      * | ||||||
|  |      * @param index - index of interested button | ||||||
|  |      * @retval true if success, false otherwise | ||||||
|  |      */ | ||||||
|  |     bool delete_button(uint32_t index); | ||||||
|  | 
 | ||||||
|  |     /** Delete remote
 | ||||||
|  |      * | ||||||
|  |      * @retval true if success, false otherwise | ||||||
|  |      */ | ||||||
|  |     bool delete_remote(); | ||||||
|  | 
 | ||||||
|  |     /** Clean all loaded info in current remote */ | ||||||
|  |     void reset_remote(); | ||||||
|  | 
 | ||||||
|  |     /** Store current remote data on disk
 | ||||||
|  |      * | ||||||
|  |      * @retval true if success, false otherwise | ||||||
|  |      */ | ||||||
|  |     bool store(); | ||||||
|  | 
 | ||||||
|  |     /** Load data from disk into current remote
 | ||||||
|  |      * | ||||||
|  |      * @param name - name of remote to load | ||||||
|  |      * @retval true if success, false otherwise | ||||||
|  |      */ | ||||||
|  |     bool load(const std::string& name); | ||||||
|  | }; | ||||||
| @ -1,7 +1,7 @@ | |||||||
| #include "irda_app_signal.h" | #include "infrared_app_signal.h" | ||||||
| #include <irda_transmit.h> | #include <infrared_transmit.h> | ||||||
| 
 | 
 | ||||||
| void IrdaAppSignal::copy_raw_signal( | void InfraredAppSignal::copy_raw_signal( | ||||||
|     const uint32_t* timings, |     const uint32_t* timings, | ||||||
|     size_t size, |     size_t size, | ||||||
|     uint32_t frequency, |     uint32_t frequency, | ||||||
| @ -18,7 +18,7 @@ void IrdaAppSignal::copy_raw_signal( | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSignal::clear_timings() { | void InfraredAppSignal::clear_timings() { | ||||||
|     if(raw_signal) { |     if(raw_signal) { | ||||||
|         delete[] payload.raw.timings; |         delete[] payload.raw.timings; | ||||||
|         payload.raw.timings_cnt = 0; |         payload.raw.timings_cnt = 0; | ||||||
| @ -26,7 +26,7 @@ void IrdaAppSignal::clear_timings() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppSignal::IrdaAppSignal( | InfraredAppSignal::InfraredAppSignal( | ||||||
|     const uint32_t* timings, |     const uint32_t* timings, | ||||||
|     size_t timings_cnt, |     size_t timings_cnt, | ||||||
|     uint32_t frequency, |     uint32_t frequency, | ||||||
| @ -35,12 +35,12 @@ IrdaAppSignal::IrdaAppSignal( | |||||||
|     copy_raw_signal(timings, timings_cnt, frequency, duty_cycle); |     copy_raw_signal(timings, timings_cnt, frequency, duty_cycle); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppSignal::IrdaAppSignal(const IrdaMessage* irda_message) { | InfraredAppSignal::InfraredAppSignal(const InfraredMessage* infrared_message) { | ||||||
|     raw_signal = false; |     raw_signal = false; | ||||||
|     payload.message = *irda_message; |     payload.message = *infrared_message; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppSignal& IrdaAppSignal::operator=(const IrdaAppSignal& other) { | InfraredAppSignal& InfraredAppSignal::operator=(const InfraredAppSignal& other) { | ||||||
|     clear_timings(); |     clear_timings(); | ||||||
|     raw_signal = other.raw_signal; |     raw_signal = other.raw_signal; | ||||||
|     if(!raw_signal) { |     if(!raw_signal) { | ||||||
| @ -56,7 +56,7 @@ IrdaAppSignal& IrdaAppSignal::operator=(const IrdaAppSignal& other) { | |||||||
|     return *this; |     return *this; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppSignal::IrdaAppSignal(const IrdaAppSignal& other) { | InfraredAppSignal::InfraredAppSignal(const InfraredAppSignal& other) { | ||||||
|     raw_signal = other.raw_signal; |     raw_signal = other.raw_signal; | ||||||
|     if(!raw_signal) { |     if(!raw_signal) { | ||||||
|         payload.message = other.payload.message; |         payload.message = other.payload.message; | ||||||
| @ -69,7 +69,7 @@ IrdaAppSignal::IrdaAppSignal(const IrdaAppSignal& other) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppSignal::IrdaAppSignal(IrdaAppSignal&& other) { | InfraredAppSignal::InfraredAppSignal(InfraredAppSignal&& other) { | ||||||
|     raw_signal = other.raw_signal; |     raw_signal = other.raw_signal; | ||||||
|     if(!raw_signal) { |     if(!raw_signal) { | ||||||
|         payload.message = other.payload.message; |         payload.message = other.payload.message; | ||||||
| @ -86,13 +86,13 @@ IrdaAppSignal::IrdaAppSignal(IrdaAppSignal&& other) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSignal::set_message(const IrdaMessage* irda_message) { | void InfraredAppSignal::set_message(const InfraredMessage* infrared_message) { | ||||||
|     clear_timings(); |     clear_timings(); | ||||||
|     raw_signal = false; |     raw_signal = false; | ||||||
|     payload.message = *irda_message; |     payload.message = *infrared_message; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSignal::set_raw_signal( | void InfraredAppSignal::set_raw_signal( | ||||||
|     uint32_t* timings, |     uint32_t* timings, | ||||||
|     size_t timings_cnt, |     size_t timings_cnt, | ||||||
|     uint32_t frequency, |     uint32_t frequency, | ||||||
| @ -102,11 +102,11 @@ void IrdaAppSignal::set_raw_signal( | |||||||
|     copy_raw_signal(timings, timings_cnt, frequency, duty_cycle); |     copy_raw_signal(timings, timings_cnt, frequency, duty_cycle); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSignal::transmit() const { | void InfraredAppSignal::transmit() const { | ||||||
|     if(!raw_signal) { |     if(!raw_signal) { | ||||||
|         irda_send(&payload.message, 1); |         infrared_send(&payload.message, 1); | ||||||
|     } else { |     } else { | ||||||
|         irda_send_raw_ext( |         infrared_send_raw_ext( | ||||||
|             payload.raw.timings, |             payload.raw.timings, | ||||||
|             payload.raw.timings_cnt, |             payload.raw.timings_cnt, | ||||||
|             true, |             true, | ||||||
							
								
								
									
										134
									
								
								applications/infrared/infrared_app_signal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,134 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app_signal.h | ||||||
|  |   * Infrared: Signal class | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | #include <infrared_worker.h> | ||||||
|  | #include <stdint.h> | ||||||
|  | #include <string> | ||||||
|  | #include <infrared.h> | ||||||
|  | 
 | ||||||
|  | /** Infrared application signal class */ | ||||||
|  | class InfraredAppSignal { | ||||||
|  | public: | ||||||
|  |     /** Raw signal structure */ | ||||||
|  |     typedef struct { | ||||||
|  |         /** Timings amount */ | ||||||
|  |         size_t timings_cnt; | ||||||
|  |         /** Samples of raw signal in ms */ | ||||||
|  |         uint32_t* timings; | ||||||
|  |         /** PWM Frequency of raw signal */ | ||||||
|  |         uint32_t frequency; | ||||||
|  |         /** PWM Duty cycle of raw signal */ | ||||||
|  |         float duty_cycle; | ||||||
|  |     } RawSignal; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** if true - signal is raw, if false - signal is parsed */ | ||||||
|  |     bool raw_signal; | ||||||
|  |     /** signal data, either raw or parsed */ | ||||||
|  |     union { | ||||||
|  |         /** signal data for parsed signal */ | ||||||
|  |         InfraredMessage message; | ||||||
|  |         /** raw signal data */ | ||||||
|  |         RawSignal raw; | ||||||
|  |     } payload; | ||||||
|  | 
 | ||||||
|  |     /** Copy raw signal into object
 | ||||||
|  |      * | ||||||
|  |      * @param timings - timings (samples) of raw signal | ||||||
|  |      * @param size - number of timings | ||||||
|  |      * @frequency - PWM frequency of raw signal | ||||||
|  |      * @duty_cycle - PWM duty cycle | ||||||
|  |      */ | ||||||
|  |     void | ||||||
|  |         copy_raw_signal(const uint32_t* timings, size_t size, uint32_t frequency, float duty_cycle); | ||||||
|  |     /** Clear and free timings data */ | ||||||
|  |     void clear_timings(); | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     /** Construct Infrared signal class */ | ||||||
|  |     InfraredAppSignal() { | ||||||
|  |         raw_signal = false; | ||||||
|  |         payload.message.protocol = InfraredProtocolUnknown; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Destruct signal class and free all allocated data */ | ||||||
|  |     ~InfraredAppSignal() { | ||||||
|  |         clear_timings(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Construct object with raw signal
 | ||||||
|  |      * | ||||||
|  |      * @param timings - timings (samples) of raw signal | ||||||
|  |      * @param size - number of timings | ||||||
|  |      * @frequency - PWM frequency of raw signal | ||||||
|  |      * @duty_cycle - PWM duty cycle | ||||||
|  |      */ | ||||||
|  |     InfraredAppSignal( | ||||||
|  |         const uint32_t* timings, | ||||||
|  |         size_t timings_cnt, | ||||||
|  |         uint32_t frequency, | ||||||
|  |         float duty_cycle); | ||||||
|  | 
 | ||||||
|  |     /** Construct object with parsed signal
 | ||||||
|  |      * | ||||||
|  |      * @param infrared_message - parsed_signal to construct from | ||||||
|  |      */ | ||||||
|  |     InfraredAppSignal(const InfraredMessage* infrared_message); | ||||||
|  | 
 | ||||||
|  |     /** Copy constructor */ | ||||||
|  |     InfraredAppSignal(const InfraredAppSignal& other); | ||||||
|  |     /** Move constructor */ | ||||||
|  |     InfraredAppSignal(InfraredAppSignal&& other); | ||||||
|  | 
 | ||||||
|  |     /** Assignment operator */ | ||||||
|  |     InfraredAppSignal& operator=(const InfraredAppSignal& signal); | ||||||
|  | 
 | ||||||
|  |     /** Set object to parsed signal
 | ||||||
|  |      * | ||||||
|  |      * @param infrared_message - parsed_signal to construct from | ||||||
|  |      */ | ||||||
|  |     void set_message(const InfraredMessage* infrared_message); | ||||||
|  | 
 | ||||||
|  |     /** Set object to raw signal
 | ||||||
|  |      * | ||||||
|  |      * @param timings - timings (samples) of raw signal | ||||||
|  |      * @param size - number of timings | ||||||
|  |      * @frequency - PWM frequency of raw signal | ||||||
|  |      * @duty_cycle - PWM duty cycle | ||||||
|  |      */ | ||||||
|  |     void | ||||||
|  |         set_raw_signal(uint32_t* timings, size_t timings_cnt, uint32_t frequency, float duty_cycle); | ||||||
|  | 
 | ||||||
|  |     /** Transmit held signal (???) */ | ||||||
|  |     void transmit() const; | ||||||
|  | 
 | ||||||
|  |     /** Show is held signal raw
 | ||||||
|  |      * | ||||||
|  |      * @retval true if signal is raw, false if signal is parsed | ||||||
|  |      */ | ||||||
|  |     bool is_raw(void) const { | ||||||
|  |         return raw_signal; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Get parsed signal.
 | ||||||
|  |      * User must check is_raw() signal before calling this function. | ||||||
|  |      * | ||||||
|  |      * @retval parsed signal pointer | ||||||
|  |      */ | ||||||
|  |     const InfraredMessage& get_message(void) const { | ||||||
|  |         furi_assert(!raw_signal); | ||||||
|  |         return payload.message; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Get raw signal.
 | ||||||
|  |      * User must check is_raw() signal before calling this function. | ||||||
|  |      * | ||||||
|  |      * @retval raw signal | ||||||
|  |      */ | ||||||
|  |     const RawSignal& get_raw_signal(void) const { | ||||||
|  |         furi_assert(raw_signal); | ||||||
|  |         return payload.raw; | ||||||
|  |     } | ||||||
|  | }; | ||||||
| @ -6,16 +6,16 @@ | |||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <callback-connector.h> | #include <callback-connector.h> | ||||||
| 
 | 
 | ||||||
| #include "irda/irda_app_view_manager.h" | #include "infrared/infrared_app_view_manager.h" | ||||||
| #include "irda/view/irda_progress_view.h" | #include "infrared/view/infrared_progress_view.h" | ||||||
| #include "irda_app.h" | #include "infrared_app.h" | ||||||
| #include "irda/irda_app_event.h" | #include "infrared/infrared_app_event.h" | ||||||
| 
 | 
 | ||||||
| IrdaAppViewManager::IrdaAppViewManager() { | InfraredAppViewManager::InfraredAppViewManager() { | ||||||
|     event_queue = osMessageQueueNew(10, sizeof(IrdaAppEvent), NULL); |     event_queue = osMessageQueueNew(10, sizeof(InfraredAppEvent), NULL); | ||||||
| 
 | 
 | ||||||
|     view_dispatcher = view_dispatcher_alloc(); |     view_dispatcher = view_dispatcher_alloc(); | ||||||
|     auto callback = cbc::obtain_connector(this, &IrdaAppViewManager::previous_view_callback); |     auto callback = cbc::obtain_connector(this, &InfraredAppViewManager::previous_view_callback); | ||||||
| 
 | 
 | ||||||
|     gui = static_cast<Gui*>(furi_record_open("gui")); |     gui = static_cast<Gui*>(furi_record_open("gui")); | ||||||
|     view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen); |     view_dispatcher_attach_to_gui(view_dispatcher, gui, ViewDispatcherTypeFullscreen); | ||||||
| @ -26,18 +26,18 @@ IrdaAppViewManager::IrdaAppViewManager() { | |||||||
|     dialog_ex = dialog_ex_alloc(); |     dialog_ex = dialog_ex_alloc(); | ||||||
|     text_input = text_input_alloc(); |     text_input = text_input_alloc(); | ||||||
|     button_panel = button_panel_alloc(); |     button_panel = button_panel_alloc(); | ||||||
|     progress_view = irda_progress_view_alloc(); |     progress_view = infrared_progress_view_alloc(); | ||||||
|     loading_view = loading_alloc(); |     loading_view = loading_alloc(); | ||||||
|     universal_view_stack = view_stack_alloc(); |     universal_view_stack = view_stack_alloc(); | ||||||
|     view_stack_add_view(universal_view_stack, button_panel_get_view(button_panel)); |     view_stack_add_view(universal_view_stack, button_panel_get_view(button_panel)); | ||||||
|     view_set_orientation(view_stack_get_view(universal_view_stack), ViewOrientationVertical); |     view_set_orientation(view_stack_get_view(universal_view_stack), ViewOrientationVertical); | ||||||
| 
 | 
 | ||||||
|     add_view(ViewType::UniversalRemote, view_stack_get_view(universal_view_stack)); |     add_view(ViewId::UniversalRemote, view_stack_get_view(universal_view_stack)); | ||||||
|     add_view(ViewType::ButtonMenu, button_menu_get_view(button_menu)); |     add_view(ViewId::ButtonMenu, button_menu_get_view(button_menu)); | ||||||
|     add_view(ViewType::Submenu, submenu_get_view(submenu)); |     add_view(ViewId::Submenu, submenu_get_view(submenu)); | ||||||
|     add_view(ViewType::Popup, popup_get_view(popup)); |     add_view(ViewId::Popup, popup_get_view(popup)); | ||||||
|     add_view(ViewType::DialogEx, dialog_ex_get_view(dialog_ex)); |     add_view(ViewId::DialogEx, dialog_ex_get_view(dialog_ex)); | ||||||
|     add_view(ViewType::TextInput, text_input_get_view(text_input)); |     add_view(ViewId::TextInput, text_input_get_view(text_input)); | ||||||
| 
 | 
 | ||||||
|     view_set_previous_callback(view_stack_get_view(universal_view_stack), callback); |     view_set_previous_callback(view_stack_get_view(universal_view_stack), callback); | ||||||
|     view_set_previous_callback(button_menu_get_view(button_menu), callback); |     view_set_previous_callback(button_menu_get_view(button_menu), callback); | ||||||
| @ -47,19 +47,19 @@ IrdaAppViewManager::IrdaAppViewManager() { | |||||||
|     view_set_previous_callback(text_input_get_view(text_input), callback); |     view_set_previous_callback(text_input_get_view(text_input), callback); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaAppViewManager::~IrdaAppViewManager() { | InfraredAppViewManager::~InfraredAppViewManager() { | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::UniversalRemote)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::UniversalRemote)); | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::ButtonMenu)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::ButtonMenu)); | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::TextInput)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::TextInput)); | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::DialogEx)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::DialogEx)); | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::Submenu)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::Submenu)); | ||||||
|     view_dispatcher_remove_view( |     view_dispatcher_remove_view( | ||||||
|         view_dispatcher, static_cast<uint32_t>(IrdaAppViewManager::ViewType::Popup)); |         view_dispatcher, static_cast<uint32_t>(InfraredAppViewManager::ViewId::Popup)); | ||||||
| 
 | 
 | ||||||
|     view_stack_remove_view(universal_view_stack, button_panel_get_view(button_panel)); |     view_stack_remove_view(universal_view_stack, button_panel_get_view(button_panel)); | ||||||
|     view_stack_free(universal_view_stack); |     view_stack_free(universal_view_stack); | ||||||
| @ -69,7 +69,7 @@ IrdaAppViewManager::~IrdaAppViewManager() { | |||||||
|     button_menu_free(button_menu); |     button_menu_free(button_menu); | ||||||
|     dialog_ex_free(dialog_ex); |     dialog_ex_free(dialog_ex); | ||||||
|     text_input_free(text_input); |     text_input_free(text_input); | ||||||
|     irda_progress_view_free(progress_view); |     infrared_progress_view_free(progress_view); | ||||||
|     loading_free(loading_view); |     loading_free(loading_view); | ||||||
| 
 | 
 | ||||||
|     view_dispatcher_free(view_dispatcher); |     view_dispatcher_free(view_dispatcher); | ||||||
| @ -77,70 +77,70 @@ IrdaAppViewManager::~IrdaAppViewManager() { | |||||||
|     osMessageQueueDelete(event_queue); |     osMessageQueueDelete(event_queue); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppViewManager::switch_to(ViewType type) { | void InfraredAppViewManager::switch_to(ViewId type) { | ||||||
|     view_dispatcher_switch_to_view(view_dispatcher, static_cast<uint32_t>(type)); |     view_dispatcher_switch_to_view(view_dispatcher, static_cast<uint32_t>(type)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TextInput* IrdaAppViewManager::get_text_input() { | TextInput* InfraredAppViewManager::get_text_input() { | ||||||
|     return text_input; |     return text_input; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DialogEx* IrdaAppViewManager::get_dialog_ex() { | DialogEx* InfraredAppViewManager::get_dialog_ex() { | ||||||
|     return dialog_ex; |     return dialog_ex; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Submenu* IrdaAppViewManager::get_submenu() { | Submenu* InfraredAppViewManager::get_submenu() { | ||||||
|     return submenu; |     return submenu; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Popup* IrdaAppViewManager::get_popup() { | Popup* InfraredAppViewManager::get_popup() { | ||||||
|     return popup; |     return popup; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ButtonMenu* IrdaAppViewManager::get_button_menu() { | ButtonMenu* InfraredAppViewManager::get_button_menu() { | ||||||
|     return button_menu; |     return button_menu; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ButtonPanel* IrdaAppViewManager::get_button_panel() { | ButtonPanel* InfraredAppViewManager::get_button_panel() { | ||||||
|     return button_panel; |     return button_panel; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaProgressView* IrdaAppViewManager::get_progress() { | InfraredProgressView* InfraredAppViewManager::get_progress() { | ||||||
|     return progress_view; |     return progress_view; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Loading* IrdaAppViewManager::get_loading() { | Loading* InfraredAppViewManager::get_loading() { | ||||||
|     return loading_view; |     return loading_view; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ViewStack* IrdaAppViewManager::get_universal_view_stack() { | ViewStack* InfraredAppViewManager::get_universal_view_stack() { | ||||||
|     return universal_view_stack; |     return universal_view_stack; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| osMessageQueueId_t IrdaAppViewManager::get_event_queue() { | osMessageQueueId_t InfraredAppViewManager::get_event_queue() { | ||||||
|     return event_queue; |     return event_queue; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppViewManager::clear_events() { | void InfraredAppViewManager::clear_events() { | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
|     while(osMessageQueueGet(event_queue, &event, NULL, 0) == osOK) |     while(osMessageQueueGet(event_queue, &event, NULL, 0) == osOK) | ||||||
|         ; |         ; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppViewManager::receive_event(IrdaAppEvent* event) { | void InfraredAppViewManager::receive_event(InfraredAppEvent* event) { | ||||||
|     if(osMessageQueueGet(event_queue, event, NULL, 100) != osOK) { |     if(osMessageQueueGet(event_queue, event, NULL, 100) != osOK) { | ||||||
|         event->type = IrdaAppEvent::Type::Tick; |         event->type = InfraredAppEvent::Type::Tick; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppViewManager::send_event(IrdaAppEvent* event) { | void InfraredAppViewManager::send_event(InfraredAppEvent* event) { | ||||||
|     uint32_t timeout = 0; |     uint32_t timeout = 0; | ||||||
|     /* Rapid button hammering on signal send scenes causes queue overflow - ignore it,
 |     /* Rapid button hammering on signal send scenes causes queue overflow - ignore it,
 | ||||||
|      * but try to keep button release event - it switches off IRDA DMA sending. */ |      * but try to keep button release event - it switches off INFRARED DMA sending. */ | ||||||
|     if(event->type == IrdaAppEvent::Type::MenuSelectedRelease) { |     if(event->type == InfraredAppEvent::Type::MenuSelectedRelease) { | ||||||
|         timeout = 200; |         timeout = 200; | ||||||
|     } |     } | ||||||
|     if((event->type == IrdaAppEvent::Type::DialogExSelected) && |     if((event->type == InfraredAppEvent::Type::DialogExSelected) && | ||||||
|        (event->payload.dialog_ex_result == DialogExReleaseCenter)) { |        (event->payload.dialog_ex_result == DialogExReleaseCenter)) { | ||||||
|         timeout = 200; |         timeout = 200; | ||||||
|     } |     } | ||||||
| @ -148,16 +148,16 @@ void IrdaAppViewManager::send_event(IrdaAppEvent* event) { | |||||||
|     osMessageQueuePut(event_queue, event, 0, timeout); |     osMessageQueuePut(event_queue, event, 0, timeout); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint32_t IrdaAppViewManager::previous_view_callback(void* context) { | uint32_t InfraredAppViewManager::previous_view_callback(void* context) { | ||||||
|     if(event_queue != NULL) { |     if(event_queue != NULL) { | ||||||
|         IrdaAppEvent event; |         InfraredAppEvent event; | ||||||
|         event.type = IrdaAppEvent::Type::Back; |         event.type = InfraredAppEvent::Type::Back; | ||||||
|         send_event(&event); |         send_event(&event); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return VIEW_IGNORE; |     return VIEW_IGNORE; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppViewManager::add_view(ViewType view_type, View* view) { | void InfraredAppViewManager::add_view(ViewId view_type, View* view) { | ||||||
|     view_dispatcher_add_view(view_dispatcher, static_cast<uint32_t>(view_type), view); |     view_dispatcher_add_view(view_dispatcher, static_cast<uint32_t>(view_type), view); | ||||||
| } | } | ||||||
							
								
								
									
										164
									
								
								applications/infrared/infrared_app_view_manager.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,164 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_app_view_manager.h | ||||||
|  |   * Infrared: Scene events description | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | #include <gui/modules/button_menu.h> | ||||||
|  | #include <gui/modules/text_input.h> | ||||||
|  | #include <gui/view_stack.h> | ||||||
|  | #include <gui/modules/button_panel.h> | ||||||
|  | #include <furi.h> | ||||||
|  | #include <gui/view_dispatcher.h> | ||||||
|  | #include <gui/modules/dialog_ex.h> | ||||||
|  | #include <gui/modules/submenu.h> | ||||||
|  | #include <gui/modules/popup.h> | ||||||
|  | #include <gui/modules/loading.h> | ||||||
|  | 
 | ||||||
|  | #include "infrared_app_event.h" | ||||||
|  | #include "view/infrared_progress_view.h" | ||||||
|  | 
 | ||||||
|  | /** Infrared View manager class */ | ||||||
|  | class InfraredAppViewManager { | ||||||
|  | public: | ||||||
|  |     /** Infrared View Id enum, it is used
 | ||||||
|  |      * to identify added views */ | ||||||
|  |     enum class ViewId : uint8_t { | ||||||
|  |         DialogEx, | ||||||
|  |         TextInput, | ||||||
|  |         Submenu, | ||||||
|  |         ButtonMenu, | ||||||
|  |         UniversalRemote, | ||||||
|  |         Popup, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     /** Class constructor */ | ||||||
|  |     InfraredAppViewManager(); | ||||||
|  |     /** Class destructor */ | ||||||
|  |     ~InfraredAppViewManager(); | ||||||
|  | 
 | ||||||
|  |     /** Switch to another view
 | ||||||
|  |      * | ||||||
|  |      * @param id - view id to switch to | ||||||
|  |      */ | ||||||
|  |     void switch_to(ViewId id); | ||||||
|  | 
 | ||||||
|  |     /** Receive event from queue
 | ||||||
|  |      * | ||||||
|  |      * @param event - received event | ||||||
|  |      */ | ||||||
|  |     void receive_event(InfraredAppEvent* event); | ||||||
|  | 
 | ||||||
|  |     /** Send event to queue
 | ||||||
|  |      * | ||||||
|  |      * @param event - event to send | ||||||
|  |      */ | ||||||
|  |     void send_event(InfraredAppEvent* event); | ||||||
|  | 
 | ||||||
|  |     /** Clear events that already in queue
 | ||||||
|  |      * | ||||||
|  |      * @param event - event to send | ||||||
|  |      */ | ||||||
|  |     void clear_events(); | ||||||
|  | 
 | ||||||
|  |     /** Get dialog_ex view module
 | ||||||
|  |      * | ||||||
|  |      * @retval dialog_ex view module | ||||||
|  |      */ | ||||||
|  |     DialogEx* get_dialog_ex(); | ||||||
|  | 
 | ||||||
|  |     /** Get submenu view module
 | ||||||
|  |      * | ||||||
|  |      * @retval submenu view module | ||||||
|  |      */ | ||||||
|  |     Submenu* get_submenu(); | ||||||
|  | 
 | ||||||
|  |     /** Get popup view module
 | ||||||
|  |      * | ||||||
|  |      * @retval popup view module | ||||||
|  |      */ | ||||||
|  |     Popup* get_popup(); | ||||||
|  | 
 | ||||||
|  |     /** Get text_input view module
 | ||||||
|  |      * | ||||||
|  |      * @retval text_input view module | ||||||
|  |      */ | ||||||
|  |     TextInput* get_text_input(); | ||||||
|  | 
 | ||||||
|  |     /** Get button_menu view module
 | ||||||
|  |      * | ||||||
|  |      * @retval button_menu view module | ||||||
|  |      */ | ||||||
|  |     ButtonMenu* get_button_menu(); | ||||||
|  | 
 | ||||||
|  |     /** Get button_panel view module
 | ||||||
|  |      * | ||||||
|  |      * @retval button_panel view module | ||||||
|  |      */ | ||||||
|  |     ButtonPanel* get_button_panel(); | ||||||
|  | 
 | ||||||
|  |     /** Get view_stack view module used in universal remote
 | ||||||
|  |      * | ||||||
|  |      * @retval view_stack view module | ||||||
|  |      */ | ||||||
|  |     ViewStack* get_universal_view_stack(); | ||||||
|  | 
 | ||||||
|  |     /** Get progress view module
 | ||||||
|  |      * | ||||||
|  |      * @retval progress view module | ||||||
|  |      */ | ||||||
|  |     InfraredProgressView* get_progress(); | ||||||
|  | 
 | ||||||
|  |     /** Get loading view module
 | ||||||
|  |      * | ||||||
|  |      * @retval loading view module | ||||||
|  |      */ | ||||||
|  |     Loading* get_loading(); | ||||||
|  | 
 | ||||||
|  |     /** Get event queue
 | ||||||
|  |      * | ||||||
|  |      * @retval event queue | ||||||
|  |      */ | ||||||
|  |     osMessageQueueId_t get_event_queue(); | ||||||
|  | 
 | ||||||
|  |     /** Callback to handle back button
 | ||||||
|  |      * | ||||||
|  |      * @param context - context to pass to callback | ||||||
|  |      * @retval always returns VIEW_IGNORE | ||||||
|  |      */ | ||||||
|  |     uint32_t previous_view_callback(void* context); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** View Dispatcher instance.
 | ||||||
|  |      * It handles view switching */ | ||||||
|  |     ViewDispatcher* view_dispatcher; | ||||||
|  |     /** Gui instance */ | ||||||
|  |     Gui* gui; | ||||||
|  |     /** Text input view module instance */ | ||||||
|  |     TextInput* text_input; | ||||||
|  |     /** DialogEx view module instance */ | ||||||
|  |     DialogEx* dialog_ex; | ||||||
|  |     /** Submenu view module instance */ | ||||||
|  |     Submenu* submenu; | ||||||
|  |     /** Popup view module instance */ | ||||||
|  |     Popup* popup; | ||||||
|  |     /** ButtonMenu view module instance */ | ||||||
|  |     ButtonMenu* button_menu; | ||||||
|  |     /** ButtonPanel view module instance */ | ||||||
|  |     ButtonPanel* button_panel; | ||||||
|  |     /** ViewStack view module instance */ | ||||||
|  |     ViewStack* universal_view_stack; | ||||||
|  |     /** ProgressView view module instance */ | ||||||
|  |     InfraredProgressView* progress_view; | ||||||
|  |     /** Loading view module instance */ | ||||||
|  |     Loading* loading_view; | ||||||
|  | 
 | ||||||
|  |     /** Queue to handle events, which are processed in scenes */ | ||||||
|  |     osMessageQueueId_t event_queue; | ||||||
|  | 
 | ||||||
|  |     /** Add View to pull of views
 | ||||||
|  |      * | ||||||
|  |      * @param view_id - id to identify view | ||||||
|  |      * @param view - view to add | ||||||
|  |      */ | ||||||
|  |     void add_view(ViewId view_id, View* view); | ||||||
|  | }; | ||||||
							
								
								
									
										9
									
								
								applications/infrared/infrared_runner.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,9 @@ | |||||||
|  | #include "infrared_app.h" | ||||||
|  | 
 | ||||||
|  | extern "C" int32_t infrared_app(void* p) { | ||||||
|  |     InfraredApp* app = new InfraredApp(); | ||||||
|  |     int32_t result = app->run(p); | ||||||
|  |     delete app; | ||||||
|  | 
 | ||||||
|  |     return result; | ||||||
|  | } | ||||||
							
								
								
									
										305
									
								
								applications/infrared/scene/infrared_app_scene.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,305 @@ | |||||||
|  | /**
 | ||||||
|  |  * @file infrared_app_scene.h | ||||||
|  |  * Infrared: Application scenes | ||||||
|  |  */ | ||||||
|  | #pragma once | ||||||
|  | #include "../infrared_app_event.h" | ||||||
|  | #include <furi_hal_infrared.h> | ||||||
|  | #include "infrared.h" | ||||||
|  | #include <vector> | ||||||
|  | #include <string> | ||||||
|  | #include "../infrared_app_brute_force.h" | ||||||
|  | 
 | ||||||
|  | /** Anonymous class */ | ||||||
|  | class InfraredApp; | ||||||
|  | 
 | ||||||
|  | /** Base Scene class */ | ||||||
|  | class InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     virtual void on_enter(InfraredApp* app) = 0; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     virtual bool on_event(InfraredApp* app, InfraredAppEvent* event) = 0; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     virtual void on_exit(InfraredApp* app) = 0; | ||||||
|  |     /** Virtual destructor of base class */ | ||||||
|  |     virtual ~InfraredAppScene(){}; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Start scene
 | ||||||
|  |  * Main Infrared application menu | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneStart : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Save previously selected submenu index
 | ||||||
|  |      * to highlight it when get back */ | ||||||
|  |     uint32_t submenu_item_selected = 0; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Universal menu scene
 | ||||||
|  |  * Scene to select universal remote | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneUniversal : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Save previously selected submenu index
 | ||||||
|  |      * to highlight it when get back */ | ||||||
|  |     uint32_t submenu_item_selected = 0; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Learn new signal scene
 | ||||||
|  |  * On this scene catching new IR signal performed. | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneLearn : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** New signal learn succeeded scene
 | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneLearnSuccess : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  |     bool button_pressed = false; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Scene to enter name for new button in remote
 | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneLearnEnterName : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Scene where signal is learnt
 | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneLearnDone : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** Remote interface scene
 | ||||||
|  |  * On this scene you can send IR signals from selected remote | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneRemote : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** container of button names in current remote. */ | ||||||
|  |     std::vector<std::string> buttons_names; | ||||||
|  |     /** Save previously selected index
 | ||||||
|  |      * to highlight it when get back */ | ||||||
|  |     uint32_t buttonmenu_item_selected = 0; | ||||||
|  |     /** state flag to show button is pressed.
 | ||||||
|  |      * As long as send-signal button pressed no other button | ||||||
|  |      * events are handled. */ | ||||||
|  |     bool button_pressed = false; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /** List of remotes scene
 | ||||||
|  |  * Every remote is a file, located on internal/external storage. | ||||||
|  |  * Every file has same format, and same extension. | ||||||
|  |  * Files are parsed as you enter 'Remote scene' and showed | ||||||
|  |  * as a buttons. | ||||||
|  |  */ | ||||||
|  | class InfraredAppSceneRemoteList : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Save previously selected index
 | ||||||
|  |      * to highlight it when get back */ | ||||||
|  |     uint32_t submenu_item_selected = 0; | ||||||
|  |     /** Remote names to show them in submenu */ | ||||||
|  |     std::vector<std::string> remote_names; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneAskBack : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEdit : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Save previously selected index
 | ||||||
|  |      * to highlight it when get back */ | ||||||
|  |     uint32_t submenu_item_selected = 0; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEditKeySelect : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     /** Button names to show them in submenu */ | ||||||
|  |     std::vector<std::string> buttons_names; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEditRename : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEditDelete : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEditRenameDone : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneEditDeleteDone : public InfraredAppScene { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneUniversalCommon : public InfraredAppScene { | ||||||
|  |     /** Brute force started flag */ | ||||||
|  |     bool brute_force_started = false; | ||||||
|  | 
 | ||||||
|  | protected: | ||||||
|  |     /** Events handler callback */ | ||||||
|  |     bool on_event(InfraredApp* app, InfraredAppEvent* event) final; | ||||||
|  |     /** Called when exit scene */ | ||||||
|  |     void on_exit(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  |     /** Show popup window
 | ||||||
|  |      * | ||||||
|  |      * @param app - application instance | ||||||
|  |      */ | ||||||
|  |     void show_popup(InfraredApp* app, int record_amount); | ||||||
|  | 
 | ||||||
|  |     /** Hide popup window
 | ||||||
|  |      * | ||||||
|  |      * @param app - application instance | ||||||
|  |      */ | ||||||
|  |     void hide_popup(InfraredApp* app); | ||||||
|  | 
 | ||||||
|  |     /** Propagate progress in popup window
 | ||||||
|  |      * | ||||||
|  |      * @param app - application instance | ||||||
|  |      */ | ||||||
|  |     bool progress_popup(InfraredApp* app); | ||||||
|  | 
 | ||||||
|  |     /** Item selected callback
 | ||||||
|  |      * | ||||||
|  |      * @param context - context | ||||||
|  |      * @param index - selected item index | ||||||
|  |      */ | ||||||
|  |     static void infrared_app_item_callback(void* context, uint32_t index); | ||||||
|  | 
 | ||||||
|  |     /** Brute Force instance */ | ||||||
|  |     InfraredAppBruteForce brute_force; | ||||||
|  | 
 | ||||||
|  |     /** Constructor */ | ||||||
|  |     InfraredAppSceneUniversalCommon(const char* filename) | ||||||
|  |         : brute_force(filename) { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Destructor */ | ||||||
|  |     ~InfraredAppSceneUniversalCommon() { | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | class InfraredAppSceneUniversalTV : public InfraredAppSceneUniversalCommon { | ||||||
|  | public: | ||||||
|  |     /** Called when enter scene */ | ||||||
|  |     void on_enter(InfraredApp* app) final; | ||||||
|  | 
 | ||||||
|  |     /** Constructor
 | ||||||
|  |      * Specifies path to brute force db library */ | ||||||
|  |     InfraredAppSceneUniversalTV() | ||||||
|  |         : InfraredAppSceneUniversalCommon("/ext/infrared/assets/tv.ir") { | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** Destructor */ | ||||||
|  |     ~InfraredAppSceneUniversalTV() { | ||||||
|  |     } | ||||||
|  | }; | ||||||
| @ -1,21 +1,21 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "gui/modules/dialog_ex.h" | #include "gui/modules/dialog_ex.h" | ||||||
| #include "irda.h" | #include "infrared.h" | ||||||
| #include "irda/scene/irda_app_scene.h" | #include "infrared/scene/infrared_app_scene.h" | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
| static void dialog_result_callback(DialogExResult result, void* context) { | static void dialog_result_callback(DialogExResult result, void* context) { | ||||||
|     auto app = static_cast<IrdaApp*>(context); |     auto app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::DialogExSelected; |     event.type = InfraredAppEvent::Type::DialogExSelected; | ||||||
|     event.payload.dialog_ex_result = result; |     event.payload.dialog_ex_result = result; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneAskBack::on_enter(IrdaApp* app) { | void InfraredAppSceneAskBack::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     DialogEx* dialog_ex = view_manager->get_dialog_ex(); |     DialogEx* dialog_ex = view_manager->get_dialog_ex(); | ||||||
| 
 | 
 | ||||||
|     if(app->get_learn_new_remote()) { |     if(app->get_learn_new_remote()) { | ||||||
| @ -33,21 +33,21 @@ void IrdaAppSceneAskBack::on_enter(IrdaApp* app) { | |||||||
|     dialog_ex_set_result_callback(dialog_ex, dialog_result_callback); |     dialog_ex_set_result_callback(dialog_ex, dialog_result_callback); | ||||||
|     dialog_ex_set_context(dialog_ex, app); |     dialog_ex_set_context(dialog_ex, app); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::DialogEx); |     view_manager->switch_to(InfraredAppViewManager::ViewId::DialogEx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneAskBack::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneAskBack::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::DialogExSelected) { |     if(event->type == InfraredAppEvent::Type::DialogExSelected) { | ||||||
|         switch(event->payload.dialog_ex_result) { |         switch(event->payload.dialog_ex_result) { | ||||||
|         case DialogExResultLeft: |         case DialogExResultLeft: | ||||||
|             consumed = true; |             consumed = true; | ||||||
|             if(app->get_learn_new_remote()) { |             if(app->get_learn_new_remote()) { | ||||||
|                 app->search_and_switch_to_previous_scene({IrdaApp::Scene::Start}); |                 app->search_and_switch_to_previous_scene({InfraredApp::Scene::Start}); | ||||||
|             } else { |             } else { | ||||||
|                 app->search_and_switch_to_previous_scene( |                 app->search_and_switch_to_previous_scene( | ||||||
|                     {IrdaApp::Scene::Edit, IrdaApp::Scene::Remote}); |                     {InfraredApp::Scene::Edit, InfraredApp::Scene::Remote}); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         case DialogExResultCenter: |         case DialogExResultCenter: | ||||||
| @ -62,12 +62,12 @@ bool IrdaAppSceneAskBack::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::Back) { |     if(event->type == InfraredAppEvent::Type::Back) { | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneAskBack::on_exit(IrdaApp* app) { | void InfraredAppSceneAskBack::on_exit(InfraredApp* app) { | ||||||
| } | } | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "gui/modules/submenu.h" | #include "gui/modules/submenu.h" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
| @ -10,17 +10,17 @@ typedef enum { | |||||||
| } SubmenuIndex; | } SubmenuIndex; | ||||||
| 
 | 
 | ||||||
| static void submenu_callback(void* context, uint32_t index) { | static void submenu_callback(void* context, uint32_t index) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::MenuSelected; |     event.type = InfraredAppEvent::Type::MenuSelected; | ||||||
|     event.payload.menu_index = index; |     event.payload.menu_index = index; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEdit::on_enter(IrdaApp* app) { | void InfraredAppSceneEdit::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     submenu_add_item(submenu, "Add key", SubmenuIndexAddKey, submenu_callback, app); |     submenu_add_item(submenu, "Add key", SubmenuIndexAddKey, submenu_callback, app); | ||||||
| @ -31,38 +31,38 @@ void IrdaAppSceneEdit::on_enter(IrdaApp* app) { | |||||||
|     submenu_set_selected_item(submenu, submenu_item_selected); |     submenu_set_selected_item(submenu, submenu_item_selected); | ||||||
|     submenu_item_selected = 0; |     submenu_item_selected = 0; | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Submenu); |     view_manager->switch_to(InfraredAppViewManager::ViewId::Submenu); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneEdit::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneEdit::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::MenuSelected) { |     if(event->type == InfraredAppEvent::Type::MenuSelected) { | ||||||
|         submenu_item_selected = event->payload.menu_index; |         submenu_item_selected = event->payload.menu_index; | ||||||
|         switch(event->payload.menu_index) { |         switch(event->payload.menu_index) { | ||||||
|         case SubmenuIndexAddKey: |         case SubmenuIndexAddKey: | ||||||
|             app->set_learn_new_remote(false); |             app->set_learn_new_remote(false); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Learn); |             app->switch_to_next_scene(InfraredApp::Scene::Learn); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexRenameKey: |         case SubmenuIndexRenameKey: | ||||||
|             app->set_edit_action(IrdaApp::EditAction::Rename); |             app->set_edit_action(InfraredApp::EditAction::Rename); | ||||||
|             app->set_edit_element(IrdaApp::EditElement::Button); |             app->set_edit_element(InfraredApp::EditElement::Button); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditKeySelect); |             app->switch_to_next_scene(InfraredApp::Scene::EditKeySelect); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexDeleteKey: |         case SubmenuIndexDeleteKey: | ||||||
|             app->set_edit_action(IrdaApp::EditAction::Delete); |             app->set_edit_action(InfraredApp::EditAction::Delete); | ||||||
|             app->set_edit_element(IrdaApp::EditElement::Button); |             app->set_edit_element(InfraredApp::EditElement::Button); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditKeySelect); |             app->switch_to_next_scene(InfraredApp::Scene::EditKeySelect); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexRenameRemote: |         case SubmenuIndexRenameRemote: | ||||||
|             app->set_edit_action(IrdaApp::EditAction::Rename); |             app->set_edit_action(InfraredApp::EditAction::Rename); | ||||||
|             app->set_edit_element(IrdaApp::EditElement::Remote); |             app->set_edit_element(InfraredApp::EditElement::Remote); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditRename); |             app->switch_to_next_scene(InfraredApp::Scene::EditRename); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexDeleteRemote: |         case SubmenuIndexDeleteRemote: | ||||||
|             app->set_edit_action(IrdaApp::EditAction::Delete); |             app->set_edit_action(InfraredApp::EditAction::Delete); | ||||||
|             app->set_edit_element(IrdaApp::EditElement::Remote); |             app->set_edit_element(InfraredApp::EditElement::Remote); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditDelete); |             app->switch_to_next_scene(InfraredApp::Scene::EditDelete); | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
| @ -71,8 +71,8 @@ bool IrdaAppSceneEdit::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEdit::on_exit(IrdaApp* app) { | void InfraredAppSceneEdit::on_exit(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     submenu_reset(submenu); |     submenu_reset(submenu); | ||||||
| @ -1,25 +1,25 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "irda.h" | #include "infrared.h" | ||||||
| #include "irda/scene/irda_app_scene.h" | #include "infrared/scene/infrared_app_scene.h" | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
| static void dialog_result_callback(DialogExResult result, void* context) { | static void dialog_result_callback(DialogExResult result, void* context) { | ||||||
|     auto app = static_cast<IrdaApp*>(context); |     auto app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::DialogExSelected; |     event.type = InfraredAppEvent::Type::DialogExSelected; | ||||||
|     event.payload.dialog_ex_result = result; |     event.payload.dialog_ex_result = result; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEditDelete::on_enter(IrdaApp* app) { | void InfraredAppSceneEditDelete::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     DialogEx* dialog_ex = view_manager->get_dialog_ex(); |     DialogEx* dialog_ex = view_manager->get_dialog_ex(); | ||||||
| 
 | 
 | ||||||
|     auto remote_manager = app->get_remote_manager(); |     auto remote_manager = app->get_remote_manager(); | ||||||
| 
 | 
 | ||||||
|     if(app->get_edit_element() == IrdaApp::EditElement::Button) { |     if(app->get_edit_element() == InfraredApp::EditElement::Button) { | ||||||
|         auto signal = remote_manager->get_button_data(app->get_current_button()); |         auto signal = remote_manager->get_button_data(app->get_current_button()); | ||||||
|         dialog_ex_set_header(dialog_ex, "Delete button?", 64, 0, AlignCenter, AlignTop); |         dialog_ex_set_header(dialog_ex, "Delete button?", 64, 0, AlignCenter, AlignTop); | ||||||
|         if(!signal.is_raw()) { |         if(!signal.is_raw()) { | ||||||
| @ -28,10 +28,10 @@ void IrdaAppSceneEditDelete::on_enter(IrdaApp* app) { | |||||||
|                 0, |                 0, | ||||||
|                 "%s\n%s\nA=0x%0*lX C=0x%0*lX", |                 "%s\n%s\nA=0x%0*lX C=0x%0*lX", | ||||||
|                 remote_manager->get_button_name(app->get_current_button()).c_str(), |                 remote_manager->get_button_name(app->get_current_button()).c_str(), | ||||||
|                 irda_get_protocol_name(message->protocol), |                 infrared_get_protocol_name(message->protocol), | ||||||
|                 ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4), |                 ROUND_UP_TO(infrared_get_protocol_address_length(message->protocol), 4), | ||||||
|                 message->address, |                 message->address, | ||||||
|                 ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4), |                 ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4), | ||||||
|                 message->command); |                 message->command); | ||||||
|         } else { |         } else { | ||||||
|             app->set_text_store( |             app->set_text_store( | ||||||
| @ -56,13 +56,13 @@ void IrdaAppSceneEditDelete::on_enter(IrdaApp* app) { | |||||||
|     dialog_ex_set_result_callback(dialog_ex, dialog_result_callback); |     dialog_ex_set_result_callback(dialog_ex, dialog_result_callback); | ||||||
|     dialog_ex_set_context(dialog_ex, app); |     dialog_ex_set_context(dialog_ex, app); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::DialogEx); |     view_manager->switch_to(InfraredAppViewManager::ViewId::DialogEx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneEditDelete::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneEditDelete::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::DialogExSelected) { |     if(event->type == InfraredAppEvent::Type::DialogExSelected) { | ||||||
|         switch(event->payload.dialog_ex_result) { |         switch(event->payload.dialog_ex_result) { | ||||||
|         case DialogExResultLeft: |         case DialogExResultLeft: | ||||||
|             app->switch_to_previous_scene(); |             app->switch_to_previous_scene(); | ||||||
| @ -73,18 +73,18 @@ bool IrdaAppSceneEditDelete::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|         case DialogExResultRight: { |         case DialogExResultRight: { | ||||||
|             auto remote_manager = app->get_remote_manager(); |             auto remote_manager = app->get_remote_manager(); | ||||||
|             bool result = false; |             bool result = false; | ||||||
|             if(app->get_edit_element() == IrdaApp::EditElement::Remote) { |             if(app->get_edit_element() == InfraredApp::EditElement::Remote) { | ||||||
|                 result = remote_manager->delete_remote(); |                 result = remote_manager->delete_remote(); | ||||||
|             } else { |             } else { | ||||||
|                 result = remote_manager->delete_button(app->get_current_button()); |                 result = remote_manager->delete_button(app->get_current_button()); | ||||||
|                 app->set_current_button(IrdaApp::ButtonNA); |                 app->set_current_button(InfraredApp::ButtonNA); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if(!result) { |             if(!result) { | ||||||
|                 app->search_and_switch_to_previous_scene( |                 app->search_and_switch_to_previous_scene( | ||||||
|                     {IrdaApp::Scene::RemoteList, IrdaApp::Scene::Start}); |                     {InfraredApp::Scene::RemoteList, InfraredApp::Scene::Start}); | ||||||
|             } else { |             } else { | ||||||
|                 app->switch_to_next_scene(IrdaApp::Scene::EditDeleteDone); |                 app->switch_to_next_scene(InfraredApp::Scene::EditDeleteDone); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
| @ -96,5 +96,5 @@ bool IrdaAppSceneEditDelete::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEditDelete::on_exit(IrdaApp* app) { | void InfraredAppSceneEditDelete::on_exit(InfraredApp* app) { | ||||||
| } | } | ||||||
| @ -0,0 +1,38 @@ | |||||||
|  | #include "../infrared_app.h" | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditDeleteDone::on_enter(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     Popup* popup = view_manager->get_popup(); | ||||||
|  | 
 | ||||||
|  |     popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62); | ||||||
|  |     popup_set_header(popup, "Deleted", 83, 19, AlignLeft, AlignBottom); | ||||||
|  | 
 | ||||||
|  |     popup_set_callback(popup, InfraredApp::popup_callback); | ||||||
|  |     popup_set_context(popup, app); | ||||||
|  |     popup_set_timeout(popup, 1500); | ||||||
|  |     popup_enable_timeout(popup); | ||||||
|  | 
 | ||||||
|  |     view_manager->switch_to(InfraredAppViewManager::ViewId::Popup); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneEditDeleteDone::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event->type == InfraredAppEvent::Type::PopupTimer) { | ||||||
|  |         if(app->get_edit_element() == InfraredApp::EditElement::Remote) { | ||||||
|  |             app->search_and_switch_to_previous_scene( | ||||||
|  |                 {InfraredApp::Scene::Start, InfraredApp::Scene::RemoteList}); | ||||||
|  |         } else { | ||||||
|  |             app->search_and_switch_to_previous_scene({InfraredApp::Scene::Remote}); | ||||||
|  |         } | ||||||
|  |         consumed = true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditDeleteDone::on_exit(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     Popup* popup = view_manager->get_popup(); | ||||||
|  |     popup_set_header(popup, nullptr, 0, 0, AlignLeft, AlignTop); | ||||||
|  | } | ||||||
| @ -0,0 +1,57 @@ | |||||||
|  | #include "../infrared_app.h" | ||||||
|  | #include "gui/modules/submenu.h" | ||||||
|  | 
 | ||||||
|  | static void submenu_callback(void* context, uint32_t index) { | ||||||
|  |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|  |     InfraredAppEvent event; | ||||||
|  | 
 | ||||||
|  |     event.type = InfraredAppEvent::Type::MenuSelected; | ||||||
|  |     event.payload.menu_index = index; | ||||||
|  | 
 | ||||||
|  |     app->get_view_manager()->send_event(&event); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditKeySelect::on_enter(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     Submenu* submenu = view_manager->get_submenu(); | ||||||
|  |     int item_number = 0; | ||||||
|  | 
 | ||||||
|  |     const char* header = | ||||||
|  |         app->get_edit_action() == InfraredApp::EditAction::Rename ? "Rename key:" : "Delete key:"; | ||||||
|  |     submenu_set_header(submenu, header); | ||||||
|  | 
 | ||||||
|  |     auto remote_manager = app->get_remote_manager(); | ||||||
|  |     buttons_names = remote_manager->get_button_list(); | ||||||
|  |     for(const auto& it : buttons_names) { | ||||||
|  |         submenu_add_item(submenu, it.c_str(), item_number++, submenu_callback, app); | ||||||
|  |     } | ||||||
|  |     if((item_number > 0) && (app->get_current_button() != InfraredApp::ButtonNA)) { | ||||||
|  |         submenu_set_selected_item(submenu, app->get_current_button()); | ||||||
|  |         app->set_current_button(InfraredApp::ButtonNA); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     view_manager->switch_to(InfraredAppViewManager::ViewId::Submenu); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneEditKeySelect::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event->type == InfraredAppEvent::Type::MenuSelected) { | ||||||
|  |         app->set_current_button(event->payload.menu_index); | ||||||
|  |         consumed = true; | ||||||
|  |         if(app->get_edit_action() == InfraredApp::EditAction::Rename) { | ||||||
|  |             app->switch_to_next_scene(InfraredApp::Scene::EditRename); | ||||||
|  |         } else { | ||||||
|  |             app->switch_to_next_scene(InfraredApp::Scene::EditDelete); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditKeySelect::on_exit(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     Submenu* submenu = view_manager->get_submenu(); | ||||||
|  | 
 | ||||||
|  |     submenu_reset(submenu); | ||||||
|  | } | ||||||
| @ -1,16 +1,16 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEditRename::on_enter(IrdaApp* app) { | void InfraredAppSceneEditRename::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     TextInput* text_input = view_manager->get_text_input(); |     TextInput* text_input = view_manager->get_text_input(); | ||||||
|     size_t enter_name_length = 0; |     size_t enter_name_length = 0; | ||||||
| 
 | 
 | ||||||
|     auto remote_manager = app->get_remote_manager(); |     auto remote_manager = app->get_remote_manager(); | ||||||
|     if(app->get_edit_element() == IrdaApp::EditElement::Button) { |     if(app->get_edit_element() == InfraredApp::EditElement::Button) { | ||||||
|         furi_assert(app->get_current_button() != IrdaApp::ButtonNA); |         furi_assert(app->get_current_button() != InfraredApp::ButtonNA); | ||||||
|         auto button_name = remote_manager->get_button_name(app->get_current_button()); |         auto button_name = remote_manager->get_button_name(app->get_current_button()); | ||||||
|         char* buffer_str = app->get_text_store(0); |         char* buffer_str = app->get_text_store(0); | ||||||
|         size_t max_len = IrdaAppRemoteManager::max_button_name_length; |         size_t max_len = InfraredAppRemoteManager::max_button_name_length; | ||||||
|         strncpy(buffer_str, button_name.c_str(), max_len); |         strncpy(buffer_str, button_name.c_str(), max_len); | ||||||
|         buffer_str[max_len + 1] = 0; |         buffer_str[max_len + 1] = 0; | ||||||
|         enter_name_length = max_len; |         enter_name_length = max_len; | ||||||
| @ -18,43 +18,43 @@ void IrdaAppSceneEditRename::on_enter(IrdaApp* app) { | |||||||
|     } else { |     } else { | ||||||
|         auto remote_name = remote_manager->get_remote_name(); |         auto remote_name = remote_manager->get_remote_name(); | ||||||
|         strncpy(app->get_text_store(0), remote_name.c_str(), app->get_text_store_size()); |         strncpy(app->get_text_store(0), remote_name.c_str(), app->get_text_store_size()); | ||||||
|         enter_name_length = IrdaAppRemoteManager::max_remote_name_length; |         enter_name_length = InfraredAppRemoteManager::max_remote_name_length; | ||||||
|         text_input_set_header_text(text_input, "Name the remote"); |         text_input_set_header_text(text_input, "Name the remote"); | ||||||
| 
 | 
 | ||||||
|         ValidatorIsFile* validator_is_file = |         ValidatorIsFile* validator_is_file = | ||||||
|             validator_is_file_alloc_init(app->irda_directory, app->irda_extension); |             validator_is_file_alloc_init(app->infrared_directory, app->infrared_extension); | ||||||
|         text_input_set_validator(text_input, validator_is_file_callback, validator_is_file); |         text_input_set_validator(text_input, validator_is_file_callback, validator_is_file); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     text_input_set_result_callback( |     text_input_set_result_callback( | ||||||
|         text_input, |         text_input, | ||||||
|         IrdaApp::text_input_callback, |         InfraredApp::text_input_callback, | ||||||
|         app, |         app, | ||||||
|         app->get_text_store(0), |         app->get_text_store(0), | ||||||
|         enter_name_length, |         enter_name_length, | ||||||
|         false); |         false); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::TextInput); |     view_manager->switch_to(InfraredAppViewManager::ViewId::TextInput); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneEditRename::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneEditRename::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::TextEditDone) { |     if(event->type == InfraredAppEvent::Type::TextEditDone) { | ||||||
|         auto remote_manager = app->get_remote_manager(); |         auto remote_manager = app->get_remote_manager(); | ||||||
|         bool result = false; |         bool result = false; | ||||||
|         if(app->get_edit_element() == IrdaApp::EditElement::Button) { |         if(app->get_edit_element() == InfraredApp::EditElement::Button) { | ||||||
|             result = |             result = | ||||||
|                 remote_manager->rename_button(app->get_current_button(), app->get_text_store(0)); |                 remote_manager->rename_button(app->get_current_button(), app->get_text_store(0)); | ||||||
|             app->set_current_button(IrdaApp::ButtonNA); |             app->set_current_button(InfraredApp::ButtonNA); | ||||||
|         } else { |         } else { | ||||||
|             result = remote_manager->rename_remote(app->get_text_store(0)); |             result = remote_manager->rename_remote(app->get_text_store(0)); | ||||||
|         } |         } | ||||||
|         if(!result) { |         if(!result) { | ||||||
|             app->search_and_switch_to_previous_scene( |             app->search_and_switch_to_previous_scene( | ||||||
|                 {IrdaApp::Scene::Start, IrdaApp::Scene::RemoteList}); |                 {InfraredApp::Scene::Start, InfraredApp::Scene::RemoteList}); | ||||||
|         } else { |         } else { | ||||||
|             app->switch_to_next_scene_without_saving(IrdaApp::Scene::EditRenameDone); |             app->switch_to_next_scene_without_saving(InfraredApp::Scene::EditRenameDone); | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } |     } | ||||||
| @ -62,7 +62,7 @@ bool IrdaAppSceneEditRename::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneEditRename::on_exit(IrdaApp* app) { | void InfraredAppSceneEditRename::on_exit(InfraredApp* app) { | ||||||
|     TextInput* text_input = app->get_view_manager()->get_text_input(); |     TextInput* text_input = app->get_view_manager()->get_text_input(); | ||||||
| 
 | 
 | ||||||
|     void* validator_context = text_input_get_validator_callback_context(text_input); |     void* validator_context = text_input_get_validator_callback_context(text_input); | ||||||
| @ -0,0 +1,31 @@ | |||||||
|  | #include "../infrared_app.h" | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditRenameDone::on_enter(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     Popup* popup = view_manager->get_popup(); | ||||||
|  | 
 | ||||||
|  |     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); | ||||||
|  | 
 | ||||||
|  |     popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); | ||||||
|  | 
 | ||||||
|  |     popup_set_callback(popup, InfraredApp::popup_callback); | ||||||
|  |     popup_set_context(popup, app); | ||||||
|  |     popup_set_timeout(popup, 1500); | ||||||
|  |     popup_enable_timeout(popup); | ||||||
|  | 
 | ||||||
|  |     view_manager->switch_to(InfraredAppViewManager::ViewId::Popup); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneEditRenameDone::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event->type == InfraredAppEvent::Type::PopupTimer) { | ||||||
|  |         app->switch_to_next_scene(InfraredApp::Scene::Remote); | ||||||
|  |         consumed = true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneEditRenameDone::on_exit(InfraredApp* app) { | ||||||
|  | } | ||||||
							
								
								
									
										75
									
								
								applications/infrared/scene/infrared_app_scene_learn.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,75 @@ | |||||||
|  | #include "../infrared_app.h" | ||||||
|  | #include "../infrared_app_event.h" | ||||||
|  | #include "infrared.h" | ||||||
|  | #include <infrared_worker.h> | ||||||
|  | 
 | ||||||
|  | static void signal_received_callback(void* context, InfraredWorkerSignal* received_signal) { | ||||||
|  |     furi_assert(context); | ||||||
|  |     furi_assert(received_signal); | ||||||
|  | 
 | ||||||
|  |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|  | 
 | ||||||
|  |     if(infrared_worker_signal_is_decoded(received_signal)) { | ||||||
|  |         InfraredAppSignal signal(infrared_worker_get_decoded_signal(received_signal)); | ||||||
|  |         app->set_received_signal(signal); | ||||||
|  |     } else { | ||||||
|  |         const uint32_t* timings; | ||||||
|  |         size_t timings_cnt; | ||||||
|  |         infrared_worker_get_raw_signal(received_signal, &timings, &timings_cnt); | ||||||
|  |         InfraredAppSignal signal( | ||||||
|  |             timings, timings_cnt, INFRARED_COMMON_CARRIER_FREQUENCY, INFRARED_COMMON_DUTY_CYCLE); | ||||||
|  |         app->set_received_signal(signal); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     infrared_worker_rx_set_received_signal_callback(app->get_infrared_worker(), NULL, NULL); | ||||||
|  |     InfraredAppEvent event; | ||||||
|  |     event.type = InfraredAppEvent::Type::InfraredMessageReceived; | ||||||
|  |     auto view_manager = app->get_view_manager(); | ||||||
|  |     view_manager->send_event(&event); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneLearn::on_enter(InfraredApp* app) { | ||||||
|  |     auto view_manager = app->get_view_manager(); | ||||||
|  |     auto popup = view_manager->get_popup(); | ||||||
|  | 
 | ||||||
|  |     auto worker = app->get_infrared_worker(); | ||||||
|  |     infrared_worker_rx_set_received_signal_callback(worker, signal_received_callback, app); | ||||||
|  |     infrared_worker_rx_start(worker); | ||||||
|  | 
 | ||||||
|  |     popup_set_icon(popup, 0, 32, &I_InfraredLearnShort_128x31); | ||||||
|  |     popup_set_text( | ||||||
|  |         popup, "Point the remote at IR port\nand push the button", 5, 10, AlignLeft, AlignCenter); | ||||||
|  |     popup_set_callback(popup, NULL); | ||||||
|  | 
 | ||||||
|  |     view_manager->switch_to(InfraredAppViewManager::ViewId::Popup); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneLearn::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     switch(event->type) { | ||||||
|  |     case InfraredAppEvent::Type::Tick: | ||||||
|  |         consumed = true; | ||||||
|  |         app->notify_red_blink(); | ||||||
|  |         break; | ||||||
|  |     case InfraredAppEvent::Type::InfraredMessageReceived: | ||||||
|  |         app->notify_success(); | ||||||
|  |         app->switch_to_next_scene_without_saving(InfraredApp::Scene::LearnSuccess); | ||||||
|  |         break; | ||||||
|  |     case InfraredAppEvent::Type::Back: | ||||||
|  |         consumed = true; | ||||||
|  |         app->switch_to_previous_scene(); | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         furi_assert(0); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneLearn::on_exit(InfraredApp* app) { | ||||||
|  |     infrared_worker_rx_stop(app->get_infrared_worker()); | ||||||
|  |     auto view_manager = app->get_view_manager(); | ||||||
|  |     auto popup = view_manager->get_popup(); | ||||||
|  |     popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignCenter); | ||||||
|  | } | ||||||
| @ -1,8 +1,8 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnDone::on_enter(IrdaApp* app) { | void InfraredAppSceneLearnDone::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Popup* popup = view_manager->get_popup(); |     Popup* popup = view_manager->get_popup(); | ||||||
| 
 | 
 | ||||||
|     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); |     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); | ||||||
| @ -14,28 +14,28 @@ void IrdaAppSceneLearnDone::on_enter(IrdaApp* app) { | |||||||
|         popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); |         popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     popup_set_callback(popup, IrdaApp::popup_callback); |     popup_set_callback(popup, InfraredApp::popup_callback); | ||||||
|     popup_set_context(popup, app); |     popup_set_context(popup, app); | ||||||
|     popup_set_timeout(popup, 1500); |     popup_set_timeout(popup, 1500); | ||||||
|     popup_enable_timeout(popup); |     popup_enable_timeout(popup); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Popup); |     view_manager->switch_to(InfraredAppViewManager::ViewId::Popup); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneLearnDone::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneLearnDone::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::PopupTimer) { |     if(event->type == InfraredAppEvent::Type::PopupTimer) { | ||||||
|         app->switch_to_next_scene(IrdaApp::Scene::Remote); |         app->switch_to_next_scene(InfraredApp::Scene::Remote); | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnDone::on_exit(IrdaApp* app) { | void InfraredAppSceneLearnDone::on_exit(InfraredApp* app) { | ||||||
|     app->set_learn_new_remote(false); |     app->set_learn_new_remote(false); | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Popup* popup = view_manager->get_popup(); |     Popup* popup = view_manager->get_popup(); | ||||||
|     popup_set_header(popup, nullptr, 0, 0, AlignLeft, AlignTop); |     popup_set_header(popup, nullptr, 0, 0, AlignLeft, AlignTop); | ||||||
| } | } | ||||||
| @ -1,8 +1,8 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "gui/modules/text_input.h" | #include "gui/modules/text_input.h" | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnEnterName::on_enter(IrdaApp* app) { | void InfraredAppSceneLearnEnterName::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     TextInput* text_input = view_manager->get_text_input(); |     TextInput* text_input = view_manager->get_text_input(); | ||||||
| 
 | 
 | ||||||
|     auto signal = app->get_received_signal(); |     auto signal = app->get_received_signal(); | ||||||
| @ -12,8 +12,8 @@ void IrdaAppSceneLearnEnterName::on_enter(IrdaApp* app) { | |||||||
|         app->set_text_store( |         app->set_text_store( | ||||||
|             0, |             0, | ||||||
|             "%.4s_%0*lX", |             "%.4s_%0*lX", | ||||||
|             irda_get_protocol_name(message->protocol), |             infrared_get_protocol_name(message->protocol), | ||||||
|             ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4), |             ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4), | ||||||
|             message->command); |             message->command); | ||||||
|     } else { |     } else { | ||||||
|         auto raw_signal = signal.get_raw_signal(); |         auto raw_signal = signal.get_raw_signal(); | ||||||
| @ -23,19 +23,19 @@ void IrdaAppSceneLearnEnterName::on_enter(IrdaApp* app) { | |||||||
|     text_input_set_header_text(text_input, "Name the key"); |     text_input_set_header_text(text_input, "Name the key"); | ||||||
|     text_input_set_result_callback( |     text_input_set_result_callback( | ||||||
|         text_input, |         text_input, | ||||||
|         IrdaApp::text_input_callback, |         InfraredApp::text_input_callback, | ||||||
|         app, |         app, | ||||||
|         app->get_text_store(0), |         app->get_text_store(0), | ||||||
|         IrdaAppRemoteManager::max_button_name_length, |         InfraredAppRemoteManager::max_button_name_length, | ||||||
|         true); |         true); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::TextInput); |     view_manager->switch_to(InfraredAppViewManager::ViewId::TextInput); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneLearnEnterName::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneLearnEnterName::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::TextEditDone) { |     if(event->type == InfraredAppEvent::Type::TextEditDone) { | ||||||
|         auto remote_manager = app->get_remote_manager(); |         auto remote_manager = app->get_remote_manager(); | ||||||
|         bool result = false; |         bool result = false; | ||||||
|         if(app->get_learn_new_remote()) { |         if(app->get_learn_new_remote()) { | ||||||
| @ -48,13 +48,13 @@ bool IrdaAppSceneLearnEnterName::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
| 
 | 
 | ||||||
|         if(!result) { |         if(!result) { | ||||||
|             app->search_and_switch_to_previous_scene( |             app->search_and_switch_to_previous_scene( | ||||||
|                 {IrdaApp::Scene::Start, IrdaApp::Scene::RemoteList}); |                 {InfraredApp::Scene::Start, InfraredApp::Scene::RemoteList}); | ||||||
|         } else { |         } else { | ||||||
|             app->switch_to_next_scene_without_saving(IrdaApp::Scene::LearnDone); |             app->switch_to_next_scene_without_saving(InfraredApp::Scene::LearnDone); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnEnterName::on_exit(IrdaApp* app) { | void InfraredAppSceneLearnEnterName::on_exit(InfraredApp* app) { | ||||||
| } | } | ||||||
| @ -3,42 +3,44 @@ | |||||||
| #include <memory> | #include <memory> | ||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| 
 | 
 | ||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "irda.h" | #include "infrared.h" | ||||||
| 
 | 
 | ||||||
| static void dialog_result_callback(DialogExResult result, void* context) { | static void dialog_result_callback(DialogExResult result, void* context) { | ||||||
|     auto app = static_cast<IrdaApp*>(context); |     auto app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::DialogExSelected; |     event.type = InfraredAppEvent::Type::DialogExSelected; | ||||||
|     event.payload.dialog_ex_result = result; |     event.payload.dialog_ex_result = result; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnSuccess::on_enter(IrdaApp* app) { | void InfraredAppSceneLearnSuccess::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     DialogEx* dialog_ex = view_manager->get_dialog_ex(); |     DialogEx* dialog_ex = view_manager->get_dialog_ex(); | ||||||
| 
 | 
 | ||||||
|     DOLPHIN_DEED(DolphinDeedIrLearnSuccess); |     DOLPHIN_DEED(DolphinDeedIrLearnSuccess); | ||||||
|     app->notify_green_on(); |     app->notify_green_on(); | ||||||
| 
 | 
 | ||||||
|     irda_worker_tx_set_get_signal_callback( |     infrared_worker_tx_set_get_signal_callback( | ||||||
|         app->get_irda_worker(), irda_worker_tx_get_signal_steady_callback, app); |         app->get_infrared_worker(), infrared_worker_tx_get_signal_steady_callback, app); | ||||||
|     irda_worker_tx_set_signal_sent_callback( |     infrared_worker_tx_set_signal_sent_callback( | ||||||
|         app->get_irda_worker(), IrdaApp::signal_sent_callback, app); |         app->get_infrared_worker(), InfraredApp::signal_sent_callback, app); | ||||||
| 
 | 
 | ||||||
|     auto signal = app->get_received_signal(); |     auto signal = app->get_received_signal(); | ||||||
| 
 | 
 | ||||||
|     if(!signal.is_raw()) { |     if(!signal.is_raw()) { | ||||||
|         auto message = &signal.get_message(); |         auto message = &signal.get_message(); | ||||||
|         uint8_t adr_digits = ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4); |         uint8_t adr_digits = | ||||||
|         uint8_t cmd_digits = ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4); |             ROUND_UP_TO(infrared_get_protocol_address_length(message->protocol), 4); | ||||||
|  |         uint8_t cmd_digits = | ||||||
|  |             ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4); | ||||||
|         uint8_t max_digits = MAX(adr_digits, cmd_digits); |         uint8_t max_digits = MAX(adr_digits, cmd_digits); | ||||||
|         max_digits = MIN(max_digits, 7); |         max_digits = MIN(max_digits, 7); | ||||||
|         size_t label_x_offset = 63 + (7 - max_digits) * 3; |         size_t label_x_offset = 63 + (7 - max_digits) * 3; | ||||||
| 
 | 
 | ||||||
|         app->set_text_store(0, "%s", irda_get_protocol_name(message->protocol)); |         app->set_text_store(0, "%s", infrared_get_protocol_name(message->protocol)); | ||||||
|         app->set_text_store( |         app->set_text_store( | ||||||
|             1, |             1, | ||||||
|             "A: 0x%0*lX\nC: 0x%0*lX\n", |             "A: 0x%0*lX\nC: 0x%0*lX\n", | ||||||
| @ -64,24 +66,24 @@ void IrdaAppSceneLearnSuccess::on_enter(IrdaApp* app) { | |||||||
|     dialog_ex_set_context(dialog_ex, app); |     dialog_ex_set_context(dialog_ex, app); | ||||||
|     dialog_ex_enable_extended_events(dialog_ex); |     dialog_ex_enable_extended_events(dialog_ex); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::DialogEx); |     view_manager->switch_to(InfraredAppViewManager::ViewId::DialogEx); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneLearnSuccess::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneLearnSuccess::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
|     if(event->type == IrdaAppEvent::Type::Tick) { |     if(event->type == InfraredAppEvent::Type::Tick) { | ||||||
|         /* Send event every tick to suppress any switching off green light */ |         /* Send event every tick to suppress any switching off green light */ | ||||||
|         if(!button_pressed) { |         if(!button_pressed) { | ||||||
|             app->notify_green_on(); |             app->notify_green_on(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::DialogExSelected) { |     if(event->type == InfraredAppEvent::Type::DialogExSelected) { | ||||||
|         switch(event->payload.dialog_ex_result) { |         switch(event->payload.dialog_ex_result) { | ||||||
|         case DialogExResultLeft: |         case DialogExResultLeft: | ||||||
|             consumed = true; |             consumed = true; | ||||||
|             if(!button_pressed) { |             if(!button_pressed) { | ||||||
|                 app->switch_to_next_scene_without_saving(IrdaApp::Scene::Learn); |                 app->switch_to_next_scene_without_saving(InfraredApp::Scene::Learn); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         case DialogExResultRight: { |         case DialogExResultRight: { | ||||||
| @ -89,7 +91,7 @@ bool IrdaAppSceneLearnSuccess::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|             FileWorkerCpp file_worker; |             FileWorkerCpp file_worker; | ||||||
|             if(!button_pressed) { |             if(!button_pressed) { | ||||||
|                 if(file_worker.check_errors()) { |                 if(file_worker.check_errors()) { | ||||||
|                     app->switch_to_next_scene(IrdaApp::Scene::LearnEnterName); |                     app->switch_to_next_scene(InfraredApp::Scene::LearnEnterName); | ||||||
|                 } else { |                 } else { | ||||||
|                     app->switch_to_previous_scene(); |                     app->switch_to_previous_scene(); | ||||||
|                 } |                 } | ||||||
| @ -103,21 +105,22 @@ bool IrdaAppSceneLearnSuccess::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
| 
 | 
 | ||||||
|                 auto signal = app->get_received_signal(); |                 auto signal = app->get_received_signal(); | ||||||
|                 if(signal.is_raw()) { |                 if(signal.is_raw()) { | ||||||
|                     irda_worker_set_raw_signal( |                     infrared_worker_set_raw_signal( | ||||||
|                         app->get_irda_worker(), |                         app->get_infrared_worker(), | ||||||
|                         signal.get_raw_signal().timings, |                         signal.get_raw_signal().timings, | ||||||
|                         signal.get_raw_signal().timings_cnt); |                         signal.get_raw_signal().timings_cnt); | ||||||
|                 } else { |                 } else { | ||||||
|                     irda_worker_set_decoded_signal(app->get_irda_worker(), &signal.get_message()); |                     infrared_worker_set_decoded_signal( | ||||||
|  |                         app->get_infrared_worker(), &signal.get_message()); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 irda_worker_tx_start(app->get_irda_worker()); |                 infrared_worker_tx_start(app->get_infrared_worker()); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         case DialogExReleaseCenter: |         case DialogExReleaseCenter: | ||||||
|             if(button_pressed) { |             if(button_pressed) { | ||||||
|                 button_pressed = false; |                 button_pressed = false; | ||||||
|                 irda_worker_tx_stop(app->get_irda_worker()); |                 infrared_worker_tx_stop(app->get_infrared_worker()); | ||||||
|                 app->notify_green_off(); |                 app->notify_green_off(); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| @ -126,9 +129,9 @@ bool IrdaAppSceneLearnSuccess::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::Back) { |     if(event->type == InfraredAppEvent::Type::Back) { | ||||||
|         if(!button_pressed) { |         if(!button_pressed) { | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::AskBack); |             app->switch_to_next_scene(InfraredApp::Scene::AskBack); | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
|     } |     } | ||||||
| @ -136,11 +139,11 @@ bool IrdaAppSceneLearnSuccess::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneLearnSuccess::on_exit(IrdaApp* app) { | void InfraredAppSceneLearnSuccess::on_exit(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     DialogEx* dialog_ex = view_manager->get_dialog_ex(); |     DialogEx* dialog_ex = view_manager->get_dialog_ex(); | ||||||
|     dialog_ex_reset(dialog_ex); |     dialog_ex_reset(dialog_ex); | ||||||
|     app->notify_green_off(); |     app->notify_green_off(); | ||||||
|     irda_worker_tx_set_get_signal_callback(app->get_irda_worker(), nullptr, nullptr); |     infrared_worker_tx_set_get_signal_callback(app->get_infrared_worker(), nullptr, nullptr); | ||||||
|     irda_worker_tx_set_signal_sent_callback(app->get_irda_worker(), nullptr, nullptr); |     infrared_worker_tx_set_signal_sent_callback(app->get_infrared_worker(), nullptr, nullptr); | ||||||
| } | } | ||||||
| @ -1,9 +1,9 @@ | |||||||
| #include <gui/modules/button_menu.h> | #include <gui/modules/button_menu.h> | ||||||
| #include <input/input.h> | #include <input/input.h> | ||||||
| #include <irda_worker.h> | #include <infrared_worker.h> | ||||||
| #include <dolphin/dolphin.h> | #include <dolphin/dolphin.h> | ||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "../irda_app_view_manager.h" | #include "../infrared_app_view_manager.h" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     ButtonIndexPlus = -2, |     ButtonIndexPlus = -2, | ||||||
| @ -12,15 +12,15 @@ typedef enum { | |||||||
| } ButtonIndex; | } ButtonIndex; | ||||||
| 
 | 
 | ||||||
| static void button_menu_callback(void* context, int32_t index, InputType type) { | static void button_menu_callback(void* context, int32_t index, InputType type) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     if(type == InputTypePress) { |     if(type == InputTypePress) { | ||||||
|         event.type = IrdaAppEvent::Type::MenuSelectedPress; |         event.type = InfraredAppEvent::Type::MenuSelectedPress; | ||||||
|     } else if(type == InputTypeRelease) { |     } else if(type == InputTypeRelease) { | ||||||
|         event.type = IrdaAppEvent::Type::MenuSelectedRelease; |         event.type = InfraredAppEvent::Type::MenuSelectedRelease; | ||||||
|     } else if(type == InputTypeShort) { |     } else if(type == InputTypeShort) { | ||||||
|         event.type = IrdaAppEvent::Type::MenuSelected; |         event.type = InfraredAppEvent::Type::MenuSelected; | ||||||
|     } else { |     } else { | ||||||
|         furi_assert(0); |         furi_assert(0); | ||||||
|     } |     } | ||||||
| @ -30,17 +30,17 @@ static void button_menu_callback(void* context, int32_t index, InputType type) { | |||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneRemote::on_enter(IrdaApp* app) { | void InfraredAppSceneRemote::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     ButtonMenu* button_menu = view_manager->get_button_menu(); |     ButtonMenu* button_menu = view_manager->get_button_menu(); | ||||||
|     auto remote_manager = app->get_remote_manager(); |     auto remote_manager = app->get_remote_manager(); | ||||||
|     int i = 0; |     int i = 0; | ||||||
|     button_pressed = false; |     button_pressed = false; | ||||||
| 
 | 
 | ||||||
|     irda_worker_tx_set_get_signal_callback( |     infrared_worker_tx_set_get_signal_callback( | ||||||
|         app->get_irda_worker(), irda_worker_tx_get_signal_steady_callback, app); |         app->get_infrared_worker(), infrared_worker_tx_get_signal_steady_callback, app); | ||||||
|     irda_worker_tx_set_signal_sent_callback( |     infrared_worker_tx_set_signal_sent_callback( | ||||||
|         app->get_irda_worker(), IrdaApp::signal_sent_callback, app); |         app->get_infrared_worker(), InfraredApp::signal_sent_callback, app); | ||||||
|     buttons_names = remote_manager->get_button_list(); |     buttons_names = remote_manager->get_button_list(); | ||||||
| 
 | 
 | ||||||
|     i = 0; |     i = 0; | ||||||
| @ -60,32 +60,32 @@ void IrdaAppSceneRemote::on_enter(IrdaApp* app) { | |||||||
|         button_menu_set_selected_item(button_menu, buttonmenu_item_selected); |         button_menu_set_selected_item(button_menu, buttonmenu_item_selected); | ||||||
|         buttonmenu_item_selected = ButtonIndexNA; |         buttonmenu_item_selected = ButtonIndexNA; | ||||||
|     } |     } | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::ButtonMenu); |     view_manager->switch_to(InfraredAppViewManager::ViewId::ButtonMenu); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneRemote::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneRemote::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = true; |     bool consumed = true; | ||||||
| 
 | 
 | ||||||
|     if((event->type == IrdaAppEvent::Type::MenuSelected) || |     if((event->type == InfraredAppEvent::Type::MenuSelected) || | ||||||
|        (event->type == IrdaAppEvent::Type::MenuSelectedPress) || |        (event->type == InfraredAppEvent::Type::MenuSelectedPress) || | ||||||
|        (event->type == IrdaAppEvent::Type::MenuSelectedRelease)) { |        (event->type == InfraredAppEvent::Type::MenuSelectedRelease)) { | ||||||
|         switch(event->payload.menu_index) { |         switch(event->payload.menu_index) { | ||||||
|         case ButtonIndexPlus: |         case ButtonIndexPlus: | ||||||
|             furi_assert(event->type == IrdaAppEvent::Type::MenuSelected); |             furi_assert(event->type == InfraredAppEvent::Type::MenuSelected); | ||||||
|             app->notify_click(); |             app->notify_click(); | ||||||
|             buttonmenu_item_selected = event->payload.menu_index; |             buttonmenu_item_selected = event->payload.menu_index; | ||||||
|             app->set_learn_new_remote(false); |             app->set_learn_new_remote(false); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Learn); |             app->switch_to_next_scene(InfraredApp::Scene::Learn); | ||||||
|             break; |             break; | ||||||
|         case ButtonIndexEdit: |         case ButtonIndexEdit: | ||||||
|             furi_assert(event->type == IrdaAppEvent::Type::MenuSelected); |             furi_assert(event->type == InfraredAppEvent::Type::MenuSelected); | ||||||
|             app->notify_click(); |             app->notify_click(); | ||||||
|             buttonmenu_item_selected = event->payload.menu_index; |             buttonmenu_item_selected = event->payload.menu_index; | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Edit); |             app->switch_to_next_scene(InfraredApp::Scene::Edit); | ||||||
|             break; |             break; | ||||||
|         default: |         default: | ||||||
|             furi_assert(event->type != IrdaAppEvent::Type::MenuSelected); |             furi_assert(event->type != InfraredAppEvent::Type::MenuSelected); | ||||||
|             bool pressed = (event->type == IrdaAppEvent::Type::MenuSelectedPress); |             bool pressed = (event->type == InfraredAppEvent::Type::MenuSelectedPress); | ||||||
| 
 | 
 | ||||||
|             if(pressed && !button_pressed) { |             if(pressed && !button_pressed) { | ||||||
|                 button_pressed = true; |                 button_pressed = true; | ||||||
| @ -94,28 +94,28 @@ bool IrdaAppSceneRemote::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|                 auto button_signal = |                 auto button_signal = | ||||||
|                     app->get_remote_manager()->get_button_data(event->payload.menu_index); |                     app->get_remote_manager()->get_button_data(event->payload.menu_index); | ||||||
|                 if(button_signal.is_raw()) { |                 if(button_signal.is_raw()) { | ||||||
|                     irda_worker_set_raw_signal( |                     infrared_worker_set_raw_signal( | ||||||
|                         app->get_irda_worker(), |                         app->get_infrared_worker(), | ||||||
|                         button_signal.get_raw_signal().timings, |                         button_signal.get_raw_signal().timings, | ||||||
|                         button_signal.get_raw_signal().timings_cnt); |                         button_signal.get_raw_signal().timings_cnt); | ||||||
|                 } else { |                 } else { | ||||||
|                     irda_worker_set_decoded_signal( |                     infrared_worker_set_decoded_signal( | ||||||
|                         app->get_irda_worker(), &button_signal.get_message()); |                         app->get_infrared_worker(), &button_signal.get_message()); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 DOLPHIN_DEED(DolphinDeedIrSend); |                 DOLPHIN_DEED(DolphinDeedIrSend); | ||||||
|                 irda_worker_tx_start(app->get_irda_worker()); |                 infrared_worker_tx_start(app->get_infrared_worker()); | ||||||
|             } else if(!pressed && button_pressed) { |             } else if(!pressed && button_pressed) { | ||||||
|                 button_pressed = false; |                 button_pressed = false; | ||||||
|                 irda_worker_tx_stop(app->get_irda_worker()); |                 infrared_worker_tx_stop(app->get_infrared_worker()); | ||||||
|                 app->notify_green_off(); |                 app->notify_green_off(); | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|     } else if(event->type == IrdaAppEvent::Type::Back) { |     } else if(event->type == InfraredAppEvent::Type::Back) { | ||||||
|         if(!button_pressed) { |         if(!button_pressed) { | ||||||
|             app->search_and_switch_to_previous_scene( |             app->search_and_switch_to_previous_scene( | ||||||
|                 {IrdaApp::Scene::Start, IrdaApp::Scene::RemoteList}); |                 {InfraredApp::Scene::Start, InfraredApp::Scene::RemoteList}); | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         consumed = false; |         consumed = false; | ||||||
| @ -124,10 +124,10 @@ bool IrdaAppSceneRemote::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneRemote::on_exit(IrdaApp* app) { | void InfraredAppSceneRemote::on_exit(InfraredApp* app) { | ||||||
|     irda_worker_tx_set_get_signal_callback(app->get_irda_worker(), nullptr, nullptr); |     infrared_worker_tx_set_get_signal_callback(app->get_infrared_worker(), nullptr, nullptr); | ||||||
|     irda_worker_tx_set_signal_sent_callback(app->get_irda_worker(), nullptr, nullptr); |     infrared_worker_tx_set_signal_sent_callback(app->get_infrared_worker(), nullptr, nullptr); | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     ButtonMenu* button_menu = view_manager->get_button_menu(); |     ButtonMenu* button_menu = view_manager->get_button_menu(); | ||||||
| 
 | 
 | ||||||
|     button_menu_reset(button_menu); |     button_menu_reset(button_menu); | ||||||
| @ -1,9 +1,9 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| #include "irda/irda_app_event.h" | #include "infrared/infrared_app_event.h" | ||||||
| #include <text_store.h> | #include <text_store.h> | ||||||
| #include <file_worker_cpp.h> | #include <file_worker_cpp.h> | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneRemoteList::on_enter(IrdaApp* app) { | void InfraredAppSceneRemoteList::on_enter(InfraredApp* app) { | ||||||
|     furi_assert(app); |     furi_assert(app); | ||||||
| 
 | 
 | ||||||
|     FileWorkerCpp file_worker; |     FileWorkerCpp file_worker; | ||||||
| @ -13,23 +13,24 @@ void IrdaAppSceneRemoteList::on_enter(IrdaApp* app) { | |||||||
|     auto last_selected_remote = remote_manager->get_remote_name(); |     auto last_selected_remote = remote_manager->get_remote_name(); | ||||||
|     const char* last_selected_remote_name = |     const char* last_selected_remote_name = | ||||||
|         last_selected_remote.size() ? last_selected_remote.c_str() : nullptr; |         last_selected_remote.size() ? last_selected_remote.c_str() : nullptr; | ||||||
|     auto filename_ts = std::make_unique<TextStore>(IrdaAppRemoteManager::max_remote_name_length); |     auto filename_ts = | ||||||
|  |         std::make_unique<TextStore>(InfraredAppRemoteManager::max_remote_name_length); | ||||||
| 
 | 
 | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     ButtonMenu* button_menu = view_manager->get_button_menu(); |     ButtonMenu* button_menu = view_manager->get_button_menu(); | ||||||
|     button_menu_reset(button_menu); |     button_menu_reset(button_menu); | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::ButtonMenu); |     view_manager->switch_to(InfraredAppViewManager::ViewId::ButtonMenu); | ||||||
| 
 | 
 | ||||||
|     file_select_result = file_worker.file_select( |     file_select_result = file_worker.file_select( | ||||||
|         IrdaApp::irda_directory, |         InfraredApp::infrared_directory, | ||||||
|         IrdaApp::irda_extension, |         InfraredApp::infrared_extension, | ||||||
|         filename_ts->text, |         filename_ts->text, | ||||||
|         filename_ts->text_size, |         filename_ts->text_size, | ||||||
|         last_selected_remote_name); |         last_selected_remote_name); | ||||||
| 
 | 
 | ||||||
|     if(file_select_result) { |     if(file_select_result) { | ||||||
|         if(remote_manager->load(std::string(filename_ts->text))) { |         if(remote_manager->load(std::string(filename_ts->text))) { | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Remote); |             app->switch_to_next_scene(InfraredApp::Scene::Remote); | ||||||
|             result = true; |             result = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -39,11 +40,11 @@ void IrdaAppSceneRemoteList::on_enter(IrdaApp* app) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneRemoteList::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneRemoteList::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneRemoteList::on_exit(IrdaApp* app) { | void InfraredAppSceneRemoteList::on_exit(InfraredApp* app) { | ||||||
| } | } | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     SubmenuIndexUniversalLibrary, |     SubmenuIndexUniversalLibrary, | ||||||
| @ -7,17 +7,17 @@ typedef enum { | |||||||
| } SubmenuIndex; | } SubmenuIndex; | ||||||
| 
 | 
 | ||||||
| static void submenu_callback(void* context, uint32_t index) { | static void submenu_callback(void* context, uint32_t index) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::MenuSelected; |     event.type = InfraredAppEvent::Type::MenuSelected; | ||||||
|     event.payload.menu_index = index; |     event.payload.menu_index = index; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneStart::on_enter(IrdaApp* app) { | void InfraredAppSceneStart::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     submenu_add_item( |     submenu_add_item( | ||||||
| @ -28,24 +28,24 @@ void IrdaAppSceneStart::on_enter(IrdaApp* app) { | |||||||
|     submenu_set_selected_item(submenu, submenu_item_selected); |     submenu_set_selected_item(submenu, submenu_item_selected); | ||||||
|     submenu_item_selected = 0; |     submenu_item_selected = 0; | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Submenu); |     view_manager->switch_to(InfraredAppViewManager::ViewId::Submenu); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneStart::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneStart::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::MenuSelected) { |     if(event->type == InfraredAppEvent::Type::MenuSelected) { | ||||||
|         submenu_item_selected = event->payload.menu_index; |         submenu_item_selected = event->payload.menu_index; | ||||||
|         switch(event->payload.menu_index) { |         switch(event->payload.menu_index) { | ||||||
|         case SubmenuIndexUniversalLibrary: |         case SubmenuIndexUniversalLibrary: | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Universal); |             app->switch_to_next_scene(InfraredApp::Scene::Universal); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexLearnNewRemote: |         case SubmenuIndexLearnNewRemote: | ||||||
|             app->set_learn_new_remote(true); |             app->set_learn_new_remote(true); | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::Learn); |             app->switch_to_next_scene(InfraredApp::Scene::Learn); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexSavedRemotes: |         case SubmenuIndexSavedRemotes: | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::RemoteList); |             app->switch_to_next_scene(InfraredApp::Scene::RemoteList); | ||||||
|             break; |             break; | ||||||
|         default: |         default: | ||||||
|             furi_assert(0); |             furi_assert(0); | ||||||
| @ -57,8 +57,8 @@ bool IrdaAppSceneStart::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneStart::on_exit(IrdaApp* app) { | void InfraredAppSceneStart::on_exit(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     app->get_remote_manager()->reset_remote(); |     app->get_remote_manager()->reset_remote(); | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #include "../irda_app.h" | #include "../infrared_app.h" | ||||||
| 
 | 
 | ||||||
| typedef enum { | typedef enum { | ||||||
|     SubmenuIndexUniversalTV, |     SubmenuIndexUniversalTV, | ||||||
| @ -7,40 +7,40 @@ typedef enum { | |||||||
| } SubmenuIndex; | } SubmenuIndex; | ||||||
| 
 | 
 | ||||||
| static void submenu_callback(void* context, uint32_t index) { | static void submenu_callback(void* context, uint32_t index) { | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|     IrdaAppEvent event; |     InfraredAppEvent event; | ||||||
| 
 | 
 | ||||||
|     event.type = IrdaAppEvent::Type::MenuSelected; |     event.type = InfraredAppEvent::Type::MenuSelected; | ||||||
|     event.payload.menu_index = index; |     event.payload.menu_index = index; | ||||||
| 
 | 
 | ||||||
|     app->get_view_manager()->send_event(&event); |     app->get_view_manager()->send_event(&event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneUniversal::on_enter(IrdaApp* app) { | void InfraredAppSceneUniversal::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     submenu_add_item(submenu, "TV's", SubmenuIndexUniversalTV, submenu_callback, app); |     submenu_add_item(submenu, "TV's", SubmenuIndexUniversalTV, submenu_callback, app); | ||||||
|     submenu_set_selected_item(submenu, submenu_item_selected); |     submenu_set_selected_item(submenu, submenu_item_selected); | ||||||
|     submenu_item_selected = 0; |     submenu_item_selected = 0; | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Submenu); |     view_manager->switch_to(InfraredAppViewManager::ViewId::Submenu); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IrdaAppSceneUniversal::on_event(IrdaApp* app, IrdaAppEvent* event) { | bool InfraredAppSceneUniversal::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event->type == IrdaAppEvent::Type::MenuSelected) { |     if(event->type == InfraredAppEvent::Type::MenuSelected) { | ||||||
|         submenu_item_selected = event->payload.menu_index; |         submenu_item_selected = event->payload.menu_index; | ||||||
|         switch(event->payload.menu_index) { |         switch(event->payload.menu_index) { | ||||||
|         case SubmenuIndexUniversalTV: |         case SubmenuIndexUniversalTV: | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::UniversalTV); |             app->switch_to_next_scene(InfraredApp::Scene::UniversalTV); | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexUniversalAudio: |         case SubmenuIndexUniversalAudio: | ||||||
|             //            app->switch_to_next_scene(IrdaApp::Scene::UniversalAudio);
 |             //            app->switch_to_next_scene(InfraredApp::Scene::UniversalAudio);
 | ||||||
|             break; |             break; | ||||||
|         case SubmenuIndexUniversalAirConditioner: |         case SubmenuIndexUniversalAirConditioner: | ||||||
|             //            app->switch_to_next_scene(IrdaApp::Scene::UniversalAirConditioner);
 |             //            app->switch_to_next_scene(InfraredApp::Scene::UniversalAirConditioner);
 | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         consumed = true; |         consumed = true; | ||||||
| @ -49,8 +49,8 @@ bool IrdaAppSceneUniversal::on_event(IrdaApp* app, IrdaAppEvent* event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneUniversal::on_exit(IrdaApp* app) { | void InfraredAppSceneUniversal::on_exit(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |     Submenu* submenu = view_manager->get_submenu(); | ||||||
| 
 | 
 | ||||||
|     submenu_reset(submenu); |     submenu_reset(submenu); | ||||||
| @ -0,0 +1,101 @@ | |||||||
|  | #include <dolphin/dolphin.h> | ||||||
|  | #include <gui/modules/button_menu.h> | ||||||
|  | #include <gui/modules/button_panel.h> | ||||||
|  | #include <gui/view.h> | ||||||
|  | #include <gui/view_stack.h> | ||||||
|  | 
 | ||||||
|  | #include "../infrared_app.h" | ||||||
|  | #include "infrared/infrared_app_event.h" | ||||||
|  | #include "infrared/infrared_app_view_manager.h" | ||||||
|  | #include "infrared/scene/infrared_app_scene.h" | ||||||
|  | #include "../view/infrared_progress_view.h" | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneUniversalCommon::infrared_app_item_callback(void* context, uint32_t index) { | ||||||
|  |     InfraredApp* app = static_cast<InfraredApp*>(context); | ||||||
|  |     InfraredAppEvent event; | ||||||
|  | 
 | ||||||
|  |     event.type = InfraredAppEvent::Type::ButtonPanelPressed; | ||||||
|  |     event.payload.menu_index = index; | ||||||
|  | 
 | ||||||
|  |     app->get_view_manager()->send_event(&event); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void infrared_progress_back_callback(void* context) { | ||||||
|  |     furi_assert(context); | ||||||
|  |     auto app = static_cast<InfraredApp*>(context); | ||||||
|  | 
 | ||||||
|  |     InfraredAppEvent infrared_event = { | ||||||
|  |         .type = InfraredAppEvent::Type::Back, | ||||||
|  |     }; | ||||||
|  |     app->get_view_manager()->clear_events(); | ||||||
|  |     app->get_view_manager()->send_event(&infrared_event); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneUniversalCommon::hide_popup(InfraredApp* app) { | ||||||
|  |     auto stack_view = app->get_view_manager()->get_universal_view_stack(); | ||||||
|  |     auto progress_view = app->get_view_manager()->get_progress(); | ||||||
|  |     view_stack_remove_view(stack_view, infrared_progress_view_get_view(progress_view)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneUniversalCommon::show_popup(InfraredApp* app, int record_amount) { | ||||||
|  |     auto stack_view = app->get_view_manager()->get_universal_view_stack(); | ||||||
|  |     auto progress_view = app->get_view_manager()->get_progress(); | ||||||
|  |     infrared_progress_view_set_progress_total(progress_view, record_amount); | ||||||
|  |     infrared_progress_view_set_back_callback(progress_view, infrared_progress_back_callback, app); | ||||||
|  |     view_stack_add_view(stack_view, infrared_progress_view_get_view(progress_view)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneUniversalCommon::progress_popup(InfraredApp* app) { | ||||||
|  |     auto progress_view = app->get_view_manager()->get_progress(); | ||||||
|  |     return infrared_progress_view_increase_progress(progress_view); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool InfraredAppSceneUniversalCommon::on_event(InfraredApp* app, InfraredAppEvent* event) { | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(brute_force_started) { | ||||||
|  |         if(event->type == InfraredAppEvent::Type::Tick) { | ||||||
|  |             auto view_manager = app->get_view_manager(); | ||||||
|  |             InfraredAppEvent tick_event = {.type = InfraredAppEvent::Type::Tick}; | ||||||
|  |             view_manager->send_event(&tick_event); | ||||||
|  |             bool result = brute_force.send_next_bruteforce(); | ||||||
|  |             if(result) { | ||||||
|  |                 result = progress_popup(app); | ||||||
|  |             } | ||||||
|  |             if(!result) { | ||||||
|  |                 brute_force.stop_bruteforce(); | ||||||
|  |                 brute_force_started = false; | ||||||
|  |                 hide_popup(app); | ||||||
|  |             } | ||||||
|  |             consumed = true; | ||||||
|  |         } else if(event->type == InfraredAppEvent::Type::Back) { | ||||||
|  |             brute_force_started = false; | ||||||
|  |             brute_force.stop_bruteforce(); | ||||||
|  |             hide_popup(app); | ||||||
|  |             consumed = true; | ||||||
|  |         } | ||||||
|  |     } else { | ||||||
|  |         if(event->type == InfraredAppEvent::Type::ButtonPanelPressed) { | ||||||
|  |             int record_amount = 0; | ||||||
|  |             if(brute_force.start_bruteforce(event->payload.menu_index, record_amount)) { | ||||||
|  |                 DOLPHIN_DEED(DolphinDeedIrBruteForce); | ||||||
|  |                 brute_force_started = true; | ||||||
|  |                 show_popup(app, record_amount); | ||||||
|  |             } else { | ||||||
|  |                 app->switch_to_previous_scene(); | ||||||
|  |             } | ||||||
|  |             consumed = true; | ||||||
|  |         } else if(event->type == InfraredAppEvent::Type::Back) { | ||||||
|  |             app->switch_to_previous_scene(); | ||||||
|  |             consumed = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void InfraredAppSceneUniversalCommon::on_exit(InfraredApp* app) { | ||||||
|  |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|  |     ButtonPanel* button_panel = view_manager->get_button_panel(); | ||||||
|  |     button_panel_reset(button_panel); | ||||||
|  | } | ||||||
| @ -1,11 +1,11 @@ | |||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <gui/modules/loading.h> | #include <gui/modules/loading.h> | ||||||
| #include <gui/view_stack.h> | #include <gui/view_stack.h> | ||||||
| #include "irda/scene/irda_app_scene.h" | #include "infrared/scene/infrared_app_scene.h" | ||||||
| #include "irda/irda_app.h" | #include "infrared/infrared_app.h" | ||||||
| 
 | 
 | ||||||
| void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | void InfraredAppSceneUniversalTV::on_enter(InfraredApp* app) { | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |     InfraredAppViewManager* view_manager = app->get_view_manager(); | ||||||
|     ButtonPanel* button_panel = view_manager->get_button_panel(); |     ButtonPanel* button_panel = view_manager->get_button_panel(); | ||||||
|     button_panel_reserve(button_panel, 2, 3); |     button_panel_reserve(button_panel, 2, 3); | ||||||
| 
 | 
 | ||||||
| @ -19,7 +19,7 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|         19, |         19, | ||||||
|         &I_Power_25x27, |         &I_Power_25x27, | ||||||
|         &I_Power_hvr_25x27, |         &I_Power_hvr_25x27, | ||||||
|         irda_app_item_callback, |         infrared_app_item_callback, | ||||||
|         app); |         app); | ||||||
|     brute_force.add_record(i, "POWER"); |     brute_force.add_record(i, "POWER"); | ||||||
|     ++i; |     ++i; | ||||||
| @ -32,7 +32,7 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|         19, |         19, | ||||||
|         &I_Mute_25x27, |         &I_Mute_25x27, | ||||||
|         &I_Mute_hvr_25x27, |         &I_Mute_hvr_25x27, | ||||||
|         irda_app_item_callback, |         infrared_app_item_callback, | ||||||
|         app); |         app); | ||||||
|     brute_force.add_record(i, "MUTE"); |     brute_force.add_record(i, "MUTE"); | ||||||
|     ++i; |     ++i; | ||||||
| @ -45,12 +45,21 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|         66, |         66, | ||||||
|         &I_Vol_up_25x27, |         &I_Vol_up_25x27, | ||||||
|         &I_Vol_up_hvr_25x27, |         &I_Vol_up_hvr_25x27, | ||||||
|         irda_app_item_callback, |         infrared_app_item_callback, | ||||||
|         app); |         app); | ||||||
|     brute_force.add_record(i, "VOL+"); |     brute_force.add_record(i, "VOL+"); | ||||||
|     ++i; |     ++i; | ||||||
|     button_panel_add_item( |     button_panel_add_item( | ||||||
|         button_panel, i, 1, 1, 36, 66, &I_Up_25x27, &I_Up_hvr_25x27, irda_app_item_callback, app); |         button_panel, | ||||||
|  |         i, | ||||||
|  |         1, | ||||||
|  |         1, | ||||||
|  |         36, | ||||||
|  |         66, | ||||||
|  |         &I_Up_25x27, | ||||||
|  |         &I_Up_hvr_25x27, | ||||||
|  |         infrared_app_item_callback, | ||||||
|  |         app); | ||||||
|     brute_force.add_record(i, "CH+"); |     brute_force.add_record(i, "CH+"); | ||||||
|     ++i; |     ++i; | ||||||
|     button_panel_add_item( |     button_panel_add_item( | ||||||
| @ -62,7 +71,7 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|         98, |         98, | ||||||
|         &I_Vol_down_25x27, |         &I_Vol_down_25x27, | ||||||
|         &I_Vol_down_hvr_25x27, |         &I_Vol_down_hvr_25x27, | ||||||
|         irda_app_item_callback, |         infrared_app_item_callback, | ||||||
|         app); |         app); | ||||||
|     brute_force.add_record(i, "VOL-"); |     brute_force.add_record(i, "VOL-"); | ||||||
|     ++i; |     ++i; | ||||||
| @ -75,7 +84,7 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|         98, |         98, | ||||||
|         &I_Down_25x27, |         &I_Down_25x27, | ||||||
|         &I_Down_hvr_25x27, |         &I_Down_hvr_25x27, | ||||||
|         irda_app_item_callback, |         infrared_app_item_callback, | ||||||
|         app); |         app); | ||||||
|     brute_force.add_record(i, "CH-"); |     brute_force.add_record(i, "CH-"); | ||||||
| 
 | 
 | ||||||
| @ -83,7 +92,7 @@ void IrdaAppSceneUniversalTV::on_enter(IrdaApp* app) { | |||||||
|     button_panel_add_label(button_panel, 9, 64, FontSecondary, "Vol"); |     button_panel_add_label(button_panel, 9, 64, FontSecondary, "Vol"); | ||||||
|     button_panel_add_label(button_panel, 43, 64, FontSecondary, "Ch"); |     button_panel_add_label(button_panel, 43, 64, FontSecondary, "Ch"); | ||||||
| 
 | 
 | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::UniversalRemote); |     view_manager->switch_to(InfraredAppViewManager::ViewId::UniversalRemote); | ||||||
| 
 | 
 | ||||||
|     auto stack_view = app->get_view_manager()->get_universal_view_stack(); |     auto stack_view = app->get_view_manager()->get_universal_view_stack(); | ||||||
|     auto loading_view = app->get_view_manager()->get_loading(); |     auto loading_view = app->get_view_manager()->get_loading(); | ||||||
| @ -7,26 +7,26 @@ | |||||||
| #include "m-string.h" | #include "m-string.h" | ||||||
| #include <gui/elements.h> | #include <gui/elements.h> | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include "irda_progress_view.h" | #include "infrared_progress_view.h" | ||||||
| #include "gui/modules/button_panel.h" | #include "gui/modules/button_panel.h" | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| 
 | 
 | ||||||
| struct IrdaProgressView { | struct InfraredProgressView { | ||||||
|     View* view; |     View* view; | ||||||
|     IrdaProgressViewBackCallback back_callback; |     InfraredProgressViewBackCallback back_callback; | ||||||
|     void* context; |     void* context; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     size_t progress; |     size_t progress; | ||||||
|     size_t progress_total; |     size_t progress_total; | ||||||
| } IrdaProgressViewModel; | } InfraredProgressViewModel; | ||||||
| 
 | 
 | ||||||
| bool irda_progress_view_increase_progress(IrdaProgressView* progress) { | bool infrared_progress_view_increase_progress(InfraredProgressView* progress) { | ||||||
|     furi_assert(progress); |     furi_assert(progress); | ||||||
|     bool result = false; |     bool result = false; | ||||||
| 
 | 
 | ||||||
|     IrdaProgressViewModel* model = view_get_model(progress->view); |     InfraredProgressViewModel* model = view_get_model(progress->view); | ||||||
|     if(model->progress < model->progress_total) { |     if(model->progress < model->progress_total) { | ||||||
|         ++model->progress; |         ++model->progress; | ||||||
|         result = model->progress < model->progress_total; |         result = model->progress < model->progress_total; | ||||||
| @ -36,8 +36,8 @@ bool irda_progress_view_increase_progress(IrdaProgressView* progress) { | |||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void irda_progress_view_draw_callback(Canvas* canvas, void* _model) { | static void infrared_progress_view_draw_callback(Canvas* canvas, void* _model) { | ||||||
|     IrdaProgressViewModel* model = (IrdaProgressViewModel*)_model; |     InfraredProgressViewModel* model = (InfraredProgressViewModel*)_model; | ||||||
| 
 | 
 | ||||||
|     uint8_t x = 0; |     uint8_t x = 0; | ||||||
|     uint8_t y = 36; |     uint8_t y = 36; | ||||||
| @ -63,16 +63,18 @@ static void irda_progress_view_draw_callback(Canvas* canvas, void* _model) { | |||||||
|     canvas_draw_str(canvas, x + 30, y + height - 6, "= stop"); |     canvas_draw_str(canvas, x + 30, y + height - 6, "= stop"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void irda_progress_view_set_progress_total(IrdaProgressView* progress, uint16_t progress_total) { | void infrared_progress_view_set_progress_total( | ||||||
|  |     InfraredProgressView* progress, | ||||||
|  |     uint16_t progress_total) { | ||||||
|     furi_assert(progress); |     furi_assert(progress); | ||||||
|     IrdaProgressViewModel* model = view_get_model(progress->view); |     InfraredProgressViewModel* model = view_get_model(progress->view); | ||||||
|     model->progress = 0; |     model->progress = 0; | ||||||
|     model->progress_total = progress_total; |     model->progress_total = progress_total; | ||||||
|     view_commit_model(progress->view, false); |     view_commit_model(progress->view, false); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool irda_progress_view_input_callback(InputEvent* event, void* context) { | bool infrared_progress_view_input_callback(InputEvent* event, void* context) { | ||||||
|     IrdaProgressView* instance = context; |     InfraredProgressView* instance = context; | ||||||
| 
 | 
 | ||||||
|     if((event->type == InputTypeShort) && (event->key == InputKeyBack)) { |     if((event->type == InputTypeShort) && (event->key == InputKeyBack)) { | ||||||
|         if(instance->back_callback) { |         if(instance->back_callback) { | ||||||
| @ -83,36 +85,36 @@ bool irda_progress_view_input_callback(InputEvent* event, void* context) { | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| IrdaProgressView* irda_progress_view_alloc(void) { | InfraredProgressView* infrared_progress_view_alloc(void) { | ||||||
|     IrdaProgressView* instance = malloc(sizeof(IrdaProgressView)); |     InfraredProgressView* instance = malloc(sizeof(InfraredProgressView)); | ||||||
|     instance->view = view_alloc(); |     instance->view = view_alloc(); | ||||||
|     view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(IrdaProgressViewModel)); |     view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(InfraredProgressViewModel)); | ||||||
|     IrdaProgressViewModel* model = view_get_model(instance->view); |     InfraredProgressViewModel* model = view_get_model(instance->view); | ||||||
|     model->progress = 0; |     model->progress = 0; | ||||||
|     model->progress_total = 0; |     model->progress_total = 0; | ||||||
|     view_commit_model(instance->view, false); |     view_commit_model(instance->view, false); | ||||||
|     view_set_draw_callback(instance->view, irda_progress_view_draw_callback); |     view_set_draw_callback(instance->view, infrared_progress_view_draw_callback); | ||||||
|     view_set_input_callback(instance->view, irda_progress_view_input_callback); |     view_set_input_callback(instance->view, infrared_progress_view_input_callback); | ||||||
|     view_set_context(instance->view, instance); |     view_set_context(instance->view, instance); | ||||||
| 
 | 
 | ||||||
|     return instance; |     return instance; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void irda_progress_view_free(IrdaProgressView* progress) { | void infrared_progress_view_free(InfraredProgressView* progress) { | ||||||
|     view_free(progress->view); |     view_free(progress->view); | ||||||
|     free(progress); |     free(progress); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void irda_progress_view_set_back_callback( | void infrared_progress_view_set_back_callback( | ||||||
|     IrdaProgressView* instance, |     InfraredProgressView* instance, | ||||||
|     IrdaProgressViewBackCallback callback, |     InfraredProgressViewBackCallback callback, | ||||||
|     void* context) { |     void* context) { | ||||||
|     furi_assert(instance); |     furi_assert(instance); | ||||||
|     instance->back_callback = callback; |     instance->back_callback = callback; | ||||||
|     instance->context = context; |     instance->context = context; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| View* irda_progress_view_get_view(IrdaProgressView* instance) { | View* infrared_progress_view_get_view(InfraredProgressView* instance) { | ||||||
|     furi_assert(instance); |     furi_assert(instance); | ||||||
|     furi_assert(instance->view); |     furi_assert(instance->view); | ||||||
|     return instance->view; |     return instance->view; | ||||||
							
								
								
									
										68
									
								
								applications/infrared/view/infrared_progress_view.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,68 @@ | |||||||
|  | /**
 | ||||||
|  |   * @file infrared_progress_view.h | ||||||
|  |   * Infrared: Custom Infrared view module. | ||||||
|  |   * It shows popup progress bar during brute force. | ||||||
|  |   */ | ||||||
|  | #pragma once | ||||||
|  | #include <gui/view.h> | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /** Anonumous instance */ | ||||||
|  | typedef struct InfraredProgressView InfraredProgressView; | ||||||
|  | 
 | ||||||
|  | /** Callback for back button handling */ | ||||||
|  | typedef void (*InfraredProgressViewBackCallback)(void*); | ||||||
|  | 
 | ||||||
|  | /** Allocate and initialize Infrared view
 | ||||||
|  |  * | ||||||
|  |  * @retval new allocated instance | ||||||
|  |  */ | ||||||
|  | InfraredProgressView* infrared_progress_view_alloc(); | ||||||
|  | 
 | ||||||
|  | /** Free previously allocated Progress view module instance
 | ||||||
|  |  * | ||||||
|  |  * @param instance to free | ||||||
|  |  */ | ||||||
|  | void infrared_progress_view_free(InfraredProgressView* instance); | ||||||
|  | 
 | ||||||
|  | /** Get progress view module view
 | ||||||
|  |  * | ||||||
|  |  * @param instance view module | ||||||
|  |  * @retval view | ||||||
|  |  */ | ||||||
|  | View* infrared_progress_view_get_view(InfraredProgressView* instance); | ||||||
|  | 
 | ||||||
|  | /** Increase progress on progress view module
 | ||||||
|  |  * | ||||||
|  |  * @param instance view module | ||||||
|  |  * @retval true - value is incremented and maximum is reached, | ||||||
|  |  *      false - value is incremented and maximum is not reached | ||||||
|  |  */ | ||||||
|  | bool infrared_progress_view_increase_progress(InfraredProgressView* instance); | ||||||
|  | 
 | ||||||
|  | /** Set maximum progress value
 | ||||||
|  |  * | ||||||
|  |  * @param instance - view module | ||||||
|  |  * @param progress_max - maximum value of progress | ||||||
|  |  */ | ||||||
|  | void infrared_progress_view_set_progress_total( | ||||||
|  |     InfraredProgressView* instance, | ||||||
|  |     uint16_t progress_max); | ||||||
|  | 
 | ||||||
|  | /** Set back button callback
 | ||||||
|  |  * | ||||||
|  |  * @param instance - view module | ||||||
|  |  * @param callback - callback to call for back button | ||||||
|  |  * @param context - context to pass to callback | ||||||
|  |  */ | ||||||
|  | void infrared_progress_view_set_back_callback( | ||||||
|  |     InfraredProgressView* instance, | ||||||
|  |     InfraredProgressViewBackCallback callback, | ||||||
|  |     void* context); | ||||||
|  | 
 | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif | ||||||
							
								
								
									
										140
									
								
								applications/infrared_monitor/infrared_monitor.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,140 @@ | |||||||
|  | #include <gui/canvas.h> | ||||||
|  | #include <input/input.h> | ||||||
|  | #include <infrared.h> | ||||||
|  | #include <infrared_worker.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <furi.h> | ||||||
|  | #include <furi_hal_infrared.h> | ||||||
|  | #include <furi_hal.h> | ||||||
|  | #include <gui/view_port.h> | ||||||
|  | #include <gui/gui.h> | ||||||
|  | #include <gui/elements.h> | ||||||
|  | 
 | ||||||
|  | #define INFRARED_TIMINGS_SIZE 700 | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  |     uint32_t timing_cnt; | ||||||
|  |     struct { | ||||||
|  |         uint8_t level; | ||||||
|  |         uint32_t duration; | ||||||
|  |     } timing[INFRARED_TIMINGS_SIZE]; | ||||||
|  | } InfraredDelaysArray; | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  |     char display_text[64]; | ||||||
|  |     osMessageQueueId_t event_queue; | ||||||
|  |     InfraredDelaysArray delays; | ||||||
|  |     InfraredWorker* worker; | ||||||
|  |     ViewPort* view_port; | ||||||
|  | } InfraredMonitor; | ||||||
|  | 
 | ||||||
|  | void infrared_monitor_input_callback(InputEvent* input_event, void* ctx) { | ||||||
|  |     furi_assert(ctx); | ||||||
|  |     InfraredMonitor* infrared_monitor = (InfraredMonitor*)ctx; | ||||||
|  | 
 | ||||||
|  |     if((input_event->type == InputTypeShort) && (input_event->key == InputKeyBack)) { | ||||||
|  |         osMessageQueuePut(infrared_monitor->event_queue, input_event, 0, 0); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void infrared_monitor_draw_callback(Canvas* canvas, void* ctx) { | ||||||
|  |     furi_assert(canvas); | ||||||
|  |     furi_assert(ctx); | ||||||
|  |     InfraredMonitor* infrared_monitor = (InfraredMonitor*)ctx; | ||||||
|  | 
 | ||||||
|  |     canvas_clear(canvas); | ||||||
|  |     canvas_set_font(canvas, FontPrimary); | ||||||
|  |     elements_multiline_text_aligned(canvas, 64, 0, AlignCenter, AlignTop, "INFRARED monitor\n"); | ||||||
|  |     canvas_set_font(canvas, FontKeyboard); | ||||||
|  |     if(strlen(infrared_monitor->display_text)) { | ||||||
|  |         elements_multiline_text_aligned( | ||||||
|  |             canvas, 64, 43, AlignCenter, AlignCenter, infrared_monitor->display_text); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void signal_received_callback(void* context, InfraredWorkerSignal* received_signal) { | ||||||
|  |     furi_assert(context); | ||||||
|  |     furi_assert(received_signal); | ||||||
|  |     InfraredMonitor* infrared_monitor = context; | ||||||
|  | 
 | ||||||
|  |     if(infrared_worker_signal_is_decoded(received_signal)) { | ||||||
|  |         const InfraredMessage* message = infrared_worker_get_decoded_signal(received_signal); | ||||||
|  |         snprintf( | ||||||
|  |             infrared_monitor->display_text, | ||||||
|  |             sizeof(infrared_monitor->display_text), | ||||||
|  |             "%s\nA:0x%0*lX\nC:0x%0*lX\n%s\n", | ||||||
|  |             infrared_get_protocol_name(message->protocol), | ||||||
|  |             ROUND_UP_TO(infrared_get_protocol_address_length(message->protocol), 4), | ||||||
|  |             message->address, | ||||||
|  |             ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4), | ||||||
|  |             message->command, | ||||||
|  |             message->repeat ? " R" : ""); | ||||||
|  |         view_port_update(infrared_monitor->view_port); | ||||||
|  |         printf( | ||||||
|  |             "== %s, A:0x%0*lX, C:0x%0*lX%s ==\r\n", | ||||||
|  |             infrared_get_protocol_name(message->protocol), | ||||||
|  |             ROUND_UP_TO(infrared_get_protocol_address_length(message->protocol), 4), | ||||||
|  |             message->address, | ||||||
|  |             ROUND_UP_TO(infrared_get_protocol_command_length(message->protocol), 4), | ||||||
|  |             message->command, | ||||||
|  |             message->repeat ? " R" : ""); | ||||||
|  |     } else { | ||||||
|  |         const uint32_t* timings; | ||||||
|  |         size_t timings_cnt; | ||||||
|  |         infrared_worker_get_raw_signal(received_signal, &timings, &timings_cnt); | ||||||
|  |         snprintf( | ||||||
|  |             infrared_monitor->display_text, | ||||||
|  |             sizeof(infrared_monitor->display_text), | ||||||
|  |             "RAW\n%d samples\n", | ||||||
|  |             timings_cnt); | ||||||
|  |         view_port_update(infrared_monitor->view_port); | ||||||
|  |         printf("RAW, %d samples:\r\n", timings_cnt); | ||||||
|  |         for(size_t i = 0; i < timings_cnt; ++i) { | ||||||
|  |             printf("%lu ", timings[i]); | ||||||
|  |         } | ||||||
|  |         printf("\r\n"); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int32_t infrared_monitor_app(void* p) { | ||||||
|  |     (void)p; | ||||||
|  | 
 | ||||||
|  |     InfraredMonitor* infrared_monitor = malloc(sizeof(InfraredMonitor)); | ||||||
|  |     infrared_monitor->display_text[0] = 0; | ||||||
|  |     infrared_monitor->event_queue = osMessageQueueNew(1, sizeof(InputEvent), NULL); | ||||||
|  |     infrared_monitor->view_port = view_port_alloc(); | ||||||
|  |     Gui* gui = furi_record_open("gui"); | ||||||
|  | 
 | ||||||
|  |     view_port_draw_callback_set( | ||||||
|  |         infrared_monitor->view_port, infrared_monitor_draw_callback, infrared_monitor); | ||||||
|  |     view_port_input_callback_set( | ||||||
|  |         infrared_monitor->view_port, infrared_monitor_input_callback, infrared_monitor); | ||||||
|  | 
 | ||||||
|  |     gui_add_view_port(gui, infrared_monitor->view_port, GuiLayerFullscreen); | ||||||
|  | 
 | ||||||
|  |     infrared_monitor->worker = infrared_worker_alloc(); | ||||||
|  |     infrared_worker_rx_start(infrared_monitor->worker); | ||||||
|  |     infrared_worker_rx_set_received_signal_callback( | ||||||
|  |         infrared_monitor->worker, signal_received_callback, infrared_monitor); | ||||||
|  |     infrared_worker_rx_enable_blink_on_receiving(infrared_monitor->worker, true); | ||||||
|  | 
 | ||||||
|  |     while(1) { | ||||||
|  |         InputEvent event; | ||||||
|  |         if(osOK == osMessageQueueGet(infrared_monitor->event_queue, &event, NULL, 50)) { | ||||||
|  |             if((event.type == InputTypeShort) && (event.key == InputKeyBack)) { | ||||||
|  |                 break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     infrared_worker_rx_stop(infrared_monitor->worker); | ||||||
|  |     infrared_worker_free(infrared_monitor->worker); | ||||||
|  |     osMessageQueueDelete(infrared_monitor->event_queue); | ||||||
|  |     view_port_enabled_set(infrared_monitor->view_port, false); | ||||||
|  |     gui_remove_view_port(gui, infrared_monitor->view_port); | ||||||
|  |     view_port_free(infrared_monitor->view_port); | ||||||
|  |     furi_record_close("gui"); | ||||||
|  |     free(infrared_monitor); | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
| @ -1,13 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| #include "../irda_app_signal.h" |  | ||||||
| #include <flipper_format/flipper_format.h> |  | ||||||
| #include <string> |  | ||||||
| 
 |  | ||||||
| bool irda_parser_save_signal( |  | ||||||
|     FlipperFormat* ff, |  | ||||||
|     const IrdaAppSignal& signal, |  | ||||||
|     const std::string& name); |  | ||||||
| bool irda_parser_read_signal(FlipperFormat* ff, IrdaAppSignal& signal, std::string& name); |  | ||||||
| bool irda_parser_is_parsed_signal_valid(const IrdaMessage* signal); |  | ||||||
| bool irda_parser_is_raw_signal_valid(uint32_t frequency, float duty_cycle, uint32_t timings_cnt); |  | ||||||
| @ -1,138 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <map> |  | ||||||
| #include <irda.h> |  | ||||||
| #include <furi.h> |  | ||||||
| #include "scene/irda_app_scene.h" |  | ||||||
| #include "scene/irda_app_scene.h" |  | ||||||
| #include "irda_app_view_manager.h" |  | ||||||
| #include "irda_app_remote_manager.h" |  | ||||||
| #include <forward_list> |  | ||||||
| #include <stdint.h> |  | ||||||
| #include <notification/notification_messages.h> |  | ||||||
| #include <irda_worker.h> |  | ||||||
| #include "irda_app_view_manager.h" |  | ||||||
| 
 |  | ||||||
| class IrdaApp { |  | ||||||
| public: |  | ||||||
|     enum class EditElement : uint8_t { |  | ||||||
|         Button, |  | ||||||
|         Remote, |  | ||||||
|     }; |  | ||||||
|     enum class EditAction : uint8_t { |  | ||||||
|         Rename, |  | ||||||
|         Delete, |  | ||||||
|     }; |  | ||||||
|     enum class Scene : uint8_t { |  | ||||||
|         Exit, |  | ||||||
|         Start, |  | ||||||
|         Universal, |  | ||||||
|         UniversalTV, |  | ||||||
|         UniversalAudio, |  | ||||||
|         UniversalAirConditioner, |  | ||||||
|         Learn, |  | ||||||
|         LearnSuccess, |  | ||||||
|         LearnEnterName, |  | ||||||
|         LearnDone, |  | ||||||
|         AskBack, |  | ||||||
|         Remote, |  | ||||||
|         RemoteList, |  | ||||||
|         Edit, |  | ||||||
|         EditKeySelect, |  | ||||||
|         EditRename, |  | ||||||
|         EditDelete, |  | ||||||
|         EditRenameDone, |  | ||||||
|         EditDeleteDone, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     int32_t run(void* args); |  | ||||||
|     void switch_to_next_scene(Scene index); |  | ||||||
|     void switch_to_next_scene_without_saving(Scene index); |  | ||||||
|     bool switch_to_previous_scene(uint8_t count = 1); |  | ||||||
|     Scene get_previous_scene(); |  | ||||||
|     IrdaAppViewManager* get_view_manager(); |  | ||||||
|     void set_text_store(uint8_t index, const char* text...); |  | ||||||
|     char* get_text_store(uint8_t index); |  | ||||||
|     uint8_t get_text_store_size(); |  | ||||||
|     IrdaAppRemoteManager* get_remote_manager(); |  | ||||||
| 
 |  | ||||||
|     IrdaWorker* get_irda_worker(); |  | ||||||
|     const IrdaAppSignal& get_received_signal() const; |  | ||||||
|     void set_received_signal(const IrdaAppSignal& signal); |  | ||||||
| 
 |  | ||||||
|     void search_and_switch_to_previous_scene(const std::initializer_list<Scene>& scenes_list); |  | ||||||
| 
 |  | ||||||
|     void set_edit_element(EditElement value); |  | ||||||
|     EditElement get_edit_element(void); |  | ||||||
| 
 |  | ||||||
|     void set_edit_action(EditAction value); |  | ||||||
|     EditAction get_edit_action(void); |  | ||||||
| 
 |  | ||||||
|     bool get_learn_new_remote(); |  | ||||||
|     void set_learn_new_remote(bool value); |  | ||||||
| 
 |  | ||||||
|     enum : int { |  | ||||||
|         ButtonNA = -1, |  | ||||||
|     }; |  | ||||||
|     int get_current_button(); |  | ||||||
|     void set_current_button(int value); |  | ||||||
| 
 |  | ||||||
|     void notify_success(); |  | ||||||
|     void notify_red_blink(); |  | ||||||
|     void notify_sent_just_learnt(); |  | ||||||
|     void notify_green_on(); |  | ||||||
|     void notify_green_off(); |  | ||||||
|     void notify_click(); |  | ||||||
|     void notify_click_and_green_blink(); |  | ||||||
|     void notify_blink_green(); |  | ||||||
| 
 |  | ||||||
|     static void text_input_callback(void* context); |  | ||||||
|     static void popup_callback(void* context); |  | ||||||
|     static void signal_sent_callback(void* context); |  | ||||||
| 
 |  | ||||||
|     IrdaApp(); |  | ||||||
|     ~IrdaApp(); |  | ||||||
| 
 |  | ||||||
|     static constexpr const char* irda_directory = "/any/irda"; |  | ||||||
|     static constexpr const char* irda_extension = ".ir"; |  | ||||||
|     static constexpr const uint32_t max_raw_timings_in_signal = 512; |  | ||||||
|     static constexpr const uint32_t max_line_length = |  | ||||||
|         (9 + 1) * IrdaApp::max_raw_timings_in_signal + 100; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     static constexpr const uint8_t text_store_size = 128; |  | ||||||
|     static constexpr const uint8_t text_store_max = 2; |  | ||||||
|     char text_store[text_store_max][text_store_size + 1]; |  | ||||||
|     bool learn_new_remote; |  | ||||||
|     EditElement element; |  | ||||||
|     EditAction action; |  | ||||||
|     uint32_t current_button; |  | ||||||
| 
 |  | ||||||
|     NotificationApp* notification; |  | ||||||
|     IrdaAppViewManager view_manager; |  | ||||||
|     IrdaAppRemoteManager remote_manager; |  | ||||||
|     IrdaWorker* irda_worker; |  | ||||||
|     IrdaAppSignal received_signal; |  | ||||||
| 
 |  | ||||||
|     std::forward_list<Scene> previous_scenes_list; |  | ||||||
|     Scene current_scene = Scene::Start; |  | ||||||
| 
 |  | ||||||
|     std::map<Scene, IrdaAppScene*> scenes = { |  | ||||||
|         {Scene::Start, new IrdaAppSceneStart()}, |  | ||||||
|         {Scene::Universal, new IrdaAppSceneUniversal()}, |  | ||||||
|         {Scene::UniversalTV, new IrdaAppSceneUniversalTV()}, |  | ||||||
|         //        {Scene::UniversalAudio, new IrdaAppSceneUniversalAudio()},
 |  | ||||||
|         {Scene::Learn, new IrdaAppSceneLearn()}, |  | ||||||
|         {Scene::LearnSuccess, new IrdaAppSceneLearnSuccess()}, |  | ||||||
|         {Scene::LearnEnterName, new IrdaAppSceneLearnEnterName()}, |  | ||||||
|         {Scene::LearnDone, new IrdaAppSceneLearnDone()}, |  | ||||||
|         {Scene::AskBack, new IrdaAppSceneAskBack()}, |  | ||||||
|         {Scene::Remote, new IrdaAppSceneRemote()}, |  | ||||||
|         {Scene::RemoteList, new IrdaAppSceneRemoteList()}, |  | ||||||
|         {Scene::Edit, new IrdaAppSceneEdit()}, |  | ||||||
|         {Scene::EditKeySelect, new IrdaAppSceneEditKeySelect()}, |  | ||||||
|         {Scene::EditRename, new IrdaAppSceneEditRename()}, |  | ||||||
|         {Scene::EditDelete, new IrdaAppSceneEditDelete()}, |  | ||||||
|         {Scene::EditRenameDone, new IrdaAppSceneEditRenameDone()}, |  | ||||||
|         {Scene::EditDeleteDone, new IrdaAppSceneEditDeleteDone()}, |  | ||||||
|     }; |  | ||||||
| }; |  | ||||||
| @ -1,36 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| #include <unordered_map> |  | ||||||
| #include <memory> |  | ||||||
| #include <flipper_format/flipper_format.h> |  | ||||||
| 
 |  | ||||||
| class IrdaAppBruteForce { |  | ||||||
|     const char* universal_db_filename; |  | ||||||
|     std::string current_record; |  | ||||||
|     FlipperFormat* ff; |  | ||||||
| 
 |  | ||||||
|     typedef struct { |  | ||||||
|         int index; |  | ||||||
|         int amount; |  | ||||||
|     } Record; |  | ||||||
| 
 |  | ||||||
|     // 'key' is record name, because we have to search by both, index and name,
 |  | ||||||
|     // but index search has place once per button press, and should not be
 |  | ||||||
|     // noticed, but name search should occur during entering universal menu,
 |  | ||||||
|     // and will go through container for every record in file, that's why
 |  | ||||||
|     // more critical to have faster search by record name.
 |  | ||||||
|     std::unordered_map<std::string, Record> records; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     bool calculate_messages(); |  | ||||||
|     void stop_bruteforce(); |  | ||||||
|     bool send_next_bruteforce(); |  | ||||||
|     bool start_bruteforce(int index, int& record_amount); |  | ||||||
|     void add_record(int index, const char* name); |  | ||||||
| 
 |  | ||||||
|     IrdaAppBruteForce(const char* filename) |  | ||||||
|         : universal_db_filename(filename) { |  | ||||||
|     } |  | ||||||
|     ~IrdaAppBruteForce() { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| @ -1,28 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <irda.h> |  | ||||||
| #include <gui/modules/dialog_ex.h> |  | ||||||
| 
 |  | ||||||
| class IrdaAppEvent { |  | ||||||
| public: |  | ||||||
|     enum class Type : uint8_t { |  | ||||||
|         Tick, |  | ||||||
|         Exit, |  | ||||||
|         Back, |  | ||||||
|         MenuSelected, |  | ||||||
|         MenuSelectedPress, |  | ||||||
|         MenuSelectedRelease, |  | ||||||
|         DialogExSelected, |  | ||||||
|         NextScene, |  | ||||||
|         IrdaMessageReceived, |  | ||||||
|         TextEditDone, |  | ||||||
|         PopupTimer, |  | ||||||
|         ButtonPanelPressed, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     union { |  | ||||||
|         int32_t menu_index; |  | ||||||
|         DialogExResult dialog_ex_result; |  | ||||||
|     } payload; |  | ||||||
| 
 |  | ||||||
|     Type type; |  | ||||||
| }; |  | ||||||
| @ -1,76 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| #include "irda_app_signal.h" |  | ||||||
| 
 |  | ||||||
| #include <irda_worker.h> |  | ||||||
| #include <irda.h> |  | ||||||
| 
 |  | ||||||
| #include <cstdint> |  | ||||||
| #include <string> |  | ||||||
| #include <memory> |  | ||||||
| #include <vector> |  | ||||||
| 
 |  | ||||||
| class IrdaAppRemoteButton { |  | ||||||
|     friend class IrdaAppRemoteManager; |  | ||||||
|     std::string name; |  | ||||||
|     IrdaAppSignal signal; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     IrdaAppRemoteButton(const char* name, const IrdaAppSignal& signal) |  | ||||||
|         : name(name) |  | ||||||
|         , signal(signal) { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     IrdaAppRemoteButton(const char* name, IrdaAppSignal&& signal) |  | ||||||
|         : name(name) |  | ||||||
|         , signal(std::move(signal)) { |  | ||||||
|     } |  | ||||||
|     ~IrdaAppRemoteButton() { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppRemote { |  | ||||||
|     friend class IrdaAppRemoteManager; |  | ||||||
|     std::vector<IrdaAppRemoteButton> buttons; |  | ||||||
|     std::string name; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     IrdaAppRemote(const std::string& name) |  | ||||||
|         : name(name) { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     IrdaAppRemote& operator=(std::string& new_name) noexcept { |  | ||||||
|         name = new_name; |  | ||||||
|         buttons.clear(); |  | ||||||
|         return *this; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppRemoteManager { |  | ||||||
|     std::unique_ptr<IrdaAppRemote> remote; |  | ||||||
|     std::string make_full_name(const std::string& remote_name) const; |  | ||||||
|     std::string make_remote_name(const std::string& full_name) const; |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     static constexpr const uint32_t max_button_name_length = 22; |  | ||||||
|     static constexpr const uint32_t max_remote_name_length = 22; |  | ||||||
|     bool add_remote_with_button(const char* button_name, const IrdaAppSignal& signal); |  | ||||||
|     bool add_button(const char* button_name, const IrdaAppSignal& signal); |  | ||||||
| 
 |  | ||||||
|     int find_remote_name(const std::vector<std::string>& strings); |  | ||||||
|     bool rename_button(uint32_t index, const char* str); |  | ||||||
|     bool rename_remote(const char* str); |  | ||||||
|     std::string find_vacant_remote_name(const std::string& name); |  | ||||||
| 
 |  | ||||||
|     std::vector<std::string> get_button_list() const; |  | ||||||
|     std::string get_button_name(uint32_t index); |  | ||||||
|     std::string get_remote_name(); |  | ||||||
|     size_t get_number_of_buttons(); |  | ||||||
|     const IrdaAppSignal& get_button_data(size_t index) const; |  | ||||||
|     bool delete_button(uint32_t index); |  | ||||||
|     bool delete_remote(); |  | ||||||
|     void reset_remote(); |  | ||||||
| 
 |  | ||||||
|     bool store(); |  | ||||||
|     bool load(const std::string& name); |  | ||||||
| }; |  | ||||||
| @ -1,68 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <irda_worker.h> |  | ||||||
| #include <stdint.h> |  | ||||||
| #include <string> |  | ||||||
| #include <irda.h> |  | ||||||
| 
 |  | ||||||
| class IrdaAppSignal { |  | ||||||
| public: |  | ||||||
|     typedef struct { |  | ||||||
|         size_t timings_cnt; |  | ||||||
|         uint32_t* timings; |  | ||||||
|         uint32_t frequency; |  | ||||||
|         float duty_cycle; |  | ||||||
|     } RawSignal; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     bool raw_signal; |  | ||||||
|     union { |  | ||||||
|         IrdaMessage message; |  | ||||||
|         RawSignal raw; |  | ||||||
|     } payload; |  | ||||||
| 
 |  | ||||||
|     void |  | ||||||
|         copy_raw_signal(const uint32_t* timings, size_t size, uint32_t frequency, float duty_cycle); |  | ||||||
|     void clear_timings(); |  | ||||||
| 
 |  | ||||||
| public: |  | ||||||
|     IrdaAppSignal() { |  | ||||||
|         raw_signal = false; |  | ||||||
|         payload.message.protocol = IrdaProtocolUnknown; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     ~IrdaAppSignal() { |  | ||||||
|         clear_timings(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     IrdaAppSignal( |  | ||||||
|         const uint32_t* timings, |  | ||||||
|         size_t timings_cnt, |  | ||||||
|         uint32_t frequency, |  | ||||||
|         float duty_cycle); |  | ||||||
|     IrdaAppSignal(const IrdaMessage* irda_message); |  | ||||||
| 
 |  | ||||||
|     IrdaAppSignal(const IrdaAppSignal& other); |  | ||||||
|     IrdaAppSignal(IrdaAppSignal&& other); |  | ||||||
| 
 |  | ||||||
|     IrdaAppSignal& operator=(const IrdaAppSignal& signal); |  | ||||||
| 
 |  | ||||||
|     void set_message(const IrdaMessage* irda_message); |  | ||||||
|     void |  | ||||||
|         set_raw_signal(uint32_t* timings, size_t timings_cnt, uint32_t frequency, float duty_cycle); |  | ||||||
| 
 |  | ||||||
|     void transmit() const; |  | ||||||
| 
 |  | ||||||
|     bool is_raw(void) const { |  | ||||||
|         return raw_signal; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const IrdaMessage& get_message(void) const { |  | ||||||
|         furi_assert(!raw_signal); |  | ||||||
|         return payload.message; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     const RawSignal& get_raw_signal(void) const { |  | ||||||
|         furi_assert(raw_signal); |  | ||||||
|         return payload.raw; |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <gui/modules/button_menu.h> |  | ||||||
| #include <gui/modules/text_input.h> |  | ||||||
| #include <gui/view_stack.h> |  | ||||||
| #include <gui/modules/button_panel.h> |  | ||||||
| #include <furi.h> |  | ||||||
| #include <gui/view_dispatcher.h> |  | ||||||
| #include <gui/modules/dialog_ex.h> |  | ||||||
| #include <gui/modules/submenu.h> |  | ||||||
| #include <gui/modules/popup.h> |  | ||||||
| #include <gui/modules/loading.h> |  | ||||||
| 
 |  | ||||||
| #include "irda_app_event.h" |  | ||||||
| #include "view/irda_progress_view.h" |  | ||||||
| 
 |  | ||||||
| class IrdaAppViewManager { |  | ||||||
| public: |  | ||||||
|     enum class ViewType : uint8_t { |  | ||||||
|         DialogEx, |  | ||||||
|         TextInput, |  | ||||||
|         Submenu, |  | ||||||
|         ButtonMenu, |  | ||||||
|         UniversalRemote, |  | ||||||
|         Popup, |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     IrdaAppViewManager(); |  | ||||||
|     ~IrdaAppViewManager(); |  | ||||||
| 
 |  | ||||||
|     void switch_to(ViewType type); |  | ||||||
| 
 |  | ||||||
|     void receive_event(IrdaAppEvent* event); |  | ||||||
|     void send_event(IrdaAppEvent* event); |  | ||||||
|     void clear_events(); |  | ||||||
| 
 |  | ||||||
|     DialogEx* get_dialog_ex(); |  | ||||||
|     Submenu* get_submenu(); |  | ||||||
|     Popup* get_popup(); |  | ||||||
|     TextInput* get_text_input(); |  | ||||||
|     ButtonMenu* get_button_menu(); |  | ||||||
|     ButtonPanel* get_button_panel(); |  | ||||||
|     ViewStack* get_universal_view_stack(); |  | ||||||
|     IrdaProgressView* get_progress(); |  | ||||||
|     Loading* get_loading(); |  | ||||||
| 
 |  | ||||||
|     osMessageQueueId_t get_event_queue(); |  | ||||||
| 
 |  | ||||||
|     uint32_t previous_view_callback(void* context); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     ViewDispatcher* view_dispatcher; |  | ||||||
|     Gui* gui; |  | ||||||
|     TextInput* text_input; |  | ||||||
|     DialogEx* dialog_ex; |  | ||||||
|     Submenu* submenu; |  | ||||||
|     Popup* popup; |  | ||||||
|     ButtonMenu* button_menu; |  | ||||||
|     ButtonPanel* button_panel; |  | ||||||
|     ViewStack* universal_view_stack; |  | ||||||
|     IrdaProgressView* progress_view; |  | ||||||
|     Loading* loading_view; |  | ||||||
| 
 |  | ||||||
|     osMessageQueueId_t event_queue; |  | ||||||
| 
 |  | ||||||
|     void add_view(ViewType view_type, View* view); |  | ||||||
| }; |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| #include "irda_app.h" |  | ||||||
| 
 |  | ||||||
| extern "C" int32_t irda_app(void* p) { |  | ||||||
|     IrdaApp* app = new IrdaApp(); |  | ||||||
|     int32_t result = app->run(p); |  | ||||||
|     delete app; |  | ||||||
| 
 |  | ||||||
|     return result; |  | ||||||
| } |  | ||||||
| @ -1,184 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include "../irda_app_event.h" |  | ||||||
| #include <furi_hal_irda.h> |  | ||||||
| #include "irda.h" |  | ||||||
| #include <vector> |  | ||||||
| #include <string> |  | ||||||
| #include "../irda_app_brute_force.h" |  | ||||||
| 
 |  | ||||||
| class IrdaApp; |  | ||||||
| 
 |  | ||||||
| class IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     virtual void on_enter(IrdaApp* app) = 0; |  | ||||||
|     virtual bool on_event(IrdaApp* app, IrdaAppEvent* event) = 0; |  | ||||||
|     virtual void on_exit(IrdaApp* app) = 0; |  | ||||||
|     virtual ~IrdaAppScene(){}; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneStart : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     uint32_t submenu_item_selected = 0; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneUniversal : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     uint32_t submenu_item_selected = 0; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneLearn : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneLearnSuccess : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
|     bool button_pressed = false; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneLearnEnterName : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneLearnDone : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneRemote : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     std::vector<std::string> buttons_names; |  | ||||||
|     uint32_t buttonmenu_item_selected = 0; |  | ||||||
|     bool button_pressed = false; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneRemoteList : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     uint32_t submenu_item_selected = 0; |  | ||||||
|     std::vector<std::string> remote_names; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneAskBack : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEdit : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     uint32_t submenu_item_selected = 0; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEditKeySelect : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     std::vector<std::string> buttons_names; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEditRename : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEditDelete : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEditRenameDone : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneEditDeleteDone : public IrdaAppScene { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneUniversalCommon : public IrdaAppScene { |  | ||||||
|     bool brute_force_started = false; |  | ||||||
| 
 |  | ||||||
| protected: |  | ||||||
|     bool on_event(IrdaApp* app, IrdaAppEvent* event) final; |  | ||||||
|     void on_exit(IrdaApp* app) final; |  | ||||||
|     IrdaAppBruteForce brute_force; |  | ||||||
|     void remove_popup(IrdaApp* app); |  | ||||||
|     void show_popup(IrdaApp* app, int record_amount); |  | ||||||
|     bool progress_popup(IrdaApp* app); |  | ||||||
|     static void irda_app_item_callback(void* context, uint32_t index); |  | ||||||
|     IrdaAppSceneUniversalCommon(const char* filename) |  | ||||||
|         : brute_force(filename) { |  | ||||||
|     } |  | ||||||
|     ~IrdaAppSceneUniversalCommon() { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneUniversalTV : public IrdaAppSceneUniversalCommon { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     IrdaAppSceneUniversalTV() |  | ||||||
|         : IrdaAppSceneUniversalCommon("/ext/irda/assets/tv.ir") { |  | ||||||
|     } |  | ||||||
|     ~IrdaAppSceneUniversalTV() { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class IrdaAppSceneUniversalAudio : public IrdaAppSceneUniversalCommon { |  | ||||||
| public: |  | ||||||
|     void on_enter(IrdaApp* app) final; |  | ||||||
|     IrdaAppSceneUniversalAudio() |  | ||||||
|         : IrdaAppSceneUniversalCommon("/ext/irda/assets/audio.ir") { |  | ||||||
|     } |  | ||||||
|     ~IrdaAppSceneUniversalAudio() { |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| @ -1,38 +0,0 @@ | |||||||
| #include "../irda_app.h" |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditDeleteDone::on_enter(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     Popup* popup = view_manager->get_popup(); |  | ||||||
| 
 |  | ||||||
|     popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62); |  | ||||||
|     popup_set_header(popup, "Deleted", 83, 19, AlignLeft, AlignBottom); |  | ||||||
| 
 |  | ||||||
|     popup_set_callback(popup, IrdaApp::popup_callback); |  | ||||||
|     popup_set_context(popup, app); |  | ||||||
|     popup_set_timeout(popup, 1500); |  | ||||||
|     popup_enable_timeout(popup); |  | ||||||
| 
 |  | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Popup); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneEditDeleteDone::on_event(IrdaApp* app, IrdaAppEvent* event) { |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     if(event->type == IrdaAppEvent::Type::PopupTimer) { |  | ||||||
|         if(app->get_edit_element() == IrdaApp::EditElement::Remote) { |  | ||||||
|             app->search_and_switch_to_previous_scene( |  | ||||||
|                 {IrdaApp::Scene::Start, IrdaApp::Scene::RemoteList}); |  | ||||||
|         } else { |  | ||||||
|             app->search_and_switch_to_previous_scene({IrdaApp::Scene::Remote}); |  | ||||||
|         } |  | ||||||
|         consumed = true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditDeleteDone::on_exit(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     Popup* popup = view_manager->get_popup(); |  | ||||||
|     popup_set_header(popup, nullptr, 0, 0, AlignLeft, AlignTop); |  | ||||||
| } |  | ||||||
| @ -1,57 +0,0 @@ | |||||||
| #include "../irda_app.h" |  | ||||||
| #include "gui/modules/submenu.h" |  | ||||||
| 
 |  | ||||||
| static void submenu_callback(void* context, uint32_t index) { |  | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |  | ||||||
|     IrdaAppEvent event; |  | ||||||
| 
 |  | ||||||
|     event.type = IrdaAppEvent::Type::MenuSelected; |  | ||||||
|     event.payload.menu_index = index; |  | ||||||
| 
 |  | ||||||
|     app->get_view_manager()->send_event(&event); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditKeySelect::on_enter(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |  | ||||||
|     int item_number = 0; |  | ||||||
| 
 |  | ||||||
|     const char* header = app->get_edit_action() == IrdaApp::EditAction::Rename ? "Rename key:" : |  | ||||||
|                                                                                  "Delete key:"; |  | ||||||
|     submenu_set_header(submenu, header); |  | ||||||
| 
 |  | ||||||
|     auto remote_manager = app->get_remote_manager(); |  | ||||||
|     buttons_names = remote_manager->get_button_list(); |  | ||||||
|     for(const auto& it : buttons_names) { |  | ||||||
|         submenu_add_item(submenu, it.c_str(), item_number++, submenu_callback, app); |  | ||||||
|     } |  | ||||||
|     if((item_number > 0) && (app->get_current_button() != IrdaApp::ButtonNA)) { |  | ||||||
|         submenu_set_selected_item(submenu, app->get_current_button()); |  | ||||||
|         app->set_current_button(IrdaApp::ButtonNA); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Submenu); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneEditKeySelect::on_event(IrdaApp* app, IrdaAppEvent* event) { |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     if(event->type == IrdaAppEvent::Type::MenuSelected) { |  | ||||||
|         app->set_current_button(event->payload.menu_index); |  | ||||||
|         consumed = true; |  | ||||||
|         if(app->get_edit_action() == IrdaApp::EditAction::Rename) { |  | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditRename); |  | ||||||
|         } else { |  | ||||||
|             app->switch_to_next_scene(IrdaApp::Scene::EditDelete); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditKeySelect::on_exit(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     Submenu* submenu = view_manager->get_submenu(); |  | ||||||
| 
 |  | ||||||
|     submenu_reset(submenu); |  | ||||||
| } |  | ||||||
| @ -1,31 +0,0 @@ | |||||||
| #include "../irda_app.h" |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditRenameDone::on_enter(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     Popup* popup = view_manager->get_popup(); |  | ||||||
| 
 |  | ||||||
|     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); |  | ||||||
| 
 |  | ||||||
|     popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); |  | ||||||
| 
 |  | ||||||
|     popup_set_callback(popup, IrdaApp::popup_callback); |  | ||||||
|     popup_set_context(popup, app); |  | ||||||
|     popup_set_timeout(popup, 1500); |  | ||||||
|     popup_enable_timeout(popup); |  | ||||||
| 
 |  | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Popup); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneEditRenameDone::on_event(IrdaApp* app, IrdaAppEvent* event) { |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     if(event->type == IrdaAppEvent::Type::PopupTimer) { |  | ||||||
|         app->switch_to_next_scene(IrdaApp::Scene::Remote); |  | ||||||
|         consumed = true; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneEditRenameDone::on_exit(IrdaApp* app) { |  | ||||||
| } |  | ||||||
| @ -1,75 +0,0 @@ | |||||||
| #include "../irda_app.h" |  | ||||||
| #include "../irda_app_event.h" |  | ||||||
| #include "irda.h" |  | ||||||
| #include <irda_worker.h> |  | ||||||
| 
 |  | ||||||
| static void signal_received_callback(void* context, IrdaWorkerSignal* received_signal) { |  | ||||||
|     furi_assert(context); |  | ||||||
|     furi_assert(received_signal); |  | ||||||
| 
 |  | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |  | ||||||
| 
 |  | ||||||
|     if(irda_worker_signal_is_decoded(received_signal)) { |  | ||||||
|         IrdaAppSignal signal(irda_worker_get_decoded_signal(received_signal)); |  | ||||||
|         app->set_received_signal(signal); |  | ||||||
|     } else { |  | ||||||
|         const uint32_t* timings; |  | ||||||
|         size_t timings_cnt; |  | ||||||
|         irda_worker_get_raw_signal(received_signal, &timings, &timings_cnt); |  | ||||||
|         IrdaAppSignal signal( |  | ||||||
|             timings, timings_cnt, IRDA_COMMON_CARRIER_FREQUENCY, IRDA_COMMON_DUTY_CYCLE); |  | ||||||
|         app->set_received_signal(signal); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     irda_worker_rx_set_received_signal_callback(app->get_irda_worker(), NULL, NULL); |  | ||||||
|     IrdaAppEvent event; |  | ||||||
|     event.type = IrdaAppEvent::Type::IrdaMessageReceived; |  | ||||||
|     auto view_manager = app->get_view_manager(); |  | ||||||
|     view_manager->send_event(&event); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneLearn::on_enter(IrdaApp* app) { |  | ||||||
|     auto view_manager = app->get_view_manager(); |  | ||||||
|     auto popup = view_manager->get_popup(); |  | ||||||
| 
 |  | ||||||
|     auto worker = app->get_irda_worker(); |  | ||||||
|     irda_worker_rx_set_received_signal_callback(worker, signal_received_callback, app); |  | ||||||
|     irda_worker_rx_start(worker); |  | ||||||
| 
 |  | ||||||
|     popup_set_icon(popup, 0, 32, &I_IrdaLearnShort_128x31); |  | ||||||
|     popup_set_text( |  | ||||||
|         popup, "Point the remote at IR port\nand push the button", 5, 10, AlignLeft, AlignCenter); |  | ||||||
|     popup_set_callback(popup, NULL); |  | ||||||
| 
 |  | ||||||
|     view_manager->switch_to(IrdaAppViewManager::ViewType::Popup); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneLearn::on_event(IrdaApp* app, IrdaAppEvent* event) { |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     switch(event->type) { |  | ||||||
|     case IrdaAppEvent::Type::Tick: |  | ||||||
|         consumed = true; |  | ||||||
|         app->notify_red_blink(); |  | ||||||
|         break; |  | ||||||
|     case IrdaAppEvent::Type::IrdaMessageReceived: |  | ||||||
|         app->notify_success(); |  | ||||||
|         app->switch_to_next_scene_without_saving(IrdaApp::Scene::LearnSuccess); |  | ||||||
|         break; |  | ||||||
|     case IrdaAppEvent::Type::Back: |  | ||||||
|         consumed = true; |  | ||||||
|         app->switch_to_previous_scene(); |  | ||||||
|         break; |  | ||||||
|     default: |  | ||||||
|         furi_assert(0); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneLearn::on_exit(IrdaApp* app) { |  | ||||||
|     irda_worker_rx_stop(app->get_irda_worker()); |  | ||||||
|     auto view_manager = app->get_view_manager(); |  | ||||||
|     auto popup = view_manager->get_popup(); |  | ||||||
|     popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignCenter); |  | ||||||
| } |  | ||||||
| @ -1,101 +0,0 @@ | |||||||
| #include <dolphin/dolphin.h> |  | ||||||
| #include <gui/modules/button_menu.h> |  | ||||||
| #include <gui/modules/button_panel.h> |  | ||||||
| #include <gui/view.h> |  | ||||||
| #include <gui/view_stack.h> |  | ||||||
| 
 |  | ||||||
| #include "../irda_app.h" |  | ||||||
| #include "irda/irda_app_event.h" |  | ||||||
| #include "irda/irda_app_view_manager.h" |  | ||||||
| #include "irda/scene/irda_app_scene.h" |  | ||||||
| #include "../view/irda_progress_view.h" |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneUniversalCommon::irda_app_item_callback(void* context, uint32_t index) { |  | ||||||
|     IrdaApp* app = static_cast<IrdaApp*>(context); |  | ||||||
|     IrdaAppEvent event; |  | ||||||
| 
 |  | ||||||
|     event.type = IrdaAppEvent::Type::ButtonPanelPressed; |  | ||||||
|     event.payload.menu_index = index; |  | ||||||
| 
 |  | ||||||
|     app->get_view_manager()->send_event(&event); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void irda_progress_back_callback(void* context) { |  | ||||||
|     furi_assert(context); |  | ||||||
|     auto app = static_cast<IrdaApp*>(context); |  | ||||||
| 
 |  | ||||||
|     IrdaAppEvent irda_event = { |  | ||||||
|         .type = IrdaAppEvent::Type::Back, |  | ||||||
|     }; |  | ||||||
|     app->get_view_manager()->clear_events(); |  | ||||||
|     app->get_view_manager()->send_event(&irda_event); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneUniversalCommon::remove_popup(IrdaApp* app) { |  | ||||||
|     auto stack_view = app->get_view_manager()->get_universal_view_stack(); |  | ||||||
|     auto progress_view = app->get_view_manager()->get_progress(); |  | ||||||
|     view_stack_remove_view(stack_view, irda_progress_view_get_view(progress_view)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneUniversalCommon::show_popup(IrdaApp* app, int record_amount) { |  | ||||||
|     auto stack_view = app->get_view_manager()->get_universal_view_stack(); |  | ||||||
|     auto progress_view = app->get_view_manager()->get_progress(); |  | ||||||
|     irda_progress_view_set_progress_total(progress_view, record_amount); |  | ||||||
|     irda_progress_view_set_back_callback(progress_view, irda_progress_back_callback, app); |  | ||||||
|     view_stack_add_view(stack_view, irda_progress_view_get_view(progress_view)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneUniversalCommon::progress_popup(IrdaApp* app) { |  | ||||||
|     auto progress_view = app->get_view_manager()->get_progress(); |  | ||||||
|     return irda_progress_view_increase_progress(progress_view); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool IrdaAppSceneUniversalCommon::on_event(IrdaApp* app, IrdaAppEvent* event) { |  | ||||||
|     bool consumed = false; |  | ||||||
| 
 |  | ||||||
|     if(brute_force_started) { |  | ||||||
|         if(event->type == IrdaAppEvent::Type::Tick) { |  | ||||||
|             auto view_manager = app->get_view_manager(); |  | ||||||
|             IrdaAppEvent tick_event = {.type = IrdaAppEvent::Type::Tick}; |  | ||||||
|             view_manager->send_event(&tick_event); |  | ||||||
|             bool result = brute_force.send_next_bruteforce(); |  | ||||||
|             if(result) { |  | ||||||
|                 result = progress_popup(app); |  | ||||||
|             } |  | ||||||
|             if(!result) { |  | ||||||
|                 brute_force.stop_bruteforce(); |  | ||||||
|                 brute_force_started = false; |  | ||||||
|                 remove_popup(app); |  | ||||||
|             } |  | ||||||
|             consumed = true; |  | ||||||
|         } else if(event->type == IrdaAppEvent::Type::Back) { |  | ||||||
|             brute_force_started = false; |  | ||||||
|             brute_force.stop_bruteforce(); |  | ||||||
|             remove_popup(app); |  | ||||||
|             consumed = true; |  | ||||||
|         } |  | ||||||
|     } else { |  | ||||||
|         if(event->type == IrdaAppEvent::Type::ButtonPanelPressed) { |  | ||||||
|             int record_amount = 0; |  | ||||||
|             if(brute_force.start_bruteforce(event->payload.menu_index, record_amount)) { |  | ||||||
|                 DOLPHIN_DEED(DolphinDeedIrBruteForce); |  | ||||||
|                 brute_force_started = true; |  | ||||||
|                 show_popup(app, record_amount); |  | ||||||
|             } else { |  | ||||||
|                 app->switch_to_previous_scene(); |  | ||||||
|             } |  | ||||||
|             consumed = true; |  | ||||||
|         } else if(event->type == IrdaAppEvent::Type::Back) { |  | ||||||
|             app->switch_to_previous_scene(); |  | ||||||
|             consumed = true; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return consumed; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void IrdaAppSceneUniversalCommon::on_exit(IrdaApp* app) { |  | ||||||
|     IrdaAppViewManager* view_manager = app->get_view_manager(); |  | ||||||
|     ButtonPanel* button_panel = view_manager->get_button_panel(); |  | ||||||
|     button_panel_reset(button_panel); |  | ||||||
| } |  | ||||||
| @ -1,25 +0,0 @@ | |||||||
| #pragma once |  | ||||||
| #include <gui/view.h> |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| extern "C" { |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| typedef struct IrdaProgressView IrdaProgressView; |  | ||||||
| 
 |  | ||||||
| typedef void (*IrdaProgressViewBackCallback)(void*); |  | ||||||
| 
 |  | ||||||
| IrdaProgressView* irda_progress_view_alloc(); |  | ||||||
| void irda_progress_view_free(IrdaProgressView* progress); |  | ||||||
| View* irda_progress_view_get_view(IrdaProgressView* progress); |  | ||||||
| 
 |  | ||||||
| bool irda_progress_view_increase_progress(IrdaProgressView* progress); |  | ||||||
| void irda_progress_view_set_progress_total(IrdaProgressView* progress, uint16_t progress_max); |  | ||||||
| void irda_progress_view_set_back_callback( |  | ||||||
|     IrdaProgressView* instance, |  | ||||||
|     IrdaProgressViewBackCallback callback, |  | ||||||
|     void* context); |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| @ -1,139 +0,0 @@ | |||||||
| #include <gui/canvas.h> |  | ||||||
| #include <input/input.h> |  | ||||||
| #include <irda.h> |  | ||||||
| #include <irda_worker.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <furi.h> |  | ||||||
| #include <furi_hal_irda.h> |  | ||||||
| #include <furi_hal.h> |  | ||||||
| #include <gui/view_port.h> |  | ||||||
| #include <gui/gui.h> |  | ||||||
| #include <gui/elements.h> |  | ||||||
| 
 |  | ||||||
| #define IRDA_TIMINGS_SIZE 700 |  | ||||||
| 
 |  | ||||||
| typedef struct { |  | ||||||
|     uint32_t timing_cnt; |  | ||||||
|     struct { |  | ||||||
|         uint8_t level; |  | ||||||
|         uint32_t duration; |  | ||||||
|     } timing[IRDA_TIMINGS_SIZE]; |  | ||||||
| } IrdaDelaysArray; |  | ||||||
| 
 |  | ||||||
| typedef struct { |  | ||||||
|     char display_text[64]; |  | ||||||
|     osMessageQueueId_t event_queue; |  | ||||||
|     IrdaDelaysArray delays; |  | ||||||
|     IrdaWorker* worker; |  | ||||||
|     ViewPort* view_port; |  | ||||||
| } IrdaMonitor; |  | ||||||
| 
 |  | ||||||
| void irda_monitor_input_callback(InputEvent* input_event, void* ctx) { |  | ||||||
|     furi_assert(ctx); |  | ||||||
|     IrdaMonitor* irda_monitor = (IrdaMonitor*)ctx; |  | ||||||
| 
 |  | ||||||
|     if((input_event->type == InputTypeShort) && (input_event->key == InputKeyBack)) { |  | ||||||
|         osMessageQueuePut(irda_monitor->event_queue, input_event, 0, 0); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void irda_monitor_draw_callback(Canvas* canvas, void* ctx) { |  | ||||||
|     furi_assert(canvas); |  | ||||||
|     furi_assert(ctx); |  | ||||||
|     IrdaMonitor* irda_monitor = (IrdaMonitor*)ctx; |  | ||||||
| 
 |  | ||||||
|     canvas_clear(canvas); |  | ||||||
|     canvas_set_font(canvas, FontPrimary); |  | ||||||
|     elements_multiline_text_aligned(canvas, 64, 0, AlignCenter, AlignTop, "IRDA monitor\n"); |  | ||||||
|     canvas_set_font(canvas, FontKeyboard); |  | ||||||
|     if(strlen(irda_monitor->display_text)) { |  | ||||||
|         elements_multiline_text_aligned( |  | ||||||
|             canvas, 64, 43, AlignCenter, AlignCenter, irda_monitor->display_text); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void signal_received_callback(void* context, IrdaWorkerSignal* received_signal) { |  | ||||||
|     furi_assert(context); |  | ||||||
|     furi_assert(received_signal); |  | ||||||
|     IrdaMonitor* irda_monitor = context; |  | ||||||
| 
 |  | ||||||
|     if(irda_worker_signal_is_decoded(received_signal)) { |  | ||||||
|         const IrdaMessage* message = irda_worker_get_decoded_signal(received_signal); |  | ||||||
|         snprintf( |  | ||||||
|             irda_monitor->display_text, |  | ||||||
|             sizeof(irda_monitor->display_text), |  | ||||||
|             "%s\nA:0x%0*lX\nC:0x%0*lX\n%s\n", |  | ||||||
|             irda_get_protocol_name(message->protocol), |  | ||||||
|             ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4), |  | ||||||
|             message->address, |  | ||||||
|             ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4), |  | ||||||
|             message->command, |  | ||||||
|             message->repeat ? " R" : ""); |  | ||||||
|         view_port_update(irda_monitor->view_port); |  | ||||||
|         printf( |  | ||||||
|             "== %s, A:0x%0*lX, C:0x%0*lX%s ==\r\n", |  | ||||||
|             irda_get_protocol_name(message->protocol), |  | ||||||
|             ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4), |  | ||||||
|             message->address, |  | ||||||
|             ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4), |  | ||||||
|             message->command, |  | ||||||
|             message->repeat ? " R" : ""); |  | ||||||
|     } else { |  | ||||||
|         const uint32_t* timings; |  | ||||||
|         size_t timings_cnt; |  | ||||||
|         irda_worker_get_raw_signal(received_signal, &timings, &timings_cnt); |  | ||||||
|         snprintf( |  | ||||||
|             irda_monitor->display_text, |  | ||||||
|             sizeof(irda_monitor->display_text), |  | ||||||
|             "RAW\n%d samples\n", |  | ||||||
|             timings_cnt); |  | ||||||
|         view_port_update(irda_monitor->view_port); |  | ||||||
|         printf("RAW, %d samples:\r\n", timings_cnt); |  | ||||||
|         for(size_t i = 0; i < timings_cnt; ++i) { |  | ||||||
|             printf("%lu ", timings[i]); |  | ||||||
|         } |  | ||||||
|         printf("\r\n"); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int32_t irda_monitor_app(void* p) { |  | ||||||
|     (void)p; |  | ||||||
| 
 |  | ||||||
|     IrdaMonitor* irda_monitor = malloc(sizeof(IrdaMonitor)); |  | ||||||
|     irda_monitor->display_text[0] = 0; |  | ||||||
|     irda_monitor->event_queue = osMessageQueueNew(1, sizeof(InputEvent), NULL); |  | ||||||
|     irda_monitor->view_port = view_port_alloc(); |  | ||||||
|     Gui* gui = furi_record_open("gui"); |  | ||||||
| 
 |  | ||||||
|     view_port_draw_callback_set(irda_monitor->view_port, irda_monitor_draw_callback, irda_monitor); |  | ||||||
|     view_port_input_callback_set( |  | ||||||
|         irda_monitor->view_port, irda_monitor_input_callback, irda_monitor); |  | ||||||
| 
 |  | ||||||
|     gui_add_view_port(gui, irda_monitor->view_port, GuiLayerFullscreen); |  | ||||||
| 
 |  | ||||||
|     irda_monitor->worker = irda_worker_alloc(); |  | ||||||
|     irda_worker_rx_start(irda_monitor->worker); |  | ||||||
|     irda_worker_rx_set_received_signal_callback( |  | ||||||
|         irda_monitor->worker, signal_received_callback, irda_monitor); |  | ||||||
|     irda_worker_rx_enable_blink_on_receiving(irda_monitor->worker, true); |  | ||||||
| 
 |  | ||||||
|     while(1) { |  | ||||||
|         InputEvent event; |  | ||||||
|         if(osOK == osMessageQueueGet(irda_monitor->event_queue, &event, NULL, 50)) { |  | ||||||
|             if((event.type == InputTypeShort) && (event.key == InputKeyBack)) { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     irda_worker_rx_stop(irda_monitor->worker); |  | ||||||
|     irda_worker_free(irda_monitor->worker); |  | ||||||
|     osMessageQueueDelete(irda_monitor->event_queue); |  | ||||||
|     view_port_enabled_set(irda_monitor->view_port, false); |  | ||||||
|     gui_remove_view_port(gui, irda_monitor->view_port); |  | ||||||
|     view_port_free(irda_monitor->view_port); |  | ||||||
|     furi_record_close("gui"); |  | ||||||
|     free(irda_monitor); |  | ||||||
| 
 |  | ||||||
|     return 0; |  | ||||||
| } |  | ||||||
| @ -1,13 +1,13 @@ | |||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include "../minunit.h" | #include "../minunit.h" | ||||||
| #include "irda.h" | #include "infrared.h" | ||||||
| #include "common/irda_common_i.h" | #include "common/infrared_common_i.h" | ||||||
| #include "test_data/irda_nec_test_data.srcdata" | #include "test_data/infrared_nec_test_data.srcdata" | ||||||
| #include "test_data/irda_necext_test_data.srcdata" | #include "test_data/infrared_necext_test_data.srcdata" | ||||||
| #include "test_data/irda_samsung_test_data.srcdata" | #include "test_data/infrared_samsung_test_data.srcdata" | ||||||
| #include "test_data/irda_rc6_test_data.srcdata" | #include "test_data/infrared_rc6_test_data.srcdata" | ||||||
| #include "test_data/irda_rc5_test_data.srcdata" | #include "test_data/infrared_rc5_test_data.srcdata" | ||||||
| #include "test_data/irda_sirc_test_data.srcdata" | #include "test_data/infrared_sirc_test_data.srcdata" | ||||||
| 
 | 
 | ||||||
| #define RUN_ENCODER(data, expected) \ | #define RUN_ENCODER(data, expected) \ | ||||||
|     run_encoder((data), COUNT_OF(data), (expected), COUNT_OF(expected)) |     run_encoder((data), COUNT_OF(data), (expected), COUNT_OF(expected)) | ||||||
| @ -17,28 +17,28 @@ | |||||||
| 
 | 
 | ||||||
| #define RUN_ENCODER_DECODER(data) run_encoder_decoder((data), COUNT_OF(data)) | #define RUN_ENCODER_DECODER(data) run_encoder_decoder((data), COUNT_OF(data)) | ||||||
| 
 | 
 | ||||||
| static IrdaDecoderHandler* decoder_handler; | static InfraredDecoderHandler* decoder_handler; | ||||||
| static IrdaEncoderHandler* encoder_handler; | static InfraredEncoderHandler* encoder_handler; | ||||||
| 
 | 
 | ||||||
| static void test_setup(void) { | static void test_setup(void) { | ||||||
|     decoder_handler = irda_alloc_decoder(); |     decoder_handler = infrared_alloc_decoder(); | ||||||
|     encoder_handler = irda_alloc_encoder(); |     encoder_handler = infrared_alloc_encoder(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void test_teardown(void) { | static void test_teardown(void) { | ||||||
|     irda_free_decoder(decoder_handler); |     infrared_free_decoder(decoder_handler); | ||||||
|     irda_free_encoder(encoder_handler); |     infrared_free_encoder(encoder_handler); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void compare_message_results( | static void compare_message_results( | ||||||
|     const IrdaMessage* message_decoded, |     const InfraredMessage* message_decoded, | ||||||
|     const IrdaMessage* message_expected) { |     const InfraredMessage* message_expected) { | ||||||
|     mu_check(message_decoded->protocol == message_expected->protocol); |     mu_check(message_decoded->protocol == message_expected->protocol); | ||||||
|     mu_check(message_decoded->command == message_expected->command); |     mu_check(message_decoded->command == message_expected->command); | ||||||
|     mu_check(message_decoded->address == message_expected->address); |     mu_check(message_decoded->address == message_expected->address); | ||||||
|     if((message_expected->protocol == IrdaProtocolSIRC) || |     if((message_expected->protocol == InfraredProtocolSIRC) || | ||||||
|        (message_expected->protocol == IrdaProtocolSIRC15) || |        (message_expected->protocol == InfraredProtocolSIRC15) || | ||||||
|        (message_expected->protocol == IrdaProtocolSIRC20)) { |        (message_expected->protocol == InfraredProtocolSIRC20)) { | ||||||
|         mu_check(message_decoded->repeat == false); |         mu_check(message_decoded->repeat == false); | ||||||
|     } else { |     } else { | ||||||
|         mu_check(message_decoded->repeat == message_expected->repeat); |         mu_check(message_decoded->repeat == message_expected->repeat); | ||||||
| @ -47,19 +47,19 @@ static void compare_message_results( | |||||||
| 
 | 
 | ||||||
| /* Encodes signal and merges same levels (high+high, low+low) */ | /* Encodes signal and merges same levels (high+high, low+low) */ | ||||||
| static void run_encoder_fill_array( | static void run_encoder_fill_array( | ||||||
|     IrdaEncoderHandler* handler, |     InfraredEncoderHandler* handler, | ||||||
|     uint32_t* timings, |     uint32_t* timings, | ||||||
|     uint32_t* timings_len, |     uint32_t* timings_len, | ||||||
|     bool* start_level) { |     bool* start_level) { | ||||||
|     uint32_t duration = 0; |     uint32_t duration = 0; | ||||||
|     bool level = false; |     bool level = false; | ||||||
|     bool level_read; |     bool level_read; | ||||||
|     IrdaStatus status = IrdaStatusError; |     InfraredStatus status = InfraredStatusError; | ||||||
|     int i = 0; |     int i = 0; | ||||||
|     bool first = true; |     bool first = true; | ||||||
| 
 | 
 | ||||||
|     while(1) { |     while(1) { | ||||||
|         status = irda_encode(handler, &duration, &level_read); |         status = infrared_encode(handler, &duration, &level_read); | ||||||
|         if(first) { |         if(first) { | ||||||
|             if(start_level) *start_level = level_read; |             if(start_level) *start_level = level_read; | ||||||
|             first = false; |             first = false; | ||||||
| @ -72,8 +72,8 @@ static void run_encoder_fill_array( | |||||||
|         level = level_read; |         level = level_read; | ||||||
|         timings[i] += duration; |         timings[i] += duration; | ||||||
| 
 | 
 | ||||||
|         furi_check((status == IrdaStatusOk) || (status == IrdaStatusDone)); |         furi_check((status == InfraredStatusOk) || (status == InfraredStatusDone)); | ||||||
|         if(status == IrdaStatusDone) break; |         if(status == InfraredStatusDone) break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     *timings_len = i + 1; |     *timings_len = i + 1; | ||||||
| @ -81,7 +81,7 @@ static void run_encoder_fill_array( | |||||||
| 
 | 
 | ||||||
| // messages in input array for encoder should have one protocol
 | // messages in input array for encoder should have one protocol
 | ||||||
| static void run_encoder( | static void run_encoder( | ||||||
|     const IrdaMessage input_messages[], |     const InfraredMessage input_messages[], | ||||||
|     uint32_t input_messages_len, |     uint32_t input_messages_len, | ||||||
|     const uint32_t expected_timings[], |     const uint32_t expected_timings[], | ||||||
|     uint32_t expected_timings_len) { |     uint32_t expected_timings_len) { | ||||||
| @ -91,9 +91,9 @@ static void run_encoder( | |||||||
|     timings = malloc(sizeof(uint32_t) * timings_len); |     timings = malloc(sizeof(uint32_t) * timings_len); | ||||||
| 
 | 
 | ||||||
|     for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) { |     for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) { | ||||||
|         const IrdaMessage* message = &input_messages[message_counter]; |         const InfraredMessage* message = &input_messages[message_counter]; | ||||||
|         if(!message->repeat) { |         if(!message->repeat) { | ||||||
|             irda_reset_encoder(encoder_handler, message); |             infrared_reset_encoder(encoder_handler, message); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         timings_len = 200; |         timings_len = 200; | ||||||
| @ -109,25 +109,26 @@ static void run_encoder( | |||||||
|     mu_assert(j == expected_timings_len, "encoded less timings than expected"); |     mu_assert(j == expected_timings_len, "encoded less timings than expected"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void run_encoder_decoder(const IrdaMessage input_messages[], uint32_t input_messages_len) { | static void | ||||||
|  |     run_encoder_decoder(const InfraredMessage input_messages[], uint32_t input_messages_len) { | ||||||
|     uint32_t* timings = 0; |     uint32_t* timings = 0; | ||||||
|     uint32_t timings_len = 200; |     uint32_t timings_len = 200; | ||||||
|     bool level = false; |     bool level = false; | ||||||
|     timings = malloc(sizeof(uint32_t) * timings_len); |     timings = malloc(sizeof(uint32_t) * timings_len); | ||||||
| 
 | 
 | ||||||
|     for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) { |     for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) { | ||||||
|         const IrdaMessage* message_encoded = &input_messages[message_counter]; |         const InfraredMessage* message_encoded = &input_messages[message_counter]; | ||||||
|         if(!message_encoded->repeat) { |         if(!message_encoded->repeat) { | ||||||
|             irda_reset_encoder(encoder_handler, message_encoded); |             infrared_reset_encoder(encoder_handler, message_encoded); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         timings_len = 200; |         timings_len = 200; | ||||||
|         run_encoder_fill_array(encoder_handler, timings, &timings_len, &level); |         run_encoder_fill_array(encoder_handler, timings, &timings_len, &level); | ||||||
|         furi_check(timings_len <= 200); |         furi_check(timings_len <= 200); | ||||||
| 
 | 
 | ||||||
|         const IrdaMessage* message_decoded = 0; |         const InfraredMessage* message_decoded = 0; | ||||||
|         for(int i = 0; i < timings_len; ++i) { |         for(int i = 0; i < timings_len; ++i) { | ||||||
|             message_decoded = irda_decode(decoder_handler, level, timings[i]); |             message_decoded = infrared_decode(decoder_handler, level, timings[i]); | ||||||
|             if((i == timings_len - 2) && level && message_decoded) { |             if((i == timings_len - 2) && level && message_decoded) { | ||||||
|                 /* In case we end with space timing - message can be decoded at last mark */ |                 /* In case we end with space timing - message can be decoded at last mark */ | ||||||
|                 break; |                 break; | ||||||
| @ -135,7 +136,7 @@ static void run_encoder_decoder(const IrdaMessage input_messages[], uint32_t inp | |||||||
|                 mu_check(!message_decoded); |                 mu_check(!message_decoded); | ||||||
|             } else { |             } else { | ||||||
|                 if(!message_decoded) { |                 if(!message_decoded) { | ||||||
|                     message_decoded = irda_check_decoder_ready(decoder_handler); |                     message_decoded = infrared_check_decoder_ready(decoder_handler); | ||||||
|                 } |                 } | ||||||
|                 mu_check(message_decoded); |                 mu_check(message_decoded); | ||||||
|             } |             } | ||||||
| @ -153,32 +154,32 @@ static void run_encoder_decoder(const IrdaMessage input_messages[], uint32_t inp | |||||||
| static void run_decoder( | static void run_decoder( | ||||||
|     const uint32_t* input_delays, |     const uint32_t* input_delays, | ||||||
|     uint32_t input_delays_len, |     uint32_t input_delays_len, | ||||||
|     const IrdaMessage* message_expected, |     const InfraredMessage* message_expected, | ||||||
|     uint32_t message_expected_len) { |     uint32_t message_expected_len) { | ||||||
|     IrdaMessage message_decoded_check_local; |     InfraredMessage message_decoded_check_local; | ||||||
|     bool level = 0; |     bool level = 0; | ||||||
|     uint32_t message_counter = 0; |     uint32_t message_counter = 0; | ||||||
|     const IrdaMessage* message_decoded = 0; |     const InfraredMessage* message_decoded = 0; | ||||||
| 
 | 
 | ||||||
|     for(uint32_t i = 0; i < input_delays_len; ++i) { |     for(uint32_t i = 0; i < input_delays_len; ++i) { | ||||||
|         const IrdaMessage* message_decoded_check = 0; |         const InfraredMessage* message_decoded_check = 0; | ||||||
| 
 | 
 | ||||||
|         if(input_delays[i] > IRDA_RAW_RX_TIMING_DELAY_US) { |         if(input_delays[i] > INFRARED_RAW_RX_TIMING_DELAY_US) { | ||||||
|             message_decoded_check = irda_check_decoder_ready(decoder_handler); |             message_decoded_check = infrared_check_decoder_ready(decoder_handler); | ||||||
|             if(message_decoded_check) { |             if(message_decoded_check) { | ||||||
|                 /* irda_decode() can reset message, but we have to call irda_decode() to perform real
 |                 /* infrared_decode() can reset message, but we have to call infrared_decode() to perform real
 | ||||||
|                  * simulation: irda_check() by timeout, then irda_decode() when meet edge */ |                  * simulation: infrared_check() by timeout, then infrared_decode() when meet edge */ | ||||||
|                 message_decoded_check_local = *message_decoded_check; |                 message_decoded_check_local = *message_decoded_check; | ||||||
|                 message_decoded_check = &message_decoded_check_local; |                 message_decoded_check = &message_decoded_check_local; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         message_decoded = irda_decode(decoder_handler, level, input_delays[i]); |         message_decoded = infrared_decode(decoder_handler, level, input_delays[i]); | ||||||
| 
 | 
 | ||||||
|         if(message_decoded_check || message_decoded) { |         if(message_decoded_check || message_decoded) { | ||||||
|             mu_assert( |             mu_assert( | ||||||
|                 !(message_decoded_check && message_decoded), |                 !(message_decoded_check && message_decoded), | ||||||
|                 "both messages decoded: check_ready() and irda_decode()"); |                 "both messages decoded: check_ready() and infrared_decode()"); | ||||||
| 
 | 
 | ||||||
|             if(message_decoded_check) { |             if(message_decoded_check) { | ||||||
|                 message_decoded = message_decoded_check; |                 message_decoded = message_decoded_check; | ||||||
| @ -192,7 +193,7 @@ static void run_decoder( | |||||||
|         level = !level; |         level = !level; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     message_decoded = irda_check_decoder_ready(decoder_handler); |     message_decoded = infrared_check_decoder_ready(decoder_handler); | ||||||
|     if(message_decoded) { |     if(message_decoded) { | ||||||
|         compare_message_results(message_decoded, &message_expected[message_counter]); |         compare_message_results(message_decoded, &message_expected[message_counter]); | ||||||
|         ++message_counter; |         ++message_counter; | ||||||
| @ -304,7 +305,7 @@ MU_TEST(test_encoder_decoder_all) { | |||||||
|     RUN_ENCODER_DECODER(test_sirc); |     RUN_ENCODER_DECODER(test_sirc); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| MU_TEST_SUITE(test_irda_decoder_encoder) { | MU_TEST_SUITE(test_infrared_decoder_encoder) { | ||||||
|     MU_SUITE_CONFIGURE(&test_setup, &test_teardown); |     MU_SUITE_CONFIGURE(&test_setup, &test_teardown); | ||||||
| 
 | 
 | ||||||
|     MU_RUN_TEST(test_encoder_sirc); |     MU_RUN_TEST(test_encoder_sirc); | ||||||
| @ -323,8 +324,8 @@ MU_TEST_SUITE(test_irda_decoder_encoder) { | |||||||
|     MU_RUN_TEST(test_encoder_decoder_all); |     MU_RUN_TEST(test_encoder_decoder_all); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int run_minunit_test_irda_decoder_encoder() { | int run_minunit_test_infrared_decoder_encoder() { | ||||||
|     MU_RUN_SUITE(test_irda_decoder_encoder); |     MU_RUN_SUITE(test_infrared_decoder_encoder); | ||||||
| 
 | 
 | ||||||
|     return MU_EXIT_CODE; |     return MU_EXIT_CODE; | ||||||
| } | } | ||||||
| @ -10,10 +10,10 @@ const uint32_t test_decoder_nec_input1[] = { | |||||||
| /* message */ | /* message */ | ||||||
| 1415838, 9080, 4436, 611, 494, 600, 505, 578, 500, 608, 501, 602, 502, 580, 498, 606, 508, 605, 500, 583, 1633, 608, 1608, 611, 1631, 578, 1638, 602, 1614, 606, 1637, 583, 1633, 607, 1609, 611, 494, 600, 505, 570, 500, 604, 501, 602, 502, 581, 497, 606, 499, 605, 499, 583, 1633, 617, 1608, 611, 1631, 579, 1638, 602}; | 1415838, 9080, 4436, 611, 494, 600, 505, 578, 500, 608, 501, 602, 502, 580, 498, 606, 508, 605, 500, 583, 1633, 608, 1608, 611, 1631, 578, 1638, 602, 1614, 606, 1637, 583, 1633, 607, 1609, 611, 494, 600, 505, 570, 500, 604, 501, 602, 502, 581, 497, 606, 499, 605, 499, 583, 1633, 617, 1608, 611, 1631, 579, 1638, 602}; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_nec_expected1[] = { | const InfraredMessage test_decoder_nec_expected1[] = { | ||||||
|     {IrdaProtocolNEC,     0x00,      0,  false}, |     {InfraredProtocolNEC,     0x00,      0,  false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0,  true}, |     {InfraredProtocolNEC,     0x00,      0,  true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0,  false}, |     {InfraredProtocolNEC,     0x00,      0,  false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_decoder_nec_input2[] = { | const uint32_t test_decoder_nec_input2[] = { | ||||||
| @ -123,59 +123,59 @@ const uint32_t test_decoder_nec_input2[] = { | |||||||
| 40069,9025,2221,588 | 40069,9025,2221,588 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_nec_expected2[] = { | const InfraredMessage test_decoder_nec_expected2[] = { | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   false}, |     {InfraredProtocolNEC,     0x00,      0x02,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   false}, |     {InfraredProtocolNEC,     0x00,      0x02,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x02,   true}, |     {InfraredProtocolNEC,     0x00,      0x02,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x06,   false}, |     {InfraredProtocolNEC,     0x00,      0x06,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x06,   true}, |     {InfraredProtocolNEC,     0x00,      0x06,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x04,   false}, |     {InfraredProtocolNEC,     0x00,      0x04,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x04,   true}, |     {InfraredProtocolNEC,     0x00,      0x04,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   true}, |     {InfraredProtocolNEC,     0x00,      0x08,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   true}, |     {InfraredProtocolNEC,     0x00,      0x08,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x09,   false}, |     {InfraredProtocolNEC,     0x00,      0x09,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x09,   false}, |     {InfraredProtocolNEC,     0x00,      0x09,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x09,   false}, |     {InfraredProtocolNEC,     0x00,      0x09,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x0A,   false}, |     {InfraredProtocolNEC,     0x00,      0x0A,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   true}, |     {InfraredProtocolNEC,     0x00,      0x08,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   true}, |     {InfraredProtocolNEC,     0x00,      0x08,   true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x0A,   false}, |     {InfraredProtocolNEC,     0x00,      0x0A,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x08,   false}, |     {InfraredProtocolNEC,     0x00,      0x08,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x0A,   false}, |     {InfraredProtocolNEC,     0x00,      0x0A,   false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x0A,   true}, |     {InfraredProtocolNEC,     0x00,      0x0A,   true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_decoder_nec_input3[] = { | const uint32_t test_decoder_nec_input3[] = { | ||||||
| @ -198,112 +198,112 @@ const uint32_t test_decoder_nec_input3[] = { | |||||||
|     92592,      8861, 4414, 538, |     92592,      8861, 4414, 538, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_nec_expected3[] = { | const InfraredMessage test_decoder_nec_expected3[] = { | ||||||
|     {IrdaProtocolNECext,    0x286,      0xB649,     false}, |     {InfraredProtocolNECext,    0x286,      0xB649,     false}, | ||||||
|     {IrdaProtocolNECext,    0x286,      0xB649,     false}, |     {InfraredProtocolNECext,    0x286,      0xB649,     false}, | ||||||
|     {IrdaProtocolNECext,    0x6880,     0xB649,     false}, |     {InfraredProtocolNECext,    0x6880,     0xB649,     false}, | ||||||
|     {IrdaProtocolNECext,    0x6880,     0xB649,     false}, |     {InfraredProtocolNECext,    0x6880,     0xB649,     false}, | ||||||
|     {IrdaProtocolNECext,    0x6380,     0x150F,     false}, |     {InfraredProtocolNECext,    0x6380,     0x150F,     false}, | ||||||
|     {IrdaProtocolNECext,    0x6380,     0x150F,     false}, |     {InfraredProtocolNECext,    0x6380,     0x150F,     false}, | ||||||
|     {IrdaProtocolNECext,    0x6480,     0x849,      false}, |     {InfraredProtocolNECext,    0x6480,     0x849,      false}, | ||||||
|     {IrdaProtocolNECext,    0x6480,     0x849,      false}, |     {InfraredProtocolNECext,    0x6480,     0x849,      false}, | ||||||
|     {IrdaProtocolNECext,    0x7A83,     0x8,        false}, |     {InfraredProtocolNECext,    0x7A83,     0x8,        false}, | ||||||
|     {IrdaProtocolNECext,    0x7A83,     0x8,        false}, |     {InfraredProtocolNECext,    0x7A83,     0x8,        false}, | ||||||
|     {IrdaProtocolNEC,       0x71,       0x4A,       false}, |     {InfraredProtocolNEC,       0x71,       0x4A,       false}, | ||||||
|     {IrdaProtocolNEC,       0x71,       0x4A,       false}, |     {InfraredProtocolNEC,       0x71,       0x4A,       false}, | ||||||
|     {IrdaProtocolNEC42,     0x7B,       0x0,        false}, |     {InfraredProtocolNEC42,     0x7B,       0x0,        false}, | ||||||
|     {IrdaProtocolNEC42,     0x7B,       0x0,        false}, |     {InfraredProtocolNEC42,     0x7B,       0x0,        false}, | ||||||
|     {IrdaProtocolNEC42,     0x11C,      0x12,       false}, |     {InfraredProtocolNEC42,     0x11C,      0x12,       false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_nec[] = { | const InfraredMessage test_nec[] = { | ||||||
|     {IrdaProtocolNEC,     0x00,      0x00,  false}, |     {InfraredProtocolNEC,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC,     0x01,      0x00,  false}, |     {InfraredProtocolNEC,     0x01,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC,     0x01,      0x80,  false}, |     {InfraredProtocolNEC,     0x01,      0x80,  false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x80,  false}, |     {InfraredProtocolNEC,     0x00,      0x80,  false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x00,  false}, |     {InfraredProtocolNEC,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x00,  true}, |     {InfraredProtocolNEC,     0x00,      0x00,  true}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x00,  false}, |     {InfraredProtocolNEC,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC,     0x00,      0x00,  true}, |     {InfraredProtocolNEC,     0x00,      0x00,  true}, | ||||||
|     {IrdaProtocolNEC,     0xFF,      0xFF,  false}, |     {InfraredProtocolNEC,     0xFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC,     0xFE,      0xFF,  false}, |     {InfraredProtocolNEC,     0xFE,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC,     0xFE,      0x7F,  false}, |     {InfraredProtocolNEC,     0xFE,      0x7F,  false}, | ||||||
|     {IrdaProtocolNEC,     0xFF,      0x7F,  false}, |     {InfraredProtocolNEC,     0xFF,      0x7F,  false}, | ||||||
|     {IrdaProtocolNEC,     0xFF,      0xFF,  false}, |     {InfraredProtocolNEC,     0xFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC,     0xFF,      0xFF,  true}, |     {InfraredProtocolNEC,     0xFF,      0xFF,  true}, | ||||||
|     {IrdaProtocolNEC,     0xAA,      0x55,  false}, |     {InfraredProtocolNEC,     0xAA,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC,     0x55,      0xAA,  false}, |     {InfraredProtocolNEC,     0x55,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC,     0x55,      0x55,  false}, |     {InfraredProtocolNEC,     0x55,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC,     0xAA,      0xAA,  false}, |     {InfraredProtocolNEC,     0xAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC,     0xAA,      0xAA,  true}, |     {InfraredProtocolNEC,     0xAA,      0xAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolNEC,     0xAA,      0xAA,  false}, |     {InfraredProtocolNEC,     0xAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC,     0xAA,      0xAA,  true}, |     {InfraredProtocolNEC,     0xAA,      0xAA,  true}, | ||||||
|     {IrdaProtocolNEC,     0xAA,      0xAA,  true}, |     {InfraredProtocolNEC,     0xAA,      0xAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolNEC,     0x55,      0x55,  false}, |     {InfraredProtocolNEC,     0x55,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC,     0x55,      0x55,  true}, |     {InfraredProtocolNEC,     0x55,      0x55,  true}, | ||||||
|     {IrdaProtocolNEC,     0x55,      0x55,  true}, |     {InfraredProtocolNEC,     0x55,      0x55,  true}, | ||||||
|     {IrdaProtocolNEC,     0x55,      0x55,  true}, |     {InfraredProtocolNEC,     0x55,      0x55,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_nec42[] = { | const InfraredMessage test_nec42[] = { | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x00,  false}, |     {InfraredProtocolNEC42,     0x0000,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0001,      0x00,  false}, |     {InfraredProtocolNEC42,     0x0001,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0001,      0x80,  false}, |     {InfraredProtocolNEC42,     0x0001,      0x80,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x80,  false}, |     {InfraredProtocolNEC42,     0x0000,      0x80,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x00,  false}, |     {InfraredProtocolNEC42,     0x0000,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x00,  true}, |     {InfraredProtocolNEC42,     0x0000,      0x00,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x00,  false}, |     {InfraredProtocolNEC42,     0x0000,      0x00,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0000,      0x00,  true}, |     {InfraredProtocolNEC42,     0x0000,      0x00,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFF,      0xFF,  false}, |     {InfraredProtocolNEC42,     0x1FFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFE,      0xFF,  false}, |     {InfraredProtocolNEC42,     0x1FFE,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFE,      0x7F,  false}, |     {InfraredProtocolNEC42,     0x1FFE,      0x7F,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFF,      0x7F,  false}, |     {InfraredProtocolNEC42,     0x1FFF,      0x7F,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFF,      0xFF,  false}, |     {InfraredProtocolNEC42,     0x1FFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1FFF,      0xFF,  true}, |     {InfraredProtocolNEC42,     0x1FFF,      0xFF,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0x55,  false}, |     {InfraredProtocolNEC42,     0x0AAA,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0xAA,  false}, |     {InfraredProtocolNEC42,     0x1555,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0x55,  false}, |     {InfraredProtocolNEC42,     0x1555,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0xAA,  false}, |     {InfraredProtocolNEC42,     0x0AAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0xAA,  true}, |     {InfraredProtocolNEC42,     0x0AAA,      0xAA,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0xAA,  false}, |     {InfraredProtocolNEC42,     0x0AAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0xAA,  true}, |     {InfraredProtocolNEC42,     0x0AAA,      0xAA,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x0AAA,      0xAA,  true}, |     {InfraredProtocolNEC42,     0x0AAA,      0xAA,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0x55,  false}, |     {InfraredProtocolNEC42,     0x1555,      0x55,  false}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0x55,  true}, |     {InfraredProtocolNEC42,     0x1555,      0x55,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0x55,  true}, |     {InfraredProtocolNEC42,     0x1555,      0x55,  true}, | ||||||
|     {IrdaProtocolNEC42,     0x1555,      0x55,  true}, |     {InfraredProtocolNEC42,     0x1555,      0x55,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_nec42ext[] = { | const InfraredMessage test_nec42ext[] = { | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x0000,  false}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000001,      0x0000,  false}, |     {InfraredProtocolNEC42ext,     0x0000001,      0x0000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000001,      0x8000,  false}, |     {InfraredProtocolNEC42ext,     0x0000001,      0x8000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x8000,  false}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x8000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x0000,  false}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x0000,  true}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x0000,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x0000,  false}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x0000000,      0x0000,  true}, |     {InfraredProtocolNEC42ext,     0x0000000,      0x0000,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FF,      0xF00F,  false}, |     {InfraredProtocolNEC42ext,     0x3F000FF,      0xF00F,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FE,      0xF00F,  false}, |     {InfraredProtocolNEC42ext,     0x3F000FE,      0xF00F,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FE,      0x700F,  false}, |     {InfraredProtocolNEC42ext,     0x3F000FE,      0x700F,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FF,      0x700F,  false}, |     {InfraredProtocolNEC42ext,     0x3F000FF,      0x700F,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FF,      0xF00F,  false}, |     {InfraredProtocolNEC42ext,     0x3F000FF,      0xF00F,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x3F000FF,      0xF00F,  true}, |     {InfraredProtocolNEC42ext,     0x3F000FF,      0xF00F,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0x5555,  false}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0x5555,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0xAAAA,  false}, |     {InfraredProtocolNEC42ext,     0x1555555,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0x5555,  false}, |     {InfraredProtocolNEC42ext,     0x1555555,      0x5555,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  false}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  false}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, |     {InfraredProtocolNEC42ext,     0x2AAAAAA,      0xAAAA,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0x5555,  false}, |     {InfraredProtocolNEC42ext,     0x1555555,      0x5555,  false}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0x5555,  true}, |     {InfraredProtocolNEC42ext,     0x1555555,      0x5555,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0x5555,  true}, |     {InfraredProtocolNEC42ext,     0x1555555,      0x5555,  true}, | ||||||
|     {IrdaProtocolNEC42ext,     0x1555555,      0x5555,  true}, |     {InfraredProtocolNEC42ext,     0x1555555,      0x5555,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_decoder_nec42ext_input1[] = { | const uint32_t test_decoder_nec42ext_input1[] = { | ||||||
| @ -331,11 +331,11 @@ const uint32_t test_decoder_nec42ext_input2[] = { | |||||||
|                         560, 560, 560, 560, 560, 10000, 560,                                                // 42 OK + 1 failed |                         560, 560, 560, 560, 560, 10000, 560,                                                // 42 OK + 1 failed | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_nec42ext_expected1[] = { | const InfraredMessage test_decoder_nec42ext_expected1[] = { | ||||||
|     {IrdaProtocolNEC42ext,     0x00,      0,  false}, |     {InfraredProtocolNEC42ext,     0x00,      0,  false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_nec42ext_expected2[] = { | const InfraredMessage test_decoder_nec42ext_expected2[] = { | ||||||
|     {IrdaProtocolNEC42ext,     0x00,      0,  false}, |     {InfraredProtocolNEC42ext,     0x00,      0,  false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -110,146 +110,146 @@ const uint32_t test_decoder_necext_input1[] = { | |||||||
| 261924, 8965, 4465, 585, 529, 588, 525, 592, 1638, 588, 525, 592, 523, 584, 530, 587, 526, 591, 1639, 587, 1642, 583, 529, 587, 527, 590, 1639, 587, 1643, 584, 1646, 590, | 261924, 8965, 4465, 585, 529, 588, 525, 592, 1638, 588, 525, 592, 523, 584, 530, 587, 526, 591, 1639, 587, 1642, 583, 529, 587, 527, 590, 1639, 587, 1643, 584, 1646, 590, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_necext_expected1[] = { | const InfraredMessage test_decoder_necext_expected1[] = { | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  false}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  false}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
|     {IrdaProtocolNECext,     0x7984,    0xed12,  true}, |     {InfraredProtocolNECext,     0x7984,    0xed12,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_necext[] = { | const InfraredMessage test_necext[] = { | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x0000,  false}, |     {InfraredProtocolNECext,     0x0000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0001,      0x0000,  false}, |     {InfraredProtocolNECext,     0x0001,      0x0000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0001,      0x8000,  false}, |     {InfraredProtocolNECext,     0x0001,      0x8000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x8000,  false}, |     {InfraredProtocolNECext,     0x0000,      0x8000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x0000,  false}, |     {InfraredProtocolNECext,     0x0000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x0000,  true}, |     {InfraredProtocolNECext,     0x0000,      0x0000,  true}, | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x0000,  false}, |     {InfraredProtocolNECext,     0x0000,      0x0000,  false}, | ||||||
|     {IrdaProtocolNECext,     0x0000,      0x0000,  true}, |     {InfraredProtocolNECext,     0x0000,      0x0000,  true}, | ||||||
|     {IrdaProtocolNECext,     0xFFFF,      0xFFFF,  false}, |     {InfraredProtocolNECext,     0xFFFF,      0xFFFF,  false}, | ||||||
|     {IrdaProtocolNECext,     0xFFFE,      0xFFFF,  false}, |     {InfraredProtocolNECext,     0xFFFE,      0xFFFF,  false}, | ||||||
|     {IrdaProtocolNECext,     0xFFFE,      0x7FFF,  false}, |     {InfraredProtocolNECext,     0xFFFE,      0x7FFF,  false}, | ||||||
|     {IrdaProtocolNECext,     0xFFFF,      0x7FFF,  false}, |     {InfraredProtocolNECext,     0xFFFF,      0x7FFF,  false}, | ||||||
|     {IrdaProtocolNECext,     0xFFFF,      0xFFFF,  false}, |     {InfraredProtocolNECext,     0xFFFF,      0xFFFF,  false}, | ||||||
|     {IrdaProtocolNECext,     0xFFFF,      0xFFFF,  true}, |     {InfraredProtocolNECext,     0xFFFF,      0xFFFF,  true}, | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0x5555,  false}, |     {InfraredProtocolNECext,     0xAAAA,      0x5555,  false}, | ||||||
|     {IrdaProtocolNECext,     0x5555,      0xAAAA,  false}, |     {InfraredProtocolNECext,     0x5555,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNECext,     0x5555,      0x5555,  false}, |     {InfraredProtocolNECext,     0x5555,      0x5555,  false}, | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0xAAAA,  false}, |     {InfraredProtocolNECext,     0xAAAA,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0xAAAA,  true}, |     {InfraredProtocolNECext,     0xAAAA,      0xAAAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0xAAAA,  false}, |     {InfraredProtocolNECext,     0xAAAA,      0xAAAA,  false}, | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0xAAAA,  true}, |     {InfraredProtocolNECext,     0xAAAA,      0xAAAA,  true}, | ||||||
|     {IrdaProtocolNECext,     0xAAAA,      0xAAAA,  true}, |     {InfraredProtocolNECext,     0xAAAA,      0xAAAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolNECext,     0x5555,      0x5555,  false}, |     {InfraredProtocolNECext,     0x5555,      0x5555,  false}, | ||||||
|     {IrdaProtocolNECext,     0x5555,      0x5555,  true}, |     {InfraredProtocolNECext,     0x5555,      0x5555,  true}, | ||||||
|     {IrdaProtocolNECext,     0x5555,      0x5555,  true}, |     {InfraredProtocolNECext,     0x5555,      0x5555,  true}, | ||||||
|     {IrdaProtocolNECext,     0x5555,      0x5555,  true}, |     {InfraredProtocolNECext,     0x5555,      0x5555,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -8,8 +8,8 @@ const uint32_t test_decoder_rc5x_input1[] = { | |||||||
| 27000 + 888, 1776, 888, 888, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | 27000 + 888, 1776, 888, 888, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5x_expected1[] = { | const InfraredMessage test_decoder_rc5x_expected1[] = { | ||||||
|     {IrdaProtocolRC5X,     0x13,      0x10,  false}, // toggle 0 |     {InfraredProtocolRC5X,     0x13,      0x10,  false}, // toggle 0 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -22,8 +22,8 @@ const uint32_t test_decoder_rc5_input1[] = { | |||||||
| 27000 + 888, 888, 888, 1776, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | 27000 + 888, 888, 888, 1776, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected1[] = { | const InfraredMessage test_decoder_rc5_expected1[] = { | ||||||
|     {IrdaProtocolRC5,     0x13,      0x10,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x10,  false}, // toggle 0 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -37,8 +37,8 @@ const uint32_t test_decoder_rc5_input2[] = { | |||||||
| 27000 + 888, 888, 888, 888, 888, 888, 888, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | 27000 + 888, 888, 888, 888, 888, 888, 888, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected2[] = { | const InfraredMessage test_decoder_rc5_expected2[] = { | ||||||
|     {IrdaProtocolRC5,     0x13,      0x10,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x10,  false}, // toggle 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -51,8 +51,8 @@ const uint32_t test_decoder_rc5_input3[] = { | |||||||
| 27000 + 888, 888, 888, 1776, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 1776, 888, | 27000 + 888, 888, 888, 1776, 1776, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 1776, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected3[] = { | const InfraredMessage test_decoder_rc5_expected3[] = { | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x11,  false}, // toggle 0 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -66,8 +66,8 @@ const uint32_t test_decoder_rc5_input4[] = { | |||||||
| 27000 + 888, 888, 888, 888, 888, 888, 888, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 1776, 888, | 27000 + 888, 888, 888, 888, 888, 888, 888, 1776, 888, 888, 1776, 888, 888, 1776, 1776, 1776, 888, 888, 888, 888, 1776, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected4[] = { | const InfraredMessage test_decoder_rc5_expected4[] = { | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x11,  false}, // toggle 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -80,8 +80,8 @@ const uint32_t test_decoder_rc5_input5[] = { | |||||||
| 27000 + 888, 888, 888, 1776, 1776, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | 27000 + 888, 888, 888, 1776, 1776, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected5[] = { | const InfraredMessage test_decoder_rc5_expected5[] = { | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, // toggle 0 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* | /* | ||||||
| @ -94,8 +94,8 @@ const uint32_t test_decoder_rc5_input6[] = { | |||||||
| 27000 + 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | 27000 + 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected6[] = { | const InfraredMessage test_decoder_rc5_expected6[] = { | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, // toggle 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -113,48 +113,48 @@ const uint32_t test_decoder_rc5_input_all_repeats[] = { | |||||||
| 27000 + 888, 888, 888, 1776, 1776, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | 27000 + 888, 888, 888, 1776, 1776, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, 888, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc5_expected_all_repeats[] = { | const InfraredMessage test_decoder_rc5_expected_all_repeats[] = { | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x11,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x11,  false}, // toggle 1 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  true},  // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x11,  true},  // toggle 1 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  true},  // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x11,  true},  // toggle 1 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x11,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x11,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x10,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x13,      0x10,  false}, // toggle 1 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x10,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x10,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC5,     0x13,      0x10,  true},  // toggle 0 |     {InfraredProtocolRC5,     0x13,      0x10,  true},  // toggle 0 | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, // toggle 1 |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, // toggle 1 | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, // toggle 0 |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  true},  // toggle 0 |     {InfraredProtocolRC5,     0x1F,      0x3F,  true},  // toggle 0 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_rc5[] = { | const InfraredMessage test_rc5[] = { | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, | ||||||
|     {IrdaProtocolRC5,     0x00,      0x00,  false}, |     {InfraredProtocolRC5,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolRC5,     0x10,      0x01,  false}, |     {InfraredProtocolRC5,     0x10,      0x01,  false}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  false}, |     {InfraredProtocolRC5,     0x01,      0x20,  false}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  false}, |     {InfraredProtocolRC5,     0x01,      0x20,  false}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  true}, |     {InfraredProtocolRC5,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  true}, |     {InfraredProtocolRC5,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  true}, |     {InfraredProtocolRC5,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5,     0x01,      0x20,  true}, |     {InfraredProtocolRC5,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5,     0x1F,      0x3F,  false}, |     {InfraredProtocolRC5,     0x1F,      0x3F,  false}, | ||||||
|     {IrdaProtocolRC5,     0x0A,      0x2A,  false}, |     {InfraredProtocolRC5,     0x0A,      0x2A,  false}, | ||||||
|     {IrdaProtocolRC5,     0x15,      0x15,  false}, |     {InfraredProtocolRC5,     0x15,      0x15,  false}, | ||||||
|     {IrdaProtocolRC5,     0x15,      0x15,  true}, |     {InfraredProtocolRC5,     0x15,      0x15,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolRC5X,     0x1F,      0x3F,  false}, |     {InfraredProtocolRC5X,     0x1F,      0x3F,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x00,      0x00,  false}, |     {InfraredProtocolRC5X,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x10,      0x01,  false}, |     {InfraredProtocolRC5X,     0x10,      0x01,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  false}, |     {InfraredProtocolRC5X,     0x01,      0x20,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  false}, |     {InfraredProtocolRC5X,     0x01,      0x20,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  true}, |     {InfraredProtocolRC5X,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  true}, |     {InfraredProtocolRC5X,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  true}, |     {InfraredProtocolRC5X,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5X,     0x01,      0x20,  true}, |     {InfraredProtocolRC5X,     0x01,      0x20,  true}, | ||||||
|     {IrdaProtocolRC5X,     0x1F,      0x3F,  false}, |     {InfraredProtocolRC5X,     0x1F,      0x3F,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x0A,      0x2A,  false}, |     {InfraredProtocolRC5X,     0x0A,      0x2A,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x15,      0x15,  false}, |     {InfraredProtocolRC5X,     0x15,      0x15,  false}, | ||||||
|     {IrdaProtocolRC5X,     0x15,      0x15,  true}, |     {InfraredProtocolRC5X,     0x15,      0x15,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -79,28 +79,28 @@ const uint32_t test_decoder_rc6_input1[] = { | |||||||
| 27000, 2666, 889, 444, 888, 444, 444, 444, 444, 444 + 888, 888, 444, 888, 444, 444, 888, 888, 888, 888, 888, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444, | 27000, 2666, 889, 444, 888, 444, 444, 444, 444, 444 + 888, 888, 444, 888, 444, 444, 888, 888, 888, 888, 888, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_rc6_expected1[] = { | const InfraredMessage test_decoder_rc6_expected1[] = { | ||||||
|     {IrdaProtocolRC6,     0x94,      0xA0,  false}, // toggle 0 |     {InfraredProtocolRC6,     0x94,      0xA0,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false}, // toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA0,  false}, // toggle 1 | ||||||
| //    {IrdaProtocolRC6,     0x95,      0xA0,  false},       failed | //    {InfraredProtocolRC6,     0x95,      0xA0,  false},       failed | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false}, // toggle 0 |     {InfraredProtocolRC6,     0x93,      0xA0,  false}, // toggle 0 | ||||||
|     {IrdaProtocolRC6,     0x94,      0xA0,  false}, // toggle 1 |     {InfraredProtocolRC6,     0x94,      0xA0,  false}, // toggle 1 | ||||||
|     {IrdaProtocolRC6,     0x95,      0xA0,  false}, // toggle 0 |     {InfraredProtocolRC6,     0x95,      0xA0,  false}, // toggle 0 | ||||||
| //    {IrdaProtocolRC6,     0x93,      0xA0,  false},       failed | //    {InfraredProtocolRC6,     0x93,      0xA0,  false},       failed | ||||||
| //    {IrdaProtocolRC6,     0x93,      0xA0,  false},       failed | //    {InfraredProtocolRC6,     0x93,      0xA0,  false},       failed | ||||||
| //    {IrdaProtocolRC6,     0x93,      0xA0,  false},       failed | //    {InfraredProtocolRC6,     0x93,      0xA0,  false},       failed | ||||||
|     {IrdaProtocolRC6,     0x95,      0xA0,  false}, // toggle 1 |     {InfraredProtocolRC6,     0x95,      0xA0,  false}, // toggle 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_encoder_rc6_input1[] = { | const InfraredMessage test_encoder_rc6_input1[] = { | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false}, // Toggle 0 |     {InfraredProtocolRC6,     0x93,      0xA0,  false}, // Toggle 0 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  true},  // Toggle 0 |     {InfraredProtocolRC6,     0x93,      0xA0,  true},  // Toggle 0 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA1,  false}, // Toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA1,  false}, // Toggle 1 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA1,  true},  // Toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA1,  true},  // Toggle 1 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA1,  true},  // Toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA1,  true},  // Toggle 1 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false}, // Toggle 0 |     {InfraredProtocolRC6,     0x93,      0xA0,  false}, // Toggle 0 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false}, // Toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA0,  false}, // Toggle 1 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  true},  // Toggle 1 |     {InfraredProtocolRC6,     0x93,      0xA0,  true},  // Toggle 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_encoder_rc6_expected1[] = { | const uint32_t test_encoder_rc6_expected1[] = { | ||||||
| @ -115,48 +115,48 @@ const uint32_t test_encoder_rc6_expected1[] = { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_rc6[] = { | const InfraredMessage test_rc6[] = { | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 0 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x80,      0x00,  false},     // t 1 |     {InfraredProtocolRC6,     0x80,      0x00,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x80,      0x01,  false},     // t 0 |     {InfraredProtocolRC6,     0x80,      0x01,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x01,  false},     // t 1 |     {InfraredProtocolRC6,     0x00,      0x01,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 0 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  true},      // t 0 |     {InfraredProtocolRC6,     0x00,      0x00,  true},      // t 0 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 1 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  true},      // t 1 |     {InfraredProtocolRC6,     0x00,      0x00,  true},      // t 1 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  false},     // t 0 |     {InfraredProtocolRC6,     0xFF,      0xFF,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x7F,      0xFF,  false},     // t 1 |     {InfraredProtocolRC6,     0x7F,      0xFF,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x7F,      0xFE,  false},     // t 0 |     {InfraredProtocolRC6,     0x7F,      0xFE,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFE,  false},     // t 1 |     {InfraredProtocolRC6,     0xFF,      0xFE,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  false},     // t 0 |     {InfraredProtocolRC6,     0xFF,      0xFF,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  true},      // t 0 |     {InfraredProtocolRC6,     0xFF,      0xFF,  true},      // t 0 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0x55,  false},     // t 1 |     {InfraredProtocolRC6,     0xAA,      0x55,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x55,      0xAA,  false},     // t 0 |     {InfraredProtocolRC6,     0x55,      0xAA,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x55,      0x55,  false},     // t 1 |     {InfraredProtocolRC6,     0x55,      0x55,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0xAA,  false},     // t 0 |     {InfraredProtocolRC6,     0xAA,      0xAA,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0xAA,  true},      // t 0 |     {InfraredProtocolRC6,     0xAA,      0xAA,  true},      // t 0 | ||||||
| // same with inverted toggle bit | // same with inverted toggle bit | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 1 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x80,      0x00,  false},     // t 0 |     {InfraredProtocolRC6,     0x80,      0x00,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x80,      0x01,  false},     // t 1 |     {InfraredProtocolRC6,     0x80,      0x01,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x01,  false},     // t 0 |     {InfraredProtocolRC6,     0x00,      0x01,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 1 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  true},      // t 1 |     {InfraredProtocolRC6,     0x00,      0x00,  true},      // t 1 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  false},     // t 0 |     {InfraredProtocolRC6,     0x00,      0x00,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x00,      0x00,  true},      // t 0 |     {InfraredProtocolRC6,     0x00,      0x00,  true},      // t 0 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  false},     // t 1 |     {InfraredProtocolRC6,     0xFF,      0xFF,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x7F,      0xFF,  false},     // t 0 |     {InfraredProtocolRC6,     0x7F,      0xFF,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x7F,      0xFE,  false},     // t 1 |     {InfraredProtocolRC6,     0x7F,      0xFE,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFE,  false},     // t 0 |     {InfraredProtocolRC6,     0xFF,      0xFE,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  false},     // t 1 |     {InfraredProtocolRC6,     0xFF,      0xFF,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0xFF,      0xFF,  true},      // t 1 |     {InfraredProtocolRC6,     0xFF,      0xFF,  true},      // t 1 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0x55,  false},     // t 0 |     {InfraredProtocolRC6,     0xAA,      0x55,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x55,      0xAA,  false},     // t 1 |     {InfraredProtocolRC6,     0x55,      0xAA,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0x55,      0x55,  false},     // t 0 |     {InfraredProtocolRC6,     0x55,      0x55,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0xAA,  false},     // t 1 |     {InfraredProtocolRC6,     0xAA,      0xAA,  false},     // t 1 | ||||||
|     {IrdaProtocolRC6,     0xAA,      0xAA,  true},      // t 1 |     {InfraredProtocolRC6,     0xAA,      0xAA,  true},      // t 1 | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA0,  false},     // t 0 |     {InfraredProtocolRC6,     0x93,      0xA0,  false},     // t 0 | ||||||
|     {IrdaProtocolRC6,     0x93,      0xA1,  false},     // t 1 |     {InfraredProtocolRC6,     0x93,      0xA1,  false},     // t 1 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -179,76 +179,76 @@ const uint32_t test_decoder_samsung32_input1[] = { | |||||||
|     532,     584, |     532,     584, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_samsung32_expected1[] = { | const InfraredMessage test_decoder_samsung32_expected1[] = { | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x81, false}, {IrdaProtocolSamsung32, 0x0E, 0x81, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x81, false}, {InfraredProtocolSamsung32, 0x0E, 0x81, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x02, false}, {IrdaProtocolSamsung32, 0x0E, 0x02, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x02, false}, {InfraredProtocolSamsung32, 0x0E, 0x02, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x03, false}, {IrdaProtocolSamsung32, 0x0E, 0x03, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x03, false}, {InfraredProtocolSamsung32, 0x0E, 0x03, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, {InfraredProtocolSamsung32, 0x0E, 0x0C, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x0C, true},  {IrdaProtocolSamsung32, 0x0E, 0x0C, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x0C, true},  {InfraredProtocolSamsung32, 0x0E, 0x0C, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, true}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, true},  {IrdaProtocolSamsung32, 0x0E, 0x01, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, true},  {InfraredProtocolSamsung32, 0x0E, 0x01, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, true},  {IrdaProtocolSamsung32, 0x0E, 0x01, false}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, true},  {InfraredProtocolSamsung32, 0x0E, 0x01, false}, | ||||||
|     {IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true}, |     {InfraredProtocolSamsung32, 0x0E, 0x01, false}, {InfraredProtocolSamsung32, 0x0E, 0x01, true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_samsung32[] = { | const InfraredMessage test_samsung32[] = { | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x00,  false}, |     {InfraredProtocolSamsung32,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x01,      0x00,  false}, |     {InfraredProtocolSamsung32,     0x01,      0x00,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x01,      0x80,  false}, |     {InfraredProtocolSamsung32,     0x01,      0x80,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x80,  false}, |     {InfraredProtocolSamsung32,     0x00,      0x80,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x00,  false}, |     {InfraredProtocolSamsung32,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x00,  true}, |     {InfraredProtocolSamsung32,     0x00,      0x00,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x00,  false}, |     {InfraredProtocolSamsung32,     0x00,      0x00,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x00,      0x00,  true}, |     {InfraredProtocolSamsung32,     0x00,      0x00,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0xFF,      0xFF,  false}, |     {InfraredProtocolSamsung32,     0xFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xFE,      0xFF,  false}, |     {InfraredProtocolSamsung32,     0xFE,      0xFF,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xFE,      0x7F,  false}, |     {InfraredProtocolSamsung32,     0xFE,      0x7F,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xFF,      0x7F,  false}, |     {InfraredProtocolSamsung32,     0xFF,      0x7F,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xFF,      0xFF,  false}, |     {InfraredProtocolSamsung32,     0xFF,      0xFF,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xFF,      0xFF,  true}, |     {InfraredProtocolSamsung32,     0xFF,      0xFF,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0x55,  false}, |     {InfraredProtocolSamsung32,     0xAA,      0x55,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0xAA,  false}, |     {InfraredProtocolSamsung32,     0x55,      0xAA,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0x55,  false}, |     {InfraredProtocolSamsung32,     0x55,      0x55,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0xAA,  false}, |     {InfraredProtocolSamsung32,     0xAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0xAA,  true}, |     {InfraredProtocolSamsung32,     0xAA,      0xAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0xAA,  false}, |     {InfraredProtocolSamsung32,     0xAA,      0xAA,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0xAA,  true}, |     {InfraredProtocolSamsung32,     0xAA,      0xAA,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0xAA,      0xAA,  true}, |     {InfraredProtocolSamsung32,     0xAA,      0xAA,  true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0x55,  false}, |     {InfraredProtocolSamsung32,     0x55,      0x55,  false}, | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0x55,  true}, |     {InfraredProtocolSamsung32,     0x55,      0x55,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0x55,  true}, |     {InfraredProtocolSamsung32,     0x55,      0x55,  true}, | ||||||
|     {IrdaProtocolSamsung32,     0x55,      0x55,  true}, |     {InfraredProtocolSamsung32,     0x55,      0x55,  true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -124,128 +124,128 @@ const uint32_t test_decoder_sirc_input1[] = {  /* 121 timings */ | |||||||
|     26263,  2414, 611, 1192, 607, 544, 606, 1197, 602, 569, 606, 1197, 602, 539, 611, 540, 635, 1168, 606, 565, 610, 541, 608, 563, 587, 564, |     26263,  2414, 611, 1192, 607, 544, 606, 1197, 602, 569, 606, 1197, 602, 539, 611, 540, 635, 1168, 606, 565, 610, 541, 608, 563, 587, 564, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_sirc_expected1[] = { | const InfraredMessage test_decoder_sirc_expected1[] = { | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x60, false}, |     {InfraredProtocolSIRC,         0x10,   0x60, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x60, false}, |     {InfraredProtocolSIRC,         0x10,   0x60, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x60, false}, |     {InfraredProtocolSIRC,         0x10,   0x60, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x65, false}, |     {InfraredProtocolSIRC,         0x10,   0x65, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x65, false}, |     {InfraredProtocolSIRC,         0x10,   0x65, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x65, false}, |     {InfraredProtocolSIRC,         0x10,   0x65, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x410,  0x17, false}, |     {InfraredProtocolSIRC20,       0x410,  0x17, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x410,  0x17, false}, |     {InfraredProtocolSIRC20,       0x410,  0x17, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x410,  0x17, false}, |     {InfraredProtocolSIRC20,       0x410,  0x17, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x21, false}, |     {InfraredProtocolSIRC,         0x10,   0x21, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x21, false}, |     {InfraredProtocolSIRC,         0x10,   0x21, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x21, false}, |     {InfraredProtocolSIRC,         0x10,   0x21, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7B, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7B, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7B, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7B, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7B, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7B, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x78, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x78, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x78, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x78, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x78, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x78, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x79, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x79, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x79, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x79, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x79, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x79, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7A, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7A, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7C, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7C, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7D, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7D, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7D, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7D, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x7D, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x7D, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x73, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x73, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x73, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x73, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x73, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x73, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x13, false}, |     {InfraredProtocolSIRC,         0x10,   0x13, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x13, false}, |     {InfraredProtocolSIRC,         0x10,   0x13, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x13, false}, |     {InfraredProtocolSIRC,         0x10,   0x13, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x13, false}, |     {InfraredProtocolSIRC,         0x10,   0x13, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x12, false}, |     {InfraredProtocolSIRC,         0x10,   0x12, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x12, false}, |     {InfraredProtocolSIRC,         0x10,   0x12, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x12, false}, |     {InfraredProtocolSIRC,         0x10,   0x12, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x12, false}, |     {InfraredProtocolSIRC,         0x10,   0x12, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x30, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x30, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x30, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x30, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x30, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x30, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x39, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x39, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x39, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x39, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x39, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x39, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x31, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x31, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x31, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x31, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x31, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x31, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x34, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x34, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x34, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x34, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x34, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x34, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x32, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x32, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x32, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x32, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x32, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x32, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x33, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x33, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x33, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x33, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x33, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x33, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x0F, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x0F, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x0F, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x0F, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x0F, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x0F, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x38, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x38, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x38, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x38, false}, | ||||||
|     {IrdaProtocolSIRC20,       0x73A,  0x38, false}, |     {InfraredProtocolSIRC20,       0x73A,  0x38, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x10,   0x15, false}, |     {InfraredProtocolSIRC,         0x10,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x2F, false}, |     {InfraredProtocolSIRC,         0x01,   0x2F, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x2F, false}, |     {InfraredProtocolSIRC,         0x01,   0x2F, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x15, false}, |     {InfraredProtocolSIRC,         0x01,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x15, false}, |     {InfraredProtocolSIRC,         0x01,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x15, false}, |     {InfraredProtocolSIRC,         0x01,   0x15, false}, | ||||||
|     {IrdaProtocolSIRC,         0x01,   0x15, false}, |     {InfraredProtocolSIRC,         0x01,   0x15, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -284,23 +284,23 @@ const uint32_t test_decoder_sirc_input2[] = { | |||||||
| 1000000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, | 1000000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_sirc_expected2[] = { | const InfraredMessage test_decoder_sirc_expected2[] = { | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     /* failed - 13 data bits */ |     /* failed - 13 data bits */ | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0x1F, 0x7F, false}, |     {InfraredProtocolSIRC, 0x1F, 0x7F, false}, | ||||||
|     /* failed - 2 data bits */ |     /* failed - 2 data bits */ | ||||||
|     {IrdaProtocolSIRC, 0x1F, 0x7F, false}, |     {InfraredProtocolSIRC, 0x1F, 0x7F, false}, | ||||||
|     /* failed - sudden end */ |     /* failed - sudden end */ | ||||||
|     {IrdaProtocolSIRC, 0x1F, 0x7F, false}, |     {InfraredProtocolSIRC, 0x1F, 0x7F, false}, | ||||||
|     /* failed */ |     /* failed */ | ||||||
|     {IrdaProtocolSIRC, 0x0A, 0x55, false}, |     {InfraredProtocolSIRC, 0x0A, 0x55, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0x00, 0x00, false}, |     {InfraredProtocolSIRC, 0x00, 0x00, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC, 0x0D, 0x53, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -334,18 +334,18 @@ const uint32_t test_decoder_sirc_input3[] = { | |||||||
|   10000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, |   10000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_sirc_expected3[] = { | const InfraredMessage test_decoder_sirc_expected3[] = { | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x0D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x0D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x0D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x0D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x0D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x0D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0xFD, 0x13, false}, |     {InfraredProtocolSIRC15, 0xFD, 0x13, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_decoder_sirc_input4[] = { | const uint32_t test_decoder_sirc_input4[] = { | ||||||
| @ -357,13 +357,13 @@ const uint32_t test_decoder_sirc_input4[] = { | |||||||
| 1000000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, | 1000000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_sirc_expected4[] = { | const InfraredMessage test_decoder_sirc_expected4[] = { | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false},      //    {IrdaProtocolSIRC20, 0x15, 0x3ED3, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false},      //    {InfraredProtocolSIRC20, 0x15, 0x3ED3, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_decoder_sirc_input5[] = { | const uint32_t test_decoder_sirc_input5[] = { | ||||||
| @ -396,48 +396,48 @@ const uint32_t test_decoder_sirc_input5[] = { | |||||||
| 10000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, | 10000, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_decoder_sirc_expected5[] = { | const InfraredMessage test_decoder_sirc_expected5[] = { | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC20, 0xFB5, 0x53, false}, |     {InfraredProtocolSIRC20, 0xFB5, 0x53, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_encoder_sirc_input1[] = { | const InfraredMessage test_encoder_sirc_input1[] = { | ||||||
|     {IrdaProtocolSIRC, 0xA, 0x55, false}, |     {InfraredProtocolSIRC, 0xA, 0x55, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_encoder_sirc_expected1[] = { | const uint32_t test_encoder_sirc_expected1[] = { | ||||||
| 10000, 2400, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, | 10000, 2400, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 600, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_encoder_sirc_input2[] = { | const InfraredMessage test_encoder_sirc_input2[] = { | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, true}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, true}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, true}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, true}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const uint32_t test_encoder_sirc_expected2[] = { | const uint32_t test_encoder_sirc_expected2[] = { | ||||||
| @ -446,34 +446,34 @@ const uint32_t test_encoder_sirc_expected2[] = { | |||||||
|     18600, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, |     18600, 2400, 600, 1200, 600, 1200, 600, 600, 600, 600, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 600, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 1200, 600, 600, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const IrdaMessage test_sirc[] = { | const InfraredMessage test_sirc[] = { | ||||||
|     {IrdaProtocolSIRC20, 0x1FFF, 0x7F, false}, |     {InfraredProtocolSIRC20, 0x1FFF, 0x7F, false}, | ||||||
|     {IrdaProtocolSIRC20, 0x1FFF, 0x7F, true}, |     {InfraredProtocolSIRC20, 0x1FFF, 0x7F, true}, | ||||||
|     {IrdaProtocolSIRC20, 0x1FFF, 0x7F, true}, |     {InfraredProtocolSIRC20, 0x1FFF, 0x7F, true}, | ||||||
|     {IrdaProtocolSIRC, 0x00, 0x00, false}, |     {InfraredProtocolSIRC, 0x00, 0x00, false}, | ||||||
|     {IrdaProtocolSIRC, 0x00, 0x00, true}, |     {InfraredProtocolSIRC, 0x00, 0x00, true}, | ||||||
|     {IrdaProtocolSIRC, 0x00, 0x00, true}, |     {InfraredProtocolSIRC, 0x00, 0x00, true}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0x1A, 0x22, false}, |     {InfraredProtocolSIRC, 0x1A, 0x22, false}, | ||||||
|     {IrdaProtocolSIRC, 0x1A, 0x22, true}, |     {InfraredProtocolSIRC, 0x1A, 0x22, true}, | ||||||
|     {IrdaProtocolSIRC, 0x1A, 0x22, true}, |     {InfraredProtocolSIRC, 0x1A, 0x22, true}, | ||||||
|     {IrdaProtocolSIRC, 0x17, 0x0A, false}, |     {InfraredProtocolSIRC, 0x17, 0x0A, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, false}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, true}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, true}, | ||||||
|     {IrdaProtocolSIRC15, 0x7D, 0x53, true}, |     {InfraredProtocolSIRC15, 0x7D, 0x53, true}, | ||||||
|     {IrdaProtocolSIRC15, 0x71, 0x0, false}, |     {InfraredProtocolSIRC15, 0x71, 0x0, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x15, 0x01, false}, |     {InfraredProtocolSIRC15, 0x15, 0x01, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x01, 0x15, false}, |     {InfraredProtocolSIRC15, 0x01, 0x15, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC20, 0xAA, 0x55, false}, |     {InfraredProtocolSIRC20, 0xAA, 0x55, false}, | ||||||
|     {IrdaProtocolSIRC20, 0x331, 0x71, false}, |     {InfraredProtocolSIRC20, 0x331, 0x71, false}, | ||||||
| 
 | 
 | ||||||
|     {IrdaProtocolSIRC, 0x00, 0x00, false}, |     {InfraredProtocolSIRC, 0x00, 0x00, false}, | ||||||
|     {IrdaProtocolSIRC, 0x1F, 0x7F, false}, |     {InfraredProtocolSIRC, 0x1F, 0x7F, false}, | ||||||
|     {IrdaProtocolSIRC15, 0x00, 0x00, false}, |     {InfraredProtocolSIRC15, 0x00, 0x00, false}, | ||||||
|     {IrdaProtocolSIRC15, 0xFF, 0x7F, false}, |     {InfraredProtocolSIRC15, 0xFF, 0x7F, false}, | ||||||
|     {IrdaProtocolSIRC20, 0x00, 0x00, false}, |     {InfraredProtocolSIRC20, 0x00, 0x00, false}, | ||||||
|     {IrdaProtocolSIRC20, 0x1FFF, 0x7F, false}, |     {InfraredProtocolSIRC20, 0x1FFF, 0x7F, false}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -651,7 +651,7 @@ MU_TEST(test_storage_list) { | |||||||
| 
 | 
 | ||||||
|     test_rpc_storage_list_run("/int", ++command_id); |     test_rpc_storage_list_run("/int", ++command_id); | ||||||
|     test_rpc_storage_list_run("/ext", ++command_id); |     test_rpc_storage_list_run("/ext", ++command_id); | ||||||
|     test_rpc_storage_list_run("/ext/irda", ++command_id); |     test_rpc_storage_list_run("/ext/infrared", ++command_id); | ||||||
|     test_rpc_storage_list_run("/ext/ibutton", ++command_id); |     test_rpc_storage_list_run("/ext/ibutton", ++command_id); | ||||||
|     test_rpc_storage_list_run("/ext/lfrfid", ++command_id); |     test_rpc_storage_list_run("/ext/lfrfid", ++command_id); | ||||||
|     test_rpc_storage_list_run("error_path", ++command_id); |     test_rpc_storage_list_run("error_path", ++command_id); | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ | |||||||
| #define TAG "UnitTests" | #define TAG "UnitTests" | ||||||
| 
 | 
 | ||||||
| int run_minunit(); | int run_minunit(); | ||||||
| int run_minunit_test_irda_decoder_encoder(); | int run_minunit_test_infrared_decoder_encoder(); | ||||||
| int run_minunit_test_rpc(); | int run_minunit_test_rpc(); | ||||||
| int run_minunit_test_flipper_format(); | int run_minunit_test_flipper_format(); | ||||||
| int run_minunit_test_flipper_format_string(); | int run_minunit_test_flipper_format_string(); | ||||||
| @ -53,7 +53,7 @@ void unit_tests_cli(Cli* cli, string_t args, void* context) { | |||||||
|         uint32_t cycle_counter = DWT->CYCCNT; |         uint32_t cycle_counter = DWT->CYCCNT; | ||||||
| 
 | 
 | ||||||
|         test_result |= run_minunit(); |         test_result |= run_minunit(); | ||||||
|         test_result |= run_minunit_test_irda_decoder_encoder(); |         test_result |= run_minunit_test_infrared_decoder_encoder(); | ||||||
|         test_result |= run_minunit_test_rpc(); |         test_result |= run_minunit_test_rpc(); | ||||||
|         test_result |= run_minunit_test_stream(); |         test_result |= run_minunit_test_stream(); | ||||||
|         test_result |= run_minunit_test_flipper_format(); |         test_result |= run_minunit_test_flipper_format(); | ||||||
|  | |||||||
| @ -202,27 +202,6 @@ const uint8_t* const _I_ArrowUpEmpty_14x15[] = {_I_ArrowUpEmpty_14x15_0}; | |||||||
| const uint8_t _I_ArrowUpFilled_14x15_0[] = {0x00,0xC0,0x00,0x20,0x01,0xD0,0x02,0xE8,0x05,0xF4,0x0B,0xFA,0x17,0x61,0x21,0xAF,0x3D,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0xE8,0x05,0x08,0x04,0xF8,0x07,}; | const uint8_t _I_ArrowUpFilled_14x15_0[] = {0x00,0xC0,0x00,0x20,0x01,0xD0,0x02,0xE8,0x05,0xF4,0x0B,0xFA,0x17,0x61,0x21,0xAF,0x3D,0x68,0x05,0xA8,0x05,0x68,0x05,0xA8,0x05,0xE8,0x05,0x08,0x04,0xF8,0x07,}; | ||||||
| const uint8_t* const _I_ArrowUpFilled_14x15[] = {_I_ArrowUpFilled_14x15_0}; | const uint8_t* const _I_ArrowUpFilled_14x15[] = {_I_ArrowUpFilled_14x15_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Back3_45x8_0[] = {0x00,0x04,0x00,0x10,0x00,0x40,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x7F,0x00,0xFC,0x01,0xF0,0x07,0x86,0x20,0x18,0x82,0x60,0x08,0x04,0x71,0x10,0xC4,0x41,0x10,0x00,0x21,0x00,0x84,0x00,0x10,0x80,0x00,0x00,0x02,0x00,0x08,0x7E,0x00,0xF8,0x01,0xE0,0x07,}; |  | ||||||
| const uint8_t* const _I_Back3_45x8[] = {_I_Back3_45x8_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DoorLeft_70x55_0[] = {0x01,0x00,0x19,0x01,0x00,0x2c,0x32,0x01,0x03,0x04,0x2c,0x18,0x10,0xf0,0x40,0x47,0x82,0x06,0x81,0x03,0xff,0x80,0x08,0x1a,0x20,0x82,0x15,0x28,0x21,0x87,0x82,0x08,0x6f,0xc0,0xb1,0xe6,0x10,0x10,0x8b,0x46,0x20,0x43,0x55,0x8f,0x82,0x10,0x32,0x73,0x0a,0x09,0x89,0x6c,0x1e,0x09,0x00,0x18,0x60,0xf0,0x0c,0x84,0x93,0x82,0x03,0x18,0x0c,0x02,0x1d,0x00,0x90,0x52,0x70,0x50,0x1e,0x00,0x58,0x63,0x90,0x0a,0x06,0x4a,0x09,0x03,0xb0,0x02,0x06,0x70,0x62,0x49,0xf8,0x0c,0x66,0x3f,0xf0,0x41,0x63,0x04,0x43,0x00,0x99,0x60,0x00,0x85,0xc8,0x06,0x14,0xd0,0x80,0x3f,0xc8,0x0d,0xb8,0x10,0x70,0xf8,0x34,0x13,0x03,0x39,0x04,0x1c,0x42,0x19,0xf8,0xa0,0xc2,0x01,0x07,0xef,0x02,0x8c,0x80,0x10,0x9d,0x00,0x43,0xec,0x00,0xa3,0x10,0x04,0x25,0xce,0x19,0xfc,0x88,0x82,0x12,0x0c,0x35,0x10,0x42,0x4c,0xa1,0x90,0x3f,0xc0,0x21,0x22,0x39,0x82,0xc8,0x88,0xd2,0x11,0xf0,0x01,0x88,0xd5,0x18,0xe2,0x08,0x68,0x10,0x0c,0xa8,0x00,0x83,0x81,0xcc,0xd5,0xc3,0x80,0x84,0x82,0x0e,0xcc,0xc0,0x15,0x79,0x02,0x0b,0x98,0xf8,0x11,0x88,0x82,0x0f,0x31,0x19,0x02,0x08,0x2c,0x9f,0x6a,0x1d,0x20,0x41,0x31,0x4c,0x10,0x8d,0x73,0x04,0x23,0xa4,0xc4,0x6c,0xde,0x20,0x42,0xcc,0x01,0x07,0x07,0xff,0x80,0x06,0x3e,0x08,0x38,0x70,0x20,0xa1,0xe0,0x83,0x8e,0x01,0x0c,0xf0,0x73,0x80,0x43,0x70,0x05,0x08,0x00,0x2c,0x04,0xc4,0x46,0x53,0x09,0x98,0x24,0x80,0x65,0x80,0xb0,0xd9,0x84,0x65,0x32,0x06,0x17,0x0f,0x98,0x23,0x63,0xe1,0x88,0xc4,0x08,0x5f,0xc1,0x30,0x9d,0x84,0x4e,0x66,0x94,0x11,0x98,0x75,0x26,0x00,}; |  | ||||||
| const uint8_t* const _I_DoorLeft_70x55[] = {_I_DoorLeft_70x55_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DoorLocked_10x56_0[] = {0x01,0x00,0x4e,0x00,0x86,0x40,0x25,0xb0,0x0b,0x6c,0x03,0x9b,0x00,0xc6,0xc0,0x65,0x90,0x10,0x3a,0xc3,0x20,0x31,0xc8,0x04,0xe2,0x01,0x70,0x80,0x78,0x20,0x1c,0x48,0x07,0x22,0x01,0xd0,0x00,0xf0,0x44,0x68,0x90,0x09,0x04,0x02,0x21,0x00,0x84,0x40,0x25,0x80,0x12,0x1e,0x88,0x14,0xc0,0x2e,0x0d,0x11,0xca,0xf8,0x60,0x1c,0x38,0x07,0x1a,0x05,0xcc,0x80,0x72,0x60,0x5c,0x38,0x10,0x1c,0xf9,0x10,0x2e,0x00,0x05,0x60,0x00,0x11,}; |  | ||||||
| const uint8_t* const _I_DoorLocked_10x56[] = {_I_DoorLocked_10x56_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_DoorRight_70x55_0[] = {0x01,0x00,0x16,0x01,0x81,0xcc,0x01,0x0f,0x60,0x04,0x3f,0x00,0x10,0xf8,0x08,0x0c,0x02,0x05,0x01,0x84,0x02,0x06,0x26,0x0a,0x10,0x8a,0xcc,0xe0,0x1d,0x68,0xe0,0x18,0xab,0xd0,0x0b,0x18,0x10,0x46,0xe6,0x16,0x1e,0x18,0x10,0x46,0xe4,0x28,0x2c,0x98,0x14,0x68,0x00,0x21,0x1d,0x10,0x8c,0x40,0x02,0x0e,0x10,0xa1,0x08,0xc8,0x40,0x42,0x62,0x11,0x94,0x03,0xfd,0xff,0x00,0x0c,0xff,0x0c,0x08,0x28,0x60,0xe4,0xc0,0x85,0x00,0x83,0x00,0x87,0xf1,0x00,0x8c,0x02,0x0b,0x07,0x24,0x84,0xff,0x04,0xc7,0x80,0xa0,0xe4,0xa0,0x81,0x41,0x04,0x17,0x02,0x41,0x49,0x81,0x0e,0x10,0xb2,0xa0,0x82,0x0e,0x9f,0xfc,0x0a,0x62,0xf2,0xc0,0x03,0x92,0xf0,0x08,0x2d,0x78,0x20,0xff,0x02,0x01,0x08,0xae,0x60,0x64,0x38,0x0d,0xb0,0x8d,0x08,0x82,0x11,0x58,0xc4,0x13,0xc0,0x35,0x68,0x62,0x68,0x81,0x09,0x08,0x84,0x40,0x81,0x0d,0x18,0x69,0x10,0x47,0x44,0x66,0x5f,0x21,0xa9,0x29,0x94,0x10,0x2f,0x23,0x53,0x14,0x60,0x42,0x3c,0x08,0xfc,0x02,0x2c,0x62,0x23,0x58,0xd0,0x22,0x00,0x83,0x3e,0x98,0x44,0x43,0x46,0x22,0x30,0x89,0xce,0x01,0x0f,0x70,0x04,0x3f,0x81,0x8a,0x3c,0x21,0xaa,0x70,0x1a,0xe3,0x44,0x1a,0xa6,0x01,0xd2,0x38,0x90,0x8a,0x40,0x20,0xe5,0x96,0x80,0x43,0x81,0x06,0x6b,0x28,0x07,0xf3,0xfe,0x00,0x19,0xf9,0x34,0xc1,0x08,0x8f,0x20,0xf1,0x3e,0x16,0x00,0xa8,0x19,0x00,0x10,0x76,0x03,0xe2,0x3e,0x90,0x45,0x38,0x01,0x42,0x05,0x88,0x44,0x67,0x15,0x70,0x41,0x38,0x04,0x10,0x24,0x03,0x00,0x10,0x20,0x4a,0x46,0xe9,0x46,0xe1,0x04,0x50,0x66,0x40,0x85,0x19,0x98,0x00,0xc0,}; |  | ||||||
| const uint8_t* const _I_DoorRight_70x55[] = {_I_DoorRight_70x55_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_PassportBottom_128x17_0[] = {0x01,0x00,0x5e,0x00,0x96,0x01,0x97,0xe1,0xff,0x00,0x2e,0x3e,0x68,0x0f,0x5a,0xc5,0x54,0x00,0xb9,0x50,0xfb,0x6a,0x35,0x40,0x05,0xcd,0x4e,0x03,0xfd,0x30,0x0f,0xf8,0x7f,0xa0,0x81,0xfe,0xf9,0x1b,0xfb,0xf3,0x01,0x47,0x66,0x02,0x1b,0x03,0x07,0xe7,0x02,0x0b,0x02,0x07,0xe5,0x82,0x0b,0xf2,0x1c,0xb0,0x01,0x67,0xf0,0x5f,0xd0,0x3f,0x23,0xf0,0x9b,0xc9,0xe5,0x80,0x03,0xd5,0xc0,0x00,0x86,0x01,0xf3,0xe6,0x1e,0x58,0x00,0x36,0xa8,0x06,0xac,0x04,0x30,0x6c,0x30,0xee,0x60,0x1f,0xe0,0x10,0xff,0x0d,0xfb,0x00,}; |  | ||||||
| const uint8_t* const _I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_PassportLeft_6x47_0[] = {0x01,0x00,0x1c,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x24,0x32,0x39,0x3c,0x9e,0x4d,0x25,0x80,0x1a,}; |  | ||||||
| const uint8_t* const _I_PassportLeft_6x47[] = {_I_PassportLeft_6x47_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_WarningDolphin_45x42_0[] = {0x01,0x00,0xc6,0x00,0x00,0x1c,0x22,0x04,0x05,0x7f,0xfc,0x1e,0x20,0x05,0x1e,0x04,0x02,0x30,0x05,0x29,0x84,0x02,0xc1,0x20,0x02,0x8c,0x22,0x01,0x80,0x02,0x94,0x10,0x32,0x30,0x10,0x10,0x87,0xca,0x84,0x03,0x10,0x42,0x81,0x48,0x28,0x38,0x08,0x04,0x3e,0x01,0x84,0x83,0xe0,0x30,0x11,0x08,0x05,0xa2,0x11,0x40,0xa0,0x4b,0xc6,0xc5,0x40,0xd0,0x56,0xe0,0x10,0x60,0x29,0x54,0xf0,0x10,0x18,0xf0,0x14,0x6b,0xf6,0x0c,0x04,0x3e,0x40,0x05,0x12,0x80,0xc1,0xe4,0x01,0xd2,0xf8,0x40,0xe4,0x18,0x09,0xf4,0x03,0xf1,0x01,0x90,0x40,0x28,0x30,0x0f,0xe4,0x00,0x16,0x24,0x11,0xbf,0x01,0x44,0xee,0x53,0xf0,0x29,0xf0,0x3e,0x02,0x91,0x3b,0x8c,0xc3,0x81,0x13,0x90,0x48,0x20,0x3f,0xf9,0xfc,0x42,0x60,0x05,0x10,0x98,0x81,0x56,0x11,0x38,0x02,0x9c,0x1a,0x31,0x1e,0x02,0x8f,0x02,0x03,0x1c,0x90,0xc0,0x7c,0x02,0xf1,0xce,0x02,0x07,0x01,0x1f,0x80,0x63,0xa8,0x08,0x71,0x3c,0x8e,0x39,0x24,0x40,0x51,0xc7,0x81,0x53,0x0f,0x3c,0x02,0x9d,0x1e,0x38,0x29,0x10,0x29,0x17,0xc8,0x0a,0x32,0x3a,0x00,0x14,0x4b,0xa2,0x05,0x58,0x98,0x15,0x22,0x20,0x54,0x84,0x81,0x50,}; |  | ||||||
| const uint8_t* const _I_WarningDolphin_45x42[] = {_I_WarningDolphin_45x42_0}; |  | ||||||
| 
 |  | ||||||
| const uint8_t _I_Back_15x10_0[] = {0x00,0x04,0x00,0x06,0x00,0xFF,0x0F,0x06,0x10,0x04,0x20,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0xFE,0x0F,}; | const uint8_t _I_Back_15x10_0[] = {0x00,0x04,0x00,0x06,0x00,0xFF,0x0F,0x06,0x10,0x04,0x20,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0xFE,0x0F,}; | ||||||
| const uint8_t* const _I_Back_15x10[] = {_I_Back_15x10_0}; | const uint8_t* const _I_Back_15x10[] = {_I_Back_15x10_0}; | ||||||
| 
 | 
 | ||||||
| @ -238,23 +217,23 @@ const uint8_t* const _I_Down_hvr_25x27[] = {_I_Down_hvr_25x27_0}; | |||||||
| const uint8_t _I_Fill_marker_7x7_0[] = {0x00,0x1C,0x32,0x6F,0x5F,0x7F,0x3E,0x1C,}; | const uint8_t _I_Fill_marker_7x7_0[] = {0x00,0x1C,0x32,0x6F,0x5F,0x7F,0x3E,0x1C,}; | ||||||
| const uint8_t* const _I_Fill_marker_7x7[] = {_I_Fill_marker_7x7_0}; | const uint8_t* const _I_Fill_marker_7x7[] = {_I_Fill_marker_7x7_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaArrowDown_4x8_0[] = {0x00,0xFF,0x7E,0x3C,0x18,}; | const uint8_t _I_InfraredArrowDown_4x8_0[] = {0x00,0xFF,0x7E,0x3C,0x18,}; | ||||||
| const uint8_t* const _I_IrdaArrowDown_4x8[] = {_I_IrdaArrowDown_4x8_0}; | const uint8_t* const _I_InfraredArrowDown_4x8[] = {_I_InfraredArrowDown_4x8_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaArrowUp_4x8_0[] = {0x00,0x18,0x3C,0x7E,0xFF,}; | const uint8_t _I_InfraredArrowUp_4x8_0[] = {0x00,0x18,0x3C,0x7E,0xFF,}; | ||||||
| const uint8_t* const _I_IrdaArrowUp_4x8[] = {_I_IrdaArrowUp_4x8_0}; | const uint8_t* const _I_InfraredArrowUp_4x8[] = {_I_InfraredArrowUp_4x8_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaLearnShort_128x31_0[] = {0x01,0x00,0x10,0x01,0x00,0x47,0xfb,0xfe,0x00,0x38,0x38,0x3e,0x20,0x20,0x54,0x84,0x03,0x9f,0xc0,0x06,0x58,0x80,0x3d,0xf2,0x00,0x65,0x90,0x03,0xde,0x90,0x06,0x5a,0x07,0xc0,0x8a,0x70,0x1a,0x04,0x02,0x51,0x80,0x03,0x94,0x02,0x3f,0x40,0x20,0x24,0x0b,0x01,0x00,0x92,0x70,0x35,0x40,0x01,0xe0,0xdf,0xf0,0x10,0x40,0x71,0x58,0x20,0x90,0x88,0x0c,0x4a,0x81,0x55,0x00,0x0f,0x87,0xf7,0x00,0x82,0x43,0x36,0x16,0xdc,0x9c,0x12,0x21,0x01,0x85,0x70,0x3f,0xc1,0xf1,0xf8,0xfc,0x60,0x20,0xf5,0x90,0x40,0xa1,0x34,0x08,0x18,0x7c,0x7e,0x24,0x91,0x07,0x8c,0xc0,0x5e,0x52,0x28,0x14,0x17,0x81,0x01,0x0f,0x8f,0xe7,0xe3,0x03,0x1f,0x8e,0x02,0xdb,0x03,0x8e,0x49,0x20,0x50,0x2e,0x04,0x72,0xbd,0x55,0xdc,0xeb,0xa0,0x7c,0x4f,0x68,0xbc,0x60,0x72,0x40,0x79,0x50,0x23,0x9a,0x6d,0x56,0x66,0x5c,0x0f,0x21,0x78,0x9b,0x04,0x1e,0x28,0x21,0x8e,0x5c,0x43,0xe6,0x2f,0x10,0xf9,0x0b,0xc7,0x04,0x99,0x18,0x06,0xe0,0x7e,0x56,0x32,0x78,0x8f,0xc4,0x08,0x32,0x20,0x79,0x48,0x2b,0x85,0xf2,0xf8,0x83,0xc4,0x5c,0x3f,0x03,0x78,0xd0,0x81,0xe3,0xc0,0xdf,0x9f,0xcb,0xf3,0x04,0xc6,0x7d,0xfb,0xdf,0x34,0x78,0xd0,0x45,0xe5,0x7e,0x4f,0x97,0xe2,0x09,0x80,0x07,0x88,0xbc,0x61,0x00,0xf3,0xd8,0x2f,0xcb,0xe0,0xcf,0x60,0x68,0xd0,0x30,0x15,0xfa,0xac,0x36,0x3f,0x60,0x77,0xb3,0x80,0x5d,0xe6,0x4b,0x20,0x03,0x03,0xc4,0x01,0xd0,0x10,0x7f,0x40,0x81,0xfc,0xa7,0x10,0x06,0x99,0xd0,0x01,0x51,0x00,0x7f,0x48,0x01,0xfd,0xc0,0x43,0x98,0x00,0x8e,0xfe,0x00,0xf0,}; | const uint8_t _I_InfraredLearnShort_128x31_0[] = {0x01,0x00,0x10,0x01,0x00,0x47,0xfb,0xfe,0x00,0x38,0x38,0x3e,0x20,0x20,0x54,0x84,0x03,0x9f,0xc0,0x06,0x58,0x80,0x3d,0xf2,0x00,0x65,0x90,0x03,0xde,0x90,0x06,0x5a,0x07,0xc0,0x8a,0x70,0x1a,0x04,0x02,0x51,0x80,0x03,0x94,0x02,0x3f,0x40,0x20,0x24,0x0b,0x01,0x00,0x92,0x70,0x35,0x40,0x01,0xe0,0xdf,0xf0,0x10,0x40,0x71,0x58,0x20,0x90,0x88,0x0c,0x4a,0x81,0x55,0x00,0x0f,0x87,0xf7,0x00,0x82,0x43,0x36,0x16,0xdc,0x9c,0x12,0x21,0x01,0x85,0x70,0x3f,0xc1,0xf1,0xf8,0xfc,0x60,0x20,0xf5,0x90,0x40,0xa1,0x34,0x08,0x18,0x7c,0x7e,0x24,0x91,0x07,0x8c,0xc0,0x5e,0x52,0x28,0x14,0x17,0x81,0x01,0x0f,0x8f,0xe7,0xe3,0x03,0x1f,0x8e,0x02,0xdb,0x03,0x8e,0x49,0x20,0x50,0x2e,0x04,0x72,0xbd,0x55,0xdc,0xeb,0xa0,0x7c,0x4f,0x68,0xbc,0x60,0x72,0x40,0x79,0x50,0x23,0x9a,0x6d,0x56,0x66,0x5c,0x0f,0x21,0x78,0x9b,0x04,0x1e,0x28,0x21,0x8e,0x5c,0x43,0xe6,0x2f,0x10,0xf9,0x0b,0xc7,0x04,0x99,0x18,0x06,0xe0,0x7e,0x56,0x32,0x78,0x8f,0xc4,0x08,0x32,0x20,0x79,0x48,0x2b,0x85,0xf2,0xf8,0x83,0xc4,0x5c,0x3f,0x03,0x78,0xd0,0x81,0xe3,0xc0,0xdf,0x9f,0xcb,0xf3,0x04,0xc6,0x7d,0xfb,0xdf,0x34,0x78,0xd0,0x45,0xe5,0x7e,0x4f,0x97,0xe2,0x09,0x80,0x07,0x88,0xbc,0x61,0x00,0xf3,0xd8,0x2f,0xcb,0xe0,0xcf,0x60,0x68,0xd0,0x30,0x15,0xfa,0xac,0x36,0x3f,0x60,0x77,0xb3,0x80,0x5d,0xe6,0x4b,0x20,0x03,0x03,0xc4,0x01,0xd0,0x10,0x7f,0x40,0x81,0xfc,0xa7,0x10,0x06,0x99,0xd0,0x01,0x51,0x00,0x7f,0x48,0x01,0xfd,0xc0,0x43,0x98,0x00,0x8e,0xfe,0x00,0xf0,}; | ||||||
| const uint8_t* const _I_IrdaLearnShort_128x31[] = {_I_IrdaLearnShort_128x31_0}; | const uint8_t* const _I_InfraredLearnShort_128x31[] = {_I_InfraredLearnShort_128x31_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaLearn_128x64_0[] = {0x01,0x00,0xcc,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3f,0x01,0x07,0x82,0x41,0x21,0x20,0x73,0x00,0x8e,0x82,0x0f,0x00,0xa0,0x01,0x46,0x11,0x00,0x07,0xc0,0x28,0x41,0xe5,0xc8,0xba,0x63,0xa7,0x70,0x6b,0x3d,0xbb,0x99,0x19,0xee,0x68,0x71,0x16,0x3f,0x70,0x3c,0x64,0xf9,0x58,0x25,0x26,0x13,0x91,0xc9,0x64,0xa4,0x99,0x2d,0x06,0x1f,0x29,0x42,0x07,0x8c,0x80,0x1e,0x50,0xff,0x88,0x3c,0x67,0x80,0xf1,0xc1,0x03,0xde,0x03,0x11,0x07,0x8c,0x10,0x1e,0x38,0x40,0x79,0xf0,0x32,0x80,0xf1,0x83,0x58,0x72,0x58,0xc8,0xc6,0x73,0x40,0x3f,0x10,0x78,0x9e,0xf1,0x17,0xe9,0xcf,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x02,0x44,0x18,0xa3,0x80,0x82,0x32,0x06,0x44,0x0f,0xf0,0x73,0x5d,0xe3,0x92,0x7e,0xcf,0x06,0x3b,0xc3,0xa4,0xdd,0xfc,0xc8,0x35,0xca,0x44,0xa5,0x34,0x5c,0x16,0x92,0x89,0x4a,0x91,0x4a,0x60,0x20,0xf7,0xa4,0x83,0xc6,0x8e,0x0f,0xba,0x88,0x3c,0x68,0x00,0xf7,0x80,0x65,0xe3,0x9c,0x7a,0x6e,0x0a,0x49,0xc3,0xb8,0xc8,0xa4,0xc0,0xf5,0x00,0x08,0x1d,0xc0,0x0e,0x0f,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xfb,0xfe,0x00,0x38,0x39,0x97,0xa1,0x00,0xe7,0xf0,0x3b,0x1c,0x00,0xd9,0x00,0x32,0xc8,0x01,0xef,0x48,0x03,0x2d,0x03,0xe0,0x45,0x38,0x0d,0x02,0x01,0x28,0xc0,0x01,0xca,0x01,0x1f,0xa0,0x10,0x12,0x05,0x80,0x80,0x49,0x38,0x1a,0xa0,0x00,0xf0,0x6f,0xf8,0x08,0x20,0x38,0xac,0x10,0x48,0x44,0x06,0x25,0x40,0xaa,0x80,0x07,0xc3,0xfb,0x80,0x41,0x21,0x9b,0x0b,0x6e,0x4e,0x09,0x10,0x80,0xc2,0xb8,0x1f,0xe0,0xf8,0xfc,0x7e,0x30,0x10,0x7a,0xc8,0x20,0x50,0x9a,0x04,0x0c,0x3e,0x3f,0x12,0x48,0x83,0xc6,0x60,0x2f,0x29,0x14,0x0a,0x0b,0xc0,0x80,0x87,0xc7,0xf3,0xf1,0x81,0x8f,0xc7,0x01,0x6d,0x81,0xc7,0x24,0x90,0x28,0x17,0x02,0x39,0x5e,0xaa,0xee,0x75,0xd0,0x3e,0x27,0xb4,0x5e,0x30,0x39,0x20,0x3c,0xa8,0x11,0xcd,0x36,0xab,0x33,0x2e,0x07,0x90,0xbc,0x4d,0x82,0x0f,0x14,0x10,0xc7,0x2e,0x21,0xf3,0x17,0x88,0x7c,0x85,0xe3,0x82,0x4c,0x8c,0x03,0x70,0x3f,0x2b,0x19,0x3c,0x47,0xe2,0x04,0x19,0x10,0x3c,0xa4,0x15,0xc2,0xf9,0x7c,0x41,0xe2,0x2e,0x1f,0x81,0xbc,0x68,0x40,0xf1,0xe0,0x6f,0xcf,0xe5,0xf9,0x82,0x63,0x3e,0xfd,0xef,0x9a,0x3c,0x68,0x22,0xf2,0xbf,0x27,0xcb,0xf1,0x04,0xc0,0x03,0xc4,0x5e,0x30,0x80,0x79,0xec,0x17,0xe5,0xf0,0x67,0xb0,0x34,0x68,0x18,0x0a,0xfd,0x56,0x1b,0x1f,0xb0,0x3b,0xd9,0xc0,0x2e,0xf3,0x25,0x90,0x01,0x81,0xe2,0x00,0xe8,0x08,0x3f,0xa0,0x40,0xfe,0x53,0x88,0x03,0x4c,0xe8,0x00,0xa8,0x80,0x3f,0xa4,0x00,0xfe,0xe0,0x21,0xcc,0x00,0x47,0x7f,0x00,0x78,}; | const uint8_t _I_InfraredLearn_128x64_0[] = {0x01,0x00,0xcc,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x07,0x80,0x3f,0x01,0x07,0x82,0x41,0x21,0x20,0x73,0x00,0x8e,0x82,0x0f,0x00,0xa0,0x01,0x46,0x11,0x00,0x07,0xc0,0x28,0x41,0xe5,0xc8,0xba,0x63,0xa7,0x70,0x6b,0x3d,0xbb,0x99,0x19,0xee,0x68,0x71,0x16,0x3f,0x70,0x3c,0x64,0xf9,0x58,0x25,0x26,0x13,0x91,0xc9,0x64,0xa4,0x99,0x2d,0x06,0x1f,0x29,0x42,0x07,0x8c,0x80,0x1e,0x50,0xff,0x88,0x3c,0x67,0x80,0xf1,0xc1,0x03,0xde,0x03,0x11,0x07,0x8c,0x10,0x1e,0x38,0x40,0x79,0xf0,0x32,0x80,0xf1,0x83,0x58,0x72,0x58,0xc8,0xc6,0x73,0x40,0x3f,0x10,0x78,0x9e,0xf1,0x17,0xe9,0xcf,0x00,0x78,0x03,0xc0,0x1e,0x00,0xf0,0x02,0x44,0x18,0xa3,0x80,0x82,0x32,0x06,0x44,0x0f,0xf0,0x73,0x5d,0xe3,0x92,0x7e,0xcf,0x06,0x3b,0xc3,0xa4,0xdd,0xfc,0xc8,0x35,0xca,0x44,0xa5,0x34,0x5c,0x16,0x92,0x89,0x4a,0x91,0x4a,0x60,0x20,0xf7,0xa4,0x83,0xc6,0x8e,0x0f,0xba,0x88,0x3c,0x68,0x00,0xf7,0x80,0x65,0xe3,0x9c,0x7a,0x6e,0x0a,0x49,0xc3,0xb8,0xc8,0xa4,0xc0,0xf5,0x00,0x08,0x1d,0xc0,0x0e,0x0f,0xf0,0x07,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x2f,0xfb,0xfe,0x00,0x38,0x39,0x97,0xa1,0x00,0xe7,0xf0,0x3b,0x1c,0x00,0xd9,0x00,0x32,0xc8,0x01,0xef,0x48,0x03,0x2d,0x03,0xe0,0x45,0x38,0x0d,0x02,0x01,0x28,0xc0,0x01,0xca,0x01,0x1f,0xa0,0x10,0x12,0x05,0x80,0x80,0x49,0x38,0x1a,0xa0,0x00,0xf0,0x6f,0xf8,0x08,0x20,0x38,0xac,0x10,0x48,0x44,0x06,0x25,0x40,0xaa,0x80,0x07,0xc3,0xfb,0x80,0x41,0x21,0x9b,0x0b,0x6e,0x4e,0x09,0x10,0x80,0xc2,0xb8,0x1f,0xe0,0xf8,0xfc,0x7e,0x30,0x10,0x7a,0xc8,0x20,0x50,0x9a,0x04,0x0c,0x3e,0x3f,0x12,0x48,0x83,0xc6,0x60,0x2f,0x29,0x14,0x0a,0x0b,0xc0,0x80,0x87,0xc7,0xf3,0xf1,0x81,0x8f,0xc7,0x01,0x6d,0x81,0xc7,0x24,0x90,0x28,0x17,0x02,0x39,0x5e,0xaa,0xee,0x75,0xd0,0x3e,0x27,0xb4,0x5e,0x30,0x39,0x20,0x3c,0xa8,0x11,0xcd,0x36,0xab,0x33,0x2e,0x07,0x90,0xbc,0x4d,0x82,0x0f,0x14,0x10,0xc7,0x2e,0x21,0xf3,0x17,0x88,0x7c,0x85,0xe3,0x82,0x4c,0x8c,0x03,0x70,0x3f,0x2b,0x19,0x3c,0x47,0xe2,0x04,0x19,0x10,0x3c,0xa4,0x15,0xc2,0xf9,0x7c,0x41,0xe2,0x2e,0x1f,0x81,0xbc,0x68,0x40,0xf1,0xe0,0x6f,0xcf,0xe5,0xf9,0x82,0x63,0x3e,0xfd,0xef,0x9a,0x3c,0x68,0x22,0xf2,0xbf,0x27,0xcb,0xf1,0x04,0xc0,0x03,0xc4,0x5e,0x30,0x80,0x79,0xec,0x17,0xe5,0xf0,0x67,0xb0,0x34,0x68,0x18,0x0a,0xfd,0x56,0x1b,0x1f,0xb0,0x3b,0xd9,0xc0,0x2e,0xf3,0x25,0x90,0x01,0x81,0xe2,0x00,0xe8,0x08,0x3f,0xa0,0x40,0xfe,0x53,0x88,0x03,0x4c,0xe8,0x00,0xa8,0x80,0x3f,0xa4,0x00,0xfe,0xe0,0x21,0xcc,0x00,0x47,0x7f,0x00,0x78,}; | ||||||
| const uint8_t* const _I_IrdaLearn_128x64[] = {_I_IrdaLearn_128x64_0}; | const uint8_t* const _I_InfraredLearn_128x64[] = {_I_InfraredLearn_128x64_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaSendShort_128x34_0[] = {0x01,0x00,0x42,0x01,0xfe,0x7f,0xc0,0x07,0x03,0x07,0xc4,0x10,0x0a,0x90,0x20,0x7f,0x83,0xfc,0x04,0x3c,0x01,0xc2,0x7f,0xf8,0x80,0x43,0x9f,0x83,0xca,0x40,0x1f,0x5e,0x27,0x7e,0xab,0x55,0xee,0x83,0xce,0x38,0x0f,0x6d,0x50,0x00,0xa5,0xc0,0xf2,0x89,0x03,0xda,0xfe,0x1f,0x1f,0xa8,0x7c,0x48,0xc3,0x09,0x07,0xb6,0xae,0x54,0x1f,0x19,0xd4,0x08,0x40,0x30,0x5f,0x81,0x1c,0x63,0xfe,0x08,0x1f,0x12,0xbe,0x3f,0x49,0x0e,0x02,0x09,0x58,0x04,0x0c,0xd7,0xf1,0x0f,0x1f,0x8e,0x2b,0x11,0xaa,0x95,0x40,0xa2,0x34,0x08,0x16,0xa0,0x4e,0x32,0xab,0xe4,0x7f,0x89,0x77,0x0b,0x0d,0xd6,0x7f,0x82,0x84,0x50,0x20,0x3d,0x81,0x48,0xcd,0x67,0xd3,0xe1,0xf8,0xc8,0xb4,0x43,0xf1,0xc1,0x62,0x24,0x10,0x1b,0x46,0x80,0x3e,0x3f,0xe9,0xf8,0xfc,0xfa,0xa1,0xf1,0xa4,0x68,0x20,0x13,0x8a,0x00,0x7c,0x67,0xf7,0xe3,0xfa,0x4a,0x81,0xe3,0x40,0x80,0x66,0x38,0x66,0xa1,0xeb,0xdd,0x47,0xec,0x0f,0x2c,0x47,0x0e,0xa9,0x35,0xe9,0xd9,0x47,0xe2,0x1f,0x21,0xf8,0xd2,0x17,0xc3,0x88,0x91,0xeb,0x83,0xe6,0xbf,0x42,0x78,0xc4,0x20,0x10,0x88,0x05,0x5c,0x7e,0x7a,0xe1,0xfa,0x42,0x01,0xe5,0x84,0x1f,0x89,0x7c,0xbf,0xf7,0x7b,0xaf,0xdd,0x3e,0x31,0x10,0xe8,0xc2,0x3f,0x01,0xf1,0x3f,0x98,0x7c,0xa7,0x6a,0xf1,0x07,0x97,0x03,0x5e,0x9f,0x36,0x28,0xf7,0x7f,0xa1,0xf1,0x81,0x03,0xca,0x01,0x56,0x5f,0x9f,0xb8,0x3c,0x3e,0xa7,0xf8,0xc1,0x01,0xe5,0xf0,0x15,0x0f,0x85,0xbe,0x21,0xf1,0x00,0x08,0x7c,0x60,0x04,0xf1,0x77,0x96,0x7e,0x02,0xff,0x10,0x7c,0x00,0x16,0x08,0x05,0x40,0x78,0xa3,0xc4,0x00,0xb2,0x40,0x7b,0x2b,0xc4,0x00,0xb5,0x48,0x78,0x3d,0x70,0x01,0xf7,0x07,0xb4,0x00,0x94,0x23,0xfc,0x01,0x18,0x00,0xff,0x85,0xf3,0xff,0xc0,0xc3,0x0f,0x00,0xf0,0x09,0xce,0xf0,0x03,0x2f,0xc0,0x61,0x3f,0xe0,0xf8,0x00,0x30,0x3f,0xc0,}; | const uint8_t _I_InfraredSendShort_128x34_0[] = {0x01,0x00,0x42,0x01,0xfe,0x7f,0xc0,0x07,0x03,0x07,0xc4,0x10,0x0a,0x90,0x20,0x7f,0x83,0xfc,0x04,0x3c,0x01,0xc2,0x7f,0xf8,0x80,0x43,0x9f,0x83,0xca,0x40,0x1f,0x5e,0x27,0x7e,0xab,0x55,0xee,0x83,0xce,0x38,0x0f,0x6d,0x50,0x00,0xa5,0xc0,0xf2,0x89,0x03,0xda,0xfe,0x1f,0x1f,0xa8,0x7c,0x48,0xc3,0x09,0x07,0xb6,0xae,0x54,0x1f,0x19,0xd4,0x08,0x40,0x30,0x5f,0x81,0x1c,0x63,0xfe,0x08,0x1f,0x12,0xbe,0x3f,0x49,0x0e,0x02,0x09,0x58,0x04,0x0c,0xd7,0xf1,0x0f,0x1f,0x8e,0x2b,0x11,0xaa,0x95,0x40,0xa2,0x34,0x08,0x16,0xa0,0x4e,0x32,0xab,0xe4,0x7f,0x89,0x77,0x0b,0x0d,0xd6,0x7f,0x82,0x84,0x50,0x20,0x3d,0x81,0x48,0xcd,0x67,0xd3,0xe1,0xf8,0xc8,0xb4,0x43,0xf1,0xc1,0x62,0x24,0x10,0x1b,0x46,0x80,0x3e,0x3f,0xe9,0xf8,0xfc,0xfa,0xa1,0xf1,0xa4,0x68,0x20,0x13,0x8a,0x00,0x7c,0x67,0xf7,0xe3,0xfa,0x4a,0x81,0xe3,0x40,0x80,0x66,0x38,0x66,0xa1,0xeb,0xdd,0x47,0xec,0x0f,0x2c,0x47,0x0e,0xa9,0x35,0xe9,0xd9,0x47,0xe2,0x1f,0x21,0xf8,0xd2,0x17,0xc3,0x88,0x91,0xeb,0x83,0xe6,0xbf,0x42,0x78,0xc4,0x20,0x10,0x88,0x05,0x5c,0x7e,0x7a,0xe1,0xfa,0x42,0x01,0xe5,0x84,0x1f,0x89,0x7c,0xbf,0xf7,0x7b,0xaf,0xdd,0x3e,0x31,0x10,0xe8,0xc2,0x3f,0x01,0xf1,0x3f,0x98,0x7c,0xa7,0x6a,0xf1,0x07,0x97,0x03,0x5e,0x9f,0x36,0x28,0xf7,0x7f,0xa1,0xf1,0x81,0x03,0xca,0x01,0x56,0x5f,0x9f,0xb8,0x3c,0x3e,0xa7,0xf8,0xc1,0x01,0xe5,0xf0,0x15,0x0f,0x85,0xbe,0x21,0xf1,0x00,0x08,0x7c,0x60,0x04,0xf1,0x77,0x96,0x7e,0x02,0xff,0x10,0x7c,0x00,0x16,0x08,0x05,0x40,0x78,0xa3,0xc4,0x00,0xb2,0x40,0x7b,0x2b,0xc4,0x00,0xb5,0x48,0x78,0x3d,0x70,0x01,0xf7,0x07,0xb4,0x00,0x94,0x23,0xfc,0x01,0x18,0x00,0xff,0x85,0xf3,0xff,0xc0,0xc3,0x0f,0x00,0xf0,0x09,0xce,0xf0,0x03,0x2f,0xc0,0x61,0x3f,0xe0,0xf8,0x00,0x30,0x3f,0xc0,}; | ||||||
| const uint8_t* const _I_IrdaSendShort_128x34[] = {_I_IrdaSendShort_128x34_0}; | const uint8_t* const _I_InfraredSendShort_128x34[] = {_I_InfraredSendShort_128x34_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_IrdaSend_128x64_0[] = {0x01,0x00,0xe2,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xfe,0x04,0x0e,0x05,0x82,0xd7,0x81,0xca,0x21,0x08,0x01,0x8c,0x10,0x0e,0x54,0x00,0x20,0xe0,0xa4,0x00,0xfb,0xb2,0x4e,0xb0,0xfa,0x0e,0x74,0xc7,0x0f,0x3b,0xce,0x4e,0xec,0xf0,0xe1,0x79,0xe4,0xe9,0x58,0x2d,0x3d,0x4a,0x95,0x41,0x89,0x52,0x31,0x59,0x40,0xfa,0x64,0x01,0xe3,0xa0,0xa9,0x5e,0x81,0xe7,0xf4,0x07,0xcc,0x28,0x1e,0x71,0x40,0x7a,0x58,0x01,0xe4,0x3f,0x1c,0x0c,0x4f,0x11,0x0b,0xb3,0x83,0xcc,0x00,0x94,0x20,0x2a,0x03,0xa0,0x1e,0xd0,0x34,0xdf,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x4c,0xf0,0x17,0x4c,0x81,0xa0,0x18,0x18,0x1f,0x39,0x90,0x6c,0x60,0x27,0x70,0xe9,0x3f,0x67,0x03,0x3c,0x80,0x83,0xde,0x81,0x4a,0x84,0xca,0x68,0xb8,0x2b,0xf0,0x3f,0x29,0x20,0xfe,0xa8,0xe0,0x85,0xf3,0x80,0xa5,0xc3,0xb8,0xf4,0xd8,0x11,0x3e,0x40,0x04,0x1b,0x23,0x7d,0x83,0xcd,0x1f,0x60,0x0f,0x00,0x78,0x03,0x7f,0x9f,0xf0,0x01,0xc0,0xc1,0xf1,0x04,0x02,0xa4,0x08,0x1f,0xe0,0xff,0x01,0x0f,0x00,0x70,0x9f,0xfe,0x20,0x10,0xe7,0xe0,0xf2,0x90,0x07,0xd7,0x89,0xdf,0xaa,0xd5,0x7b,0xa0,0xf3,0x8e,0x03,0xdb,0x54,0x00,0x29,0x70,0x3c,0xa2,0x40,0xf6,0xbf,0x87,0xc7,0xea,0x1f,0x12,0x30,0xc2,0x41,0xed,0xab,0x95,0x07,0xc6,0x75,0x02,0x10,0x0c,0x17,0xe0,0x47,0x18,0xff,0x82,0x07,0xc4,0xaf,0x8f,0xd2,0x43,0x80,0x82,0x56,0x01,0x03,0x35,0xfc,0x43,0xc7,0xe3,0x8a,0xc4,0x6a,0xa5,0x50,0x28,0x8d,0x02,0x05,0xa8,0x13,0x8c,0xaa,0xf9,0x1f,0xe2,0x5d,0xc2,0xc3,0x75,0x9f,0xe0,0xa1,0x14,0x08,0x0f,0x60,0x52,0x33,0x59,0xf4,0xf8,0x7e,0x32,0x2d,0x10,0xfc,0x70,0x58,0x89,0x04,0x06,0xd1,0xa0,0x0f,0x8f,0xfa,0x7e,0x3f,0x3e,0xa8,0x7c,0x69,0x1a,0x08,0x04,0xe2,0x80,0x1f,0x19,0xfd,0xf8,0xfe,0x92,0xa0,0x78,0xd0,0x20,0x19,0x8e,0x19,0xa8,0x7a,0xf7,0x51,0xfb,0x03,0xcb,0x11,0xc3,0xaa,0x4d,0x7a,0x76,0x51,0xf8,0x87,0xc8,0x7e,0x34,0x85,0xf0,0xe2,0x24,0x7a,0xe0,0xf9,0xaf,0xd0,0x9e,0x31,0x08,0x04,0x22,0x01,0x57,0x1f,0x9e,0xb8,0x7e,0x90,0x80,0x79,0x61,0x07,0xe2,0x5f,0x2f,0xfd,0xde,0xeb,0xf7,0x4f,0x8c,0x44,0x3a,0x30,0x8f,0xc0,0x7c,0x4f,0xe6,0x1f,0x29,0xda,0xbc,0x41,0xe5,0xc0,0xd7,0xa7,0xcd,0x8a,0x3d,0xdf,0xe8,0x7c,0x60,0x40,0xf2,0x80,0x55,0x97,0xe7,0xee,0x0f,0x0f,0xa9,0xfe,0x30,0x40,0x79,0x7c,0x05,0x43,0xe1,0x6f,0x88,0x7c,0x40,0x02,0x1f,0x18,0x01,0x3c,0x5d,0xe5,0x9f,0x80,0xbf,0xc4,0x1f,0x00,0x05,0x82,0x01,0x50,0x1e,0x28,0xf1,0x00,0x2c,0x90,0x1e,0xca,0xf1,0x00,0x2d,0x52,0x1e,0x0f,0x5c,0x00,0x7d,0xc1,0xed,0x00,0x25,0x08,0xff,0x00,0x46,0x00,0x3f,0xe1,0x7c,0xff,0xf0,0x30,0xc3,0xc0,0x3c,0x02,0x73,0xbc,0x00,0xcb,0xf0,0x18,0x4f,0xf8,0x3e,0x00,0x0c,0x0f,0xf0,}; | const uint8_t _I_InfraredSend_128x64_0[] = {0x01,0x00,0xe2,0x01,0x00,0x78,0x03,0xc0,0x1e,0x00,0xfe,0x04,0x0e,0x05,0x82,0xd7,0x81,0xca,0x21,0x08,0x01,0x8c,0x10,0x0e,0x54,0x00,0x20,0xe0,0xa4,0x00,0xfb,0xb2,0x4e,0xb0,0xfa,0x0e,0x74,0xc7,0x0f,0x3b,0xce,0x4e,0xec,0xf0,0xe1,0x79,0xe4,0xe9,0x58,0x2d,0x3d,0x4a,0x95,0x41,0x89,0x52,0x31,0x59,0x40,0xfa,0x64,0x01,0xe3,0xa0,0xa9,0x5e,0x81,0xe7,0xf4,0x07,0xcc,0x28,0x1e,0x71,0x40,0x7a,0x58,0x01,0xe4,0x3f,0x1c,0x0c,0x4f,0x11,0x0b,0xb3,0x83,0xcc,0x00,0x94,0x20,0x2a,0x03,0xa0,0x1e,0xd0,0x34,0xdf,0x80,0x3c,0x01,0xe0,0x0f,0x00,0x4c,0xf0,0x17,0x4c,0x81,0xa0,0x18,0x18,0x1f,0x39,0x90,0x6c,0x60,0x27,0x70,0xe9,0x3f,0x67,0x03,0x3c,0x80,0x83,0xde,0x81,0x4a,0x84,0xca,0x68,0xb8,0x2b,0xf0,0x3f,0x29,0x20,0xfe,0xa8,0xe0,0x85,0xf3,0x80,0xa5,0xc3,0xb8,0xf4,0xd8,0x11,0x3e,0x40,0x04,0x1b,0x23,0x7d,0x83,0xcd,0x1f,0x60,0x0f,0x00,0x78,0x03,0x7f,0x9f,0xf0,0x01,0xc0,0xc1,0xf1,0x04,0x02,0xa4,0x08,0x1f,0xe0,0xff,0x01,0x0f,0x00,0x70,0x9f,0xfe,0x20,0x10,0xe7,0xe0,0xf2,0x90,0x07,0xd7,0x89,0xdf,0xaa,0xd5,0x7b,0xa0,0xf3,0x8e,0x03,0xdb,0x54,0x00,0x29,0x70,0x3c,0xa2,0x40,0xf6,0xbf,0x87,0xc7,0xea,0x1f,0x12,0x30,0xc2,0x41,0xed,0xab,0x95,0x07,0xc6,0x75,0x02,0x10,0x0c,0x17,0xe0,0x47,0x18,0xff,0x82,0x07,0xc4,0xaf,0x8f,0xd2,0x43,0x80,0x82,0x56,0x01,0x03,0x35,0xfc,0x43,0xc7,0xe3,0x8a,0xc4,0x6a,0xa5,0x50,0x28,0x8d,0x02,0x05,0xa8,0x13,0x8c,0xaa,0xf9,0x1f,0xe2,0x5d,0xc2,0xc3,0x75,0x9f,0xe0,0xa1,0x14,0x08,0x0f,0x60,0x52,0x33,0x59,0xf4,0xf8,0x7e,0x32,0x2d,0x10,0xfc,0x70,0x58,0x89,0x04,0x06,0xd1,0xa0,0x0f,0x8f,0xfa,0x7e,0x3f,0x3e,0xa8,0x7c,0x69,0x1a,0x08,0x04,0xe2,0x80,0x1f,0x19,0xfd,0xf8,0xfe,0x92,0xa0,0x78,0xd0,0x20,0x19,0x8e,0x19,0xa8,0x7a,0xf7,0x51,0xfb,0x03,0xcb,0x11,0xc3,0xaa,0x4d,0x7a,0x76,0x51,0xf8,0x87,0xc8,0x7e,0x34,0x85,0xf0,0xe2,0x24,0x7a,0xe0,0xf9,0xaf,0xd0,0x9e,0x31,0x08,0x04,0x22,0x01,0x57,0x1f,0x9e,0xb8,0x7e,0x90,0x80,0x79,0x61,0x07,0xe2,0x5f,0x2f,0xfd,0xde,0xeb,0xf7,0x4f,0x8c,0x44,0x3a,0x30,0x8f,0xc0,0x7c,0x4f,0xe6,0x1f,0x29,0xda,0xbc,0x41,0xe5,0xc0,0xd7,0xa7,0xcd,0x8a,0x3d,0xdf,0xe8,0x7c,0x60,0x40,0xf2,0x80,0x55,0x97,0xe7,0xee,0x0f,0x0f,0xa9,0xfe,0x30,0x40,0x79,0x7c,0x05,0x43,0xe1,0x6f,0x88,0x7c,0x40,0x02,0x1f,0x18,0x01,0x3c,0x5d,0xe5,0x9f,0x80,0xbf,0xc4,0x1f,0x00,0x05,0x82,0x01,0x50,0x1e,0x28,0xf1,0x00,0x2c,0x90,0x1e,0xca,0xf1,0x00,0x2d,0x52,0x1e,0x0f,0x5c,0x00,0x7d,0xc1,0xed,0x00,0x25,0x08,0xff,0x00,0x46,0x00,0x3f,0xe1,0x7c,0xff,0xf0,0x30,0xc3,0xc0,0x3c,0x02,0x73,0xbc,0x00,0xcb,0xf0,0x18,0x4f,0xf8,0x3e,0x00,0x0c,0x0f,0xf0,}; | ||||||
| const uint8_t* const _I_IrdaSend_128x64[] = {_I_IrdaSend_128x64_0}; | const uint8_t* const _I_InfraredSend_128x64[] = {_I_InfraredSend_128x64_0}; | ||||||
| 
 | 
 | ||||||
| const uint8_t _I_Mute_25x27_0[] = {0x01,0x00,0x51,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x31,0x81,0xc0,0x64,0x38,0x08,0xa4,0x06,0x83,0x40,0x86,0x40,0x70,0x32,0x08,0x20,0x3c,0x63,0xf0,0x60,0x38,0xc0,0xa0,0xa0,0x31,0xc2,0x02,0xc7,0x03,0x48,0x01,0x94,0xc0,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb3,0x81,0x94,0xc6,0x03,0x06,0x80,0x70,0x20,0x1f,0xcf,0xfd,0xfc,0xce,0x80,}; | const uint8_t _I_Mute_25x27_0[] = {0x01,0x00,0x51,0x00,0xfc,0x7f,0xe7,0xf0,0x08,0x24,0x02,0x81,0x00,0x81,0x40,0x30,0x10,0x08,0x08,0x38,0x60,0x20,0x31,0x81,0xc0,0x64,0x38,0x08,0xa4,0x06,0x83,0x40,0x86,0x40,0x70,0x32,0x08,0x20,0x3c,0x63,0xf0,0x60,0x38,0xc0,0xa0,0xa0,0x31,0xc2,0x02,0xc7,0x03,0x48,0x01,0x94,0xc0,0x06,0xc0,0xb3,0x09,0x98,0x6c,0x84,0x68,0x2b,0x21,0x99,0x8e,0xcc,0x86,0x64,0xb3,0x81,0x94,0xc6,0x03,0x06,0x80,0x70,0x20,0x1f,0xcf,0xfd,0xfc,0xce,0x80,}; | ||||||
| const uint8_t* const _I_Mute_25x27[] = {_I_Mute_25x27_0}; | const uint8_t* const _I_Mute_25x27[] = {_I_Mute_25x27_0}; | ||||||
| @ -286,6 +265,27 @@ const uint8_t* const _I_Vol_up_25x27[] = {_I_Vol_up_25x27_0}; | |||||||
| const uint8_t _I_Vol_up_hvr_25x27_0[] = {0x01,0x00,0x28,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x38,0xf7,0x80,0xfc,0x06,0xa2,0xd1,0xfc,0x00,0xd0,0x2f,0xe0,0x38,0x21,0xd8,0x0c,0x8a,0xe6,0x5f,0x33,0x39,0x80,}; | const uint8_t _I_Vol_up_hvr_25x27_0[] = {0x01,0x00,0x28,0x00,0xfc,0x7f,0xe7,0xf0,0x0f,0xe7,0xfe,0xff,0x00,0xff,0x7f,0xff,0xf0,0x00,0x10,0xff,0xe0,0x20,0x38,0xf7,0x80,0xfc,0x06,0xa2,0xd1,0xfc,0x00,0xd0,0x2f,0xe0,0x38,0x21,0xd8,0x0c,0x8a,0xe6,0x5f,0x33,0x39,0x80,}; | ||||||
| const uint8_t* const _I_Vol_up_hvr_25x27[] = {_I_Vol_up_hvr_25x27_0}; | const uint8_t* const _I_Vol_up_hvr_25x27[] = {_I_Vol_up_hvr_25x27_0}; | ||||||
| 
 | 
 | ||||||
|  | const uint8_t _I_Back3_45x8_0[] = {0x00,0x04,0x00,0x10,0x00,0x40,0x00,0x06,0x00,0x18,0x00,0x60,0x00,0x7F,0x00,0xFC,0x01,0xF0,0x07,0x86,0x20,0x18,0x82,0x60,0x08,0x04,0x71,0x10,0xC4,0x41,0x10,0x00,0x21,0x00,0x84,0x00,0x10,0x80,0x00,0x00,0x02,0x00,0x08,0x7E,0x00,0xF8,0x01,0xE0,0x07,}; | ||||||
|  | const uint8_t* const _I_Back3_45x8[] = {_I_Back3_45x8_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DoorLeft_70x55_0[] = {0x01,0x00,0x19,0x01,0x00,0x2c,0x32,0x01,0x03,0x04,0x2c,0x18,0x10,0xf0,0x40,0x47,0x82,0x06,0x81,0x03,0xff,0x80,0x08,0x1a,0x20,0x82,0x15,0x28,0x21,0x87,0x82,0x08,0x6f,0xc0,0xb1,0xe6,0x10,0x10,0x8b,0x46,0x20,0x43,0x55,0x8f,0x82,0x10,0x32,0x73,0x0a,0x09,0x89,0x6c,0x1e,0x09,0x00,0x18,0x60,0xf0,0x0c,0x84,0x93,0x82,0x03,0x18,0x0c,0x02,0x1d,0x00,0x90,0x52,0x70,0x50,0x1e,0x00,0x58,0x63,0x90,0x0a,0x06,0x4a,0x09,0x03,0xb0,0x02,0x06,0x70,0x62,0x49,0xf8,0x0c,0x66,0x3f,0xf0,0x41,0x63,0x04,0x43,0x00,0x99,0x60,0x00,0x85,0xc8,0x06,0x14,0xd0,0x80,0x3f,0xc8,0x0d,0xb8,0x10,0x70,0xf8,0x34,0x13,0x03,0x39,0x04,0x1c,0x42,0x19,0xf8,0xa0,0xc2,0x01,0x07,0xef,0x02,0x8c,0x80,0x10,0x9d,0x00,0x43,0xec,0x00,0xa3,0x10,0x04,0x25,0xce,0x19,0xfc,0x88,0x82,0x12,0x0c,0x35,0x10,0x42,0x4c,0xa1,0x90,0x3f,0xc0,0x21,0x22,0x39,0x82,0xc8,0x88,0xd2,0x11,0xf0,0x01,0x88,0xd5,0x18,0xe2,0x08,0x68,0x10,0x0c,0xa8,0x00,0x83,0x81,0xcc,0xd5,0xc3,0x80,0x84,0x82,0x0e,0xcc,0xc0,0x15,0x79,0x02,0x0b,0x98,0xf8,0x11,0x88,0x82,0x0f,0x31,0x19,0x02,0x08,0x2c,0x9f,0x6a,0x1d,0x20,0x41,0x31,0x4c,0x10,0x8d,0x73,0x04,0x23,0xa4,0xc4,0x6c,0xde,0x20,0x42,0xcc,0x01,0x07,0x07,0xff,0x80,0x06,0x3e,0x08,0x38,0x70,0x20,0xa1,0xe0,0x83,0x8e,0x01,0x0c,0xf0,0x73,0x80,0x43,0x70,0x05,0x08,0x00,0x2c,0x04,0xc4,0x46,0x53,0x09,0x98,0x24,0x80,0x65,0x80,0xb0,0xd9,0x84,0x65,0x32,0x06,0x17,0x0f,0x98,0x23,0x63,0xe1,0x88,0xc4,0x08,0x5f,0xc1,0x30,0x9d,0x84,0x4e,0x66,0x94,0x11,0x98,0x75,0x26,0x00,}; | ||||||
|  | const uint8_t* const _I_DoorLeft_70x55[] = {_I_DoorLeft_70x55_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DoorLocked_10x56_0[] = {0x01,0x00,0x4e,0x00,0x86,0x40,0x25,0xb0,0x0b,0x6c,0x03,0x9b,0x00,0xc6,0xc0,0x65,0x90,0x10,0x3a,0xc3,0x20,0x31,0xc8,0x04,0xe2,0x01,0x70,0x80,0x78,0x20,0x1c,0x48,0x07,0x22,0x01,0xd0,0x00,0xf0,0x44,0x68,0x90,0x09,0x04,0x02,0x21,0x00,0x84,0x40,0x25,0x80,0x12,0x1e,0x88,0x14,0xc0,0x2e,0x0d,0x11,0xca,0xf8,0x60,0x1c,0x38,0x07,0x1a,0x05,0xcc,0x80,0x72,0x60,0x5c,0x38,0x10,0x1c,0xf9,0x10,0x2e,0x00,0x05,0x60,0x00,0x11,}; | ||||||
|  | const uint8_t* const _I_DoorLocked_10x56[] = {_I_DoorLocked_10x56_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_DoorRight_70x55_0[] = {0x01,0x00,0x16,0x01,0x81,0xcc,0x01,0x0f,0x60,0x04,0x3f,0x00,0x10,0xf8,0x08,0x0c,0x02,0x05,0x01,0x84,0x02,0x06,0x26,0x0a,0x10,0x8a,0xcc,0xe0,0x1d,0x68,0xe0,0x18,0xab,0xd0,0x0b,0x18,0x10,0x46,0xe6,0x16,0x1e,0x18,0x10,0x46,0xe4,0x28,0x2c,0x98,0x14,0x68,0x00,0x21,0x1d,0x10,0x8c,0x40,0x02,0x0e,0x10,0xa1,0x08,0xc8,0x40,0x42,0x62,0x11,0x94,0x03,0xfd,0xff,0x00,0x0c,0xff,0x0c,0x08,0x28,0x60,0xe4,0xc0,0x85,0x00,0x83,0x00,0x87,0xf1,0x00,0x8c,0x02,0x0b,0x07,0x24,0x84,0xff,0x04,0xc7,0x80,0xa0,0xe4,0xa0,0x81,0x41,0x04,0x17,0x02,0x41,0x49,0x81,0x0e,0x10,0xb2,0xa0,0x82,0x0e,0x9f,0xfc,0x0a,0x62,0xf2,0xc0,0x03,0x92,0xf0,0x08,0x2d,0x78,0x20,0xff,0x02,0x01,0x08,0xae,0x60,0x64,0x38,0x0d,0xb0,0x8d,0x08,0x82,0x11,0x58,0xc4,0x13,0xc0,0x35,0x68,0x62,0x68,0x81,0x09,0x08,0x84,0x40,0x81,0x0d,0x18,0x69,0x10,0x47,0x44,0x66,0x5f,0x21,0xa9,0x29,0x94,0x10,0x2f,0x23,0x53,0x14,0x60,0x42,0x3c,0x08,0xfc,0x02,0x2c,0x62,0x23,0x58,0xd0,0x22,0x00,0x83,0x3e,0x98,0x44,0x43,0x46,0x22,0x30,0x89,0xce,0x01,0x0f,0x70,0x04,0x3f,0x81,0x8a,0x3c,0x21,0xaa,0x70,0x1a,0xe3,0x44,0x1a,0xa6,0x01,0xd2,0x38,0x90,0x8a,0x40,0x20,0xe5,0x96,0x80,0x43,0x81,0x06,0x6b,0x28,0x07,0xf3,0xfe,0x00,0x19,0xf9,0x34,0xc1,0x08,0x8f,0x20,0xf1,0x3e,0x16,0x00,0xa8,0x19,0x00,0x10,0x76,0x03,0xe2,0x3e,0x90,0x45,0x38,0x01,0x42,0x05,0x88,0x44,0x67,0x15,0x70,0x41,0x38,0x04,0x10,0x24,0x03,0x00,0x10,0x20,0x4a,0x46,0xe9,0x46,0xe1,0x04,0x50,0x66,0x40,0x85,0x19,0x98,0x00,0xc0,}; | ||||||
|  | const uint8_t* const _I_DoorRight_70x55[] = {_I_DoorRight_70x55_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_PassportBottom_128x17_0[] = {0x01,0x00,0x5e,0x00,0x96,0x01,0x97,0xe1,0xff,0x00,0x2e,0x3e,0x68,0x0f,0x5a,0xc5,0x54,0x00,0xb9,0x50,0xfb,0x6a,0x35,0x40,0x05,0xcd,0x4e,0x03,0xfd,0x30,0x0f,0xf8,0x7f,0xa0,0x81,0xfe,0xf9,0x1b,0xfb,0xf3,0x01,0x47,0x66,0x02,0x1b,0x03,0x07,0xe7,0x02,0x0b,0x02,0x07,0xe5,0x82,0x0b,0xf2,0x1c,0xb0,0x01,0x67,0xf0,0x5f,0xd0,0x3f,0x23,0xf0,0x9b,0xc9,0xe5,0x80,0x03,0xd5,0xc0,0x00,0x86,0x01,0xf3,0xe6,0x1e,0x58,0x00,0x36,0xa8,0x06,0xac,0x04,0x30,0x6c,0x30,0xee,0x60,0x1f,0xe0,0x10,0xff,0x0d,0xfb,0x00,}; | ||||||
|  | const uint8_t* const _I_PassportBottom_128x17[] = {_I_PassportBottom_128x17_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_PassportLeft_6x47_0[] = {0x01,0x00,0x1c,0x00,0x9e,0x40,0xa3,0x32,0x59,0x2c,0x66,0x03,0x01,0x82,0xc2,0x62,0x32,0x50,0x16,0xc8,0x60,0x30,0x28,0x24,0x32,0x39,0x3c,0x9e,0x4d,0x25,0x80,0x1a,}; | ||||||
|  | const uint8_t* const _I_PassportLeft_6x47[] = {_I_PassportLeft_6x47_0}; | ||||||
|  | 
 | ||||||
|  | const uint8_t _I_WarningDolphin_45x42_0[] = {0x01,0x00,0xc6,0x00,0x00,0x1c,0x22,0x04,0x05,0x7f,0xfc,0x1e,0x20,0x05,0x1e,0x04,0x02,0x30,0x05,0x29,0x84,0x02,0xc1,0x20,0x02,0x8c,0x22,0x01,0x80,0x02,0x94,0x10,0x32,0x30,0x10,0x10,0x87,0xca,0x84,0x03,0x10,0x42,0x81,0x48,0x28,0x38,0x08,0x04,0x3e,0x01,0x84,0x83,0xe0,0x30,0x11,0x08,0x05,0xa2,0x11,0x40,0xa0,0x4b,0xc6,0xc5,0x40,0xd0,0x56,0xe0,0x10,0x60,0x29,0x54,0xf0,0x10,0x18,0xf0,0x14,0x6b,0xf6,0x0c,0x04,0x3e,0x40,0x05,0x12,0x80,0xc1,0xe4,0x01,0xd2,0xf8,0x40,0xe4,0x18,0x09,0xf4,0x03,0xf1,0x01,0x90,0x40,0x28,0x30,0x0f,0xe4,0x00,0x16,0x24,0x11,0xbf,0x01,0x44,0xee,0x53,0xf0,0x29,0xf0,0x3e,0x02,0x91,0x3b,0x8c,0xc3,0x81,0x13,0x90,0x48,0x20,0x3f,0xf9,0xfc,0x42,0x60,0x05,0x10,0x98,0x81,0x56,0x11,0x38,0x02,0x9c,0x1a,0x31,0x1e,0x02,0x8f,0x02,0x03,0x1c,0x90,0xc0,0x7c,0x02,0xf1,0xce,0x02,0x07,0x01,0x1f,0x80,0x63,0xa8,0x08,0x71,0x3c,0x8e,0x39,0x24,0x40,0x51,0xc7,0x81,0x53,0x0f,0x3c,0x02,0x9d,0x1e,0x38,0x29,0x10,0x29,0x17,0xc8,0x0a,0x32,0x3a,0x00,0x14,0x4b,0xa2,0x05,0x58,0x98,0x15,0x22,0x20,0x54,0x84,0x81,0x50,}; | ||||||
|  | const uint8_t* const _I_WarningDolphin_45x42[] = {_I_WarningDolphin_45x42_0}; | ||||||
|  | 
 | ||||||
| const uint8_t _I_KeyBackspaceSelected_16x9_0[] = {0x00,0xFE,0x7F,0xFF,0xFF,0xEF,0xFF,0xE7,0xFF,0x03,0xC0,0xE7,0xFF,0xEF,0xFF,0xFF,0xFF,0xFE,0x7F,}; | const uint8_t _I_KeyBackspaceSelected_16x9_0[] = {0x00,0xFE,0x7F,0xFF,0xFF,0xEF,0xFF,0xE7,0xFF,0x03,0xC0,0xE7,0xFF,0xEF,0xFF,0xFF,0xFF,0xFE,0x7F,}; | ||||||
| const uint8_t* const _I_KeyBackspaceSelected_16x9[] = {_I_KeyBackspaceSelected_16x9_0}; | const uint8_t* const _I_KeyBackspaceSelected_16x9[] = {_I_KeyBackspaceSelected_16x9_0}; | ||||||
| 
 | 
 | ||||||
| @ -718,24 +718,17 @@ const Icon I_ArrowDownEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_ | |||||||
| const Icon I_ArrowDownFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownFilled_14x15}; | const Icon I_ArrowDownFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowDownFilled_14x15}; | ||||||
| const Icon I_ArrowUpEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpEmpty_14x15}; | const Icon I_ArrowUpEmpty_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpEmpty_14x15}; | ||||||
| const Icon I_ArrowUpFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpFilled_14x15}; | const Icon I_ArrowUpFilled_14x15 = {.width=14,.height=15,.frame_count=1,.frame_rate=0,.frames=_I_ArrowUpFilled_14x15}; | ||||||
| const Icon I_Back3_45x8 = {.width=45,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Back3_45x8}; |  | ||||||
| const Icon I_DoorLeft_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_70x55}; |  | ||||||
| const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; |  | ||||||
| const Icon I_DoorRight_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorRight_70x55}; |  | ||||||
| const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; |  | ||||||
| const Icon I_PassportLeft_6x47 = {.width=6,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_PassportLeft_6x47}; |  | ||||||
| const Icon I_WarningDolphin_45x42 = {.width=45,.height=42,.frame_count=1,.frame_rate=0,.frames=_I_WarningDolphin_45x42}; |  | ||||||
| const Icon I_Back_15x10 = {.width=15,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Back_15x10}; | const Icon I_Back_15x10 = {.width=15,.height=10,.frame_count=1,.frame_rate=0,.frames=_I_Back_15x10}; | ||||||
| const Icon I_DolphinReadingSuccess_59x63 = {.width=59,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinReadingSuccess_59x63}; | const Icon I_DolphinReadingSuccess_59x63 = {.width=59,.height=63,.frame_count=1,.frame_rate=0,.frames=_I_DolphinReadingSuccess_59x63}; | ||||||
| const Icon I_Down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_25x27}; | const Icon I_Down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_25x27}; | ||||||
| const Icon I_Down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_hvr_25x27}; | const Icon I_Down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Down_hvr_25x27}; | ||||||
| const Icon I_Fill_marker_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Fill_marker_7x7}; | const Icon I_Fill_marker_7x7 = {.width=7,.height=7,.frame_count=1,.frame_rate=0,.frames=_I_Fill_marker_7x7}; | ||||||
| const Icon I_IrdaArrowDown_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowDown_4x8}; | const Icon I_InfraredArrowDown_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_InfraredArrowDown_4x8}; | ||||||
| const Icon I_IrdaArrowUp_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_IrdaArrowUp_4x8}; | const Icon I_InfraredArrowUp_4x8 = {.width=8,.height=4,.frame_count=1,.frame_rate=0,.frames=_I_InfraredArrowUp_4x8}; | ||||||
| const Icon I_IrdaLearnShort_128x31 = {.width=128,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearnShort_128x31}; | const Icon I_InfraredLearnShort_128x31 = {.width=128,.height=31,.frame_count=1,.frame_rate=0,.frames=_I_InfraredLearnShort_128x31}; | ||||||
| const Icon I_IrdaLearn_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaLearn_128x64}; | const Icon I_InfraredLearn_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_InfraredLearn_128x64}; | ||||||
| const Icon I_IrdaSendShort_128x34 = {.width=128,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSendShort_128x34}; | const Icon I_InfraredSendShort_128x34 = {.width=128,.height=34,.frame_count=1,.frame_rate=0,.frames=_I_InfraredSendShort_128x34}; | ||||||
| const Icon I_IrdaSend_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_IrdaSend_128x64}; | const Icon I_InfraredSend_128x64 = {.width=128,.height=64,.frame_count=1,.frame_rate=0,.frames=_I_InfraredSend_128x64}; | ||||||
| const Icon I_Mute_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_25x27}; | const Icon I_Mute_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_25x27}; | ||||||
| const Icon I_Mute_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_hvr_25x27}; | const Icon I_Mute_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Mute_hvr_25x27}; | ||||||
| const Icon I_Power_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_25x27}; | const Icon I_Power_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Power_25x27}; | ||||||
| @ -746,6 +739,13 @@ const Icon I_Vol_down_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0 | |||||||
| const Icon I_Vol_down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_hvr_25x27}; | const Icon I_Vol_down_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_down_hvr_25x27}; | ||||||
| const Icon I_Vol_up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_25x27}; | const Icon I_Vol_up_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_25x27}; | ||||||
| const Icon I_Vol_up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_hvr_25x27}; | const Icon I_Vol_up_hvr_25x27 = {.width=25,.height=27,.frame_count=1,.frame_rate=0,.frames=_I_Vol_up_hvr_25x27}; | ||||||
|  | const Icon I_Back3_45x8 = {.width=45,.height=8,.frame_count=1,.frame_rate=0,.frames=_I_Back3_45x8}; | ||||||
|  | const Icon I_DoorLeft_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorLeft_70x55}; | ||||||
|  | const Icon I_DoorLocked_10x56 = {.width=10,.height=56,.frame_count=1,.frame_rate=0,.frames=_I_DoorLocked_10x56}; | ||||||
|  | const Icon I_DoorRight_70x55 = {.width=70,.height=55,.frame_count=1,.frame_rate=0,.frames=_I_DoorRight_70x55}; | ||||||
|  | const Icon I_PassportBottom_128x17 = {.width=128,.height=17,.frame_count=1,.frame_rate=0,.frames=_I_PassportBottom_128x17}; | ||||||
|  | const Icon I_PassportLeft_6x47 = {.width=6,.height=47,.frame_count=1,.frame_rate=0,.frames=_I_PassportLeft_6x47}; | ||||||
|  | const Icon I_WarningDolphin_45x42 = {.width=45,.height=42,.frame_count=1,.frame_rate=0,.frames=_I_WarningDolphin_45x42}; | ||||||
| const Icon I_KeyBackspaceSelected_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspaceSelected_16x9}; | const Icon I_KeyBackspaceSelected_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspaceSelected_16x9}; | ||||||
| const Icon I_KeyBackspace_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspace_16x9}; | const Icon I_KeyBackspace_16x9 = {.width=16,.height=9,.frame_count=1,.frame_rate=0,.frames=_I_KeyBackspace_16x9}; | ||||||
| const Icon I_KeySaveSelected_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySaveSelected_24x11}; | const Icon I_KeySaveSelected_24x11 = {.width=24,.height=11,.frame_count=1,.frame_rate=0,.frames=_I_KeySaveSelected_24x11}; | ||||||
|  | |||||||
| @ -59,24 +59,17 @@ extern const Icon I_ArrowDownEmpty_14x15; | |||||||
| extern const Icon I_ArrowDownFilled_14x15; | extern const Icon I_ArrowDownFilled_14x15; | ||||||
| extern const Icon I_ArrowUpEmpty_14x15; | extern const Icon I_ArrowUpEmpty_14x15; | ||||||
| extern const Icon I_ArrowUpFilled_14x15; | extern const Icon I_ArrowUpFilled_14x15; | ||||||
| extern const Icon I_Back3_45x8; |  | ||||||
| extern const Icon I_DoorLeft_70x55; |  | ||||||
| extern const Icon I_DoorLocked_10x56; |  | ||||||
| extern const Icon I_DoorRight_70x55; |  | ||||||
| extern const Icon I_PassportBottom_128x17; |  | ||||||
| extern const Icon I_PassportLeft_6x47; |  | ||||||
| extern const Icon I_WarningDolphin_45x42; |  | ||||||
| extern const Icon I_Back_15x10; | extern const Icon I_Back_15x10; | ||||||
| extern const Icon I_DolphinReadingSuccess_59x63; | extern const Icon I_DolphinReadingSuccess_59x63; | ||||||
| extern const Icon I_Down_25x27; | extern const Icon I_Down_25x27; | ||||||
| extern const Icon I_Down_hvr_25x27; | extern const Icon I_Down_hvr_25x27; | ||||||
| extern const Icon I_Fill_marker_7x7; | extern const Icon I_Fill_marker_7x7; | ||||||
| extern const Icon I_IrdaArrowDown_4x8; | extern const Icon I_InfraredArrowDown_4x8; | ||||||
| extern const Icon I_IrdaArrowUp_4x8; | extern const Icon I_InfraredArrowUp_4x8; | ||||||
| extern const Icon I_IrdaLearnShort_128x31; | extern const Icon I_InfraredLearnShort_128x31; | ||||||
| extern const Icon I_IrdaLearn_128x64; | extern const Icon I_InfraredLearn_128x64; | ||||||
| extern const Icon I_IrdaSendShort_128x34; | extern const Icon I_InfraredSendShort_128x34; | ||||||
| extern const Icon I_IrdaSend_128x64; | extern const Icon I_InfraredSend_128x64; | ||||||
| extern const Icon I_Mute_25x27; | extern const Icon I_Mute_25x27; | ||||||
| extern const Icon I_Mute_hvr_25x27; | extern const Icon I_Mute_hvr_25x27; | ||||||
| extern const Icon I_Power_25x27; | extern const Icon I_Power_25x27; | ||||||
| @ -87,6 +80,13 @@ extern const Icon I_Vol_down_25x27; | |||||||
| extern const Icon I_Vol_down_hvr_25x27; | extern const Icon I_Vol_down_hvr_25x27; | ||||||
| extern const Icon I_Vol_up_25x27; | extern const Icon I_Vol_up_25x27; | ||||||
| extern const Icon I_Vol_up_hvr_25x27; | extern const Icon I_Vol_up_hvr_25x27; | ||||||
|  | extern const Icon I_Back3_45x8; | ||||||
|  | extern const Icon I_DoorLeft_70x55; | ||||||
|  | extern const Icon I_DoorLocked_10x56; | ||||||
|  | extern const Icon I_DoorRight_70x55; | ||||||
|  | extern const Icon I_PassportBottom_128x17; | ||||||
|  | extern const Icon I_PassportLeft_6x47; | ||||||
|  | extern const Icon I_WarningDolphin_45x42; | ||||||
| extern const Icon I_KeyBackspaceSelected_16x9; | extern const Icon I_KeyBackspaceSelected_16x9; | ||||||
| extern const Icon I_KeyBackspace_16x9; | extern const Icon I_KeyBackspace_16x9; | ||||||
| extern const Icon I_KeySaveSelected_24x11; | extern const Icon I_KeySaveSelected_24x11; | ||||||
|  | |||||||
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB | 
| Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB | 
| Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB | 
| Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB | 
| @ -34,8 +34,8 @@ const GpioPin gpio_rfid_pull = {.port = RFID_PULL_GPIO_Port, .pin = RFID_PULL_Pi | |||||||
| const GpioPin gpio_rfid_carrier_out = {.port = RFID_OUT_GPIO_Port, .pin = RFID_OUT_Pin}; | const GpioPin gpio_rfid_carrier_out = {.port = RFID_OUT_GPIO_Port, .pin = RFID_OUT_Pin}; | ||||||
| const GpioPin gpio_rfid_data_in = {.port = RFID_RF_IN_GPIO_Port, .pin = RFID_RF_IN_Pin}; | const GpioPin gpio_rfid_data_in = {.port = RFID_RF_IN_GPIO_Port, .pin = RFID_RF_IN_Pin}; | ||||||
| 
 | 
 | ||||||
| const GpioPin gpio_irda_rx = {.port = IR_RX_GPIO_Port, .pin = IR_RX_Pin}; | const GpioPin gpio_infrared_rx = {.port = IR_RX_GPIO_Port, .pin = IR_RX_Pin}; | ||||||
| const GpioPin gpio_irda_tx = {.port = IR_TX_GPIO_Port, .pin = IR_TX_Pin}; | const GpioPin gpio_infrared_tx = {.port = IR_TX_GPIO_Port, .pin = IR_TX_Pin}; | ||||||
| 
 | 
 | ||||||
| const GpioPin gpio_usart_tx = {.port = USART1_TX_Port, .pin = USART1_TX_Pin}; | const GpioPin gpio_usart_tx = {.port = USART1_TX_Port, .pin = USART1_TX_Pin}; | ||||||
| const GpioPin gpio_usart_rx = {.port = USART1_RX_Port, .pin = USART1_RX_Pin}; | const GpioPin gpio_usart_rx = {.port = USART1_RX_Port, .pin = USART1_RX_Pin}; | ||||||
|  | |||||||
| @ -59,8 +59,8 @@ extern const GpioPin gpio_rfid_pull; | |||||||
| extern const GpioPin gpio_rfid_carrier_out; | extern const GpioPin gpio_rfid_carrier_out; | ||||||
| extern const GpioPin gpio_rfid_data_in; | extern const GpioPin gpio_rfid_data_in; | ||||||
| 
 | 
 | ||||||
| extern const GpioPin gpio_irda_rx; | extern const GpioPin gpio_infrared_rx; | ||||||
| extern const GpioPin gpio_irda_tx; | extern const GpioPin gpio_infrared_tx; | ||||||
| 
 | 
 | ||||||
| extern const GpioPin gpio_usart_tx; | extern const GpioPin gpio_usart_tx; | ||||||
| extern const GpioPin gpio_usart_rx; | extern const GpioPin gpio_usart_rx; | ||||||
|  | |||||||
| @ -34,8 +34,8 @@ const GpioPin gpio_rfid_pull = {.port = RFID_PULL_GPIO_Port, .pin = RFID_PULL_Pi | |||||||
| const GpioPin gpio_rfid_carrier_out = {.port = RFID_OUT_GPIO_Port, .pin = RFID_OUT_Pin}; | const GpioPin gpio_rfid_carrier_out = {.port = RFID_OUT_GPIO_Port, .pin = RFID_OUT_Pin}; | ||||||
| const GpioPin gpio_rfid_data_in = {.port = RFID_RF_IN_GPIO_Port, .pin = RFID_RF_IN_Pin}; | const GpioPin gpio_rfid_data_in = {.port = RFID_RF_IN_GPIO_Port, .pin = RFID_RF_IN_Pin}; | ||||||
| 
 | 
 | ||||||
| const GpioPin gpio_irda_rx = {.port = IR_RX_GPIO_Port, .pin = IR_RX_Pin}; | const GpioPin gpio_infrared_rx = {.port = IR_RX_GPIO_Port, .pin = IR_RX_Pin}; | ||||||
| const GpioPin gpio_irda_tx = {.port = IR_TX_GPIO_Port, .pin = IR_TX_Pin}; | const GpioPin gpio_infrared_tx = {.port = IR_TX_GPIO_Port, .pin = IR_TX_Pin}; | ||||||
| 
 | 
 | ||||||
| const GpioPin gpio_usart_tx = {.port = USART1_TX_Port, .pin = USART1_TX_Pin}; | const GpioPin gpio_usart_tx = {.port = USART1_TX_Port, .pin = USART1_TX_Pin}; | ||||||
| const GpioPin gpio_usart_rx = {.port = USART1_RX_Port, .pin = USART1_RX_Pin}; | const GpioPin gpio_usart_rx = {.port = USART1_RX_Port, .pin = USART1_RX_Pin}; | ||||||
|  | |||||||
| @ -59,8 +59,8 @@ extern const GpioPin gpio_rfid_pull; | |||||||
| extern const GpioPin gpio_rfid_carrier_out; | extern const GpioPin gpio_rfid_carrier_out; | ||||||
| extern const GpioPin gpio_rfid_data_in; | extern const GpioPin gpio_rfid_data_in; | ||||||
| 
 | 
 | ||||||
| extern const GpioPin gpio_irda_rx; | extern const GpioPin gpio_infrared_rx; | ||||||
| extern const GpioPin gpio_irda_tx; | extern const GpioPin gpio_infrared_tx; | ||||||
| 
 | 
 | ||||||
| extern const GpioPin gpio_usart_tx; | extern const GpioPin gpio_usart_tx; | ||||||
| extern const GpioPin gpio_usart_rx; | extern const GpioPin gpio_usart_rx; | ||||||
|  | |||||||
 Albert Kharisov
						Albert Kharisov