diff --git a/.ci_files/anims_ofw.txt b/.ci_files/anims_ofw.txt index a9a6fd2413..4fa369f820 100644 --- a/.ci_files/anims_ofw.txt +++ b/.ci_files/anims_ofw.txt @@ -85,6 +85,13 @@ Min level: 1 Max level: 3 Weight: 3 +Name: L1_Kaiju_128x64 +Min butthurt: 0 +Max butthurt: 10 +Min level: 1 +Max level: 3 +Weight: 4 + Name: L2_Wake_up_128x64 Min butthurt: 0 Max butthurt: 12 diff --git a/.gitignore b/.gitignore index f199a48beb..bae5d6dbd3 100644 --- a/.gitignore +++ b/.gitignore @@ -30,28 +30,26 @@ bindings/ .mxproject Brewfile.lock.json -# Visual Studio Code -/.vscode/ - # Kate .kateproject .kateconfig -# legendary cmake's -build -CMakeLists.txt - -# bundle output -dist - # kde .directory null.d # SCons .sconsign.dblite + + +# Visual Studio Code +/.vscode + +# bundle output +/dist + # SCons build dir -build/ +/build # Toolchain /toolchain @@ -65,3 +63,5 @@ PVS-Studio.log *.PVS-Studio.* .gdbinit + +/fbt_options_local.py \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 425ba63002..e4d511dcda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,40 +1,31 @@ ### New changes -* !!! **Warning! After installing, Desktop settings (Favoutite apps, PIN Code, AutoLock time..) will be resetted to default due to settings changes, Please set your PIN code, Favourite apps again in Settings->Desktop** !!! * If you have copied any apps manually into `apps` folder - remove `apps` folder or that specific apps you copied on your microSD before installing this release to avoid issues due to OFW API version update! If you using regular builds or extra pack builds (e) without your manually added apps, all included apps will be installed automatically, no extra actions needed! ----- -* Desktop: **Show clock on main screen** (Enable in Settings->Desktop->Show Clock) (by @gid9798 | PR #484) -* SubGHz Remote: New plugin - Configurator (Remote Maker) - Now you can create and edit map files on flipper! (by @gid9798 | PR #487) -* SubGHz Remote: Full refactoring, app was re-made from scratch (by @gid9798) -* Archive: Fix rename, show error message to user -* API: Cleanup, mini refactoring of some apps (+6k of free flash space) -* LFRFID: Debug: Allow PSK RAW emulation in gui -* SubGHz: Security+ 2.0 -> add extra custom button `0x78` - Fixes issue #469 -* SubGHz: Various fixes (by @gid9798) -* SubGHz: Fix counter settings in debug -* SubGHz: Move dangerous_settings check (by @gid9798 | PR #475) -* Misc: Move NFC plugins into NFC folder -* Misc: Name changer code moved to proper place, load after system startup + extra checks -* Plugins: Merge tiktok and ytshorts remote into one (by @Willy-JL) -* Plugins: NMEA GPS UART - stability fix -* Plugins: Port XFW keyboard with extra symbols to WiFi Marauder instead of using UART Term keyboard (thanks to @Willy-JL) -* Plugins: Moved from extra pack to main FW: Mifare Nested [(by AloneLiberty)](https://github.com/AloneLiberty/FlipperNested) - Works with PC and python app `FlipperNested` -* Plugins: Update TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (+ Add option to set custom fonts) -* Plugins: Update NMEA GPS UART [(by ezod)](https://github.com/ezod/flipperzero-gps) (GLL support) -* Plugins: Update WiFi Marauder [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) -* OFW PR 2680: RFID - Add support for Nexkey/Nexwatch (by @mauimauer) -* OFW: nfc: Mifare Ultralight C detection -* OFW: api: added toolbox/api_lock.h -* OFW: NFC: Add support for Gen4 "ultimate card" in Magic app -* OFW: desktop: Refactor favorites settings and allow app browser in selection -* OFW: Infrared: respect carrier frequency and duty cycle settings -> **Breaking API change, API version was changed from 26.x to 27.x** -* OFW: Desktop,Rpc: desktop status subscription -* OFW: Storage, common_rename: check that old path is exists -* OFW: Services: remove deallocator for persistent services -* OFW: Storage: common_rename is now POSIX compliant -* OFW: Removed user-specific data from tar artifacts -* OFW: fbt: Fix tar uid overflow when packaging -* OFW: fbt: Use union for old py (Fix builds if using older python versions) -* OFW: USB HID report timeout +* SubGHz Remote: Fixed BinRAW support, + many other fixes (by @gid9798 | PR #492) +* SubGHz: Keeloq mfname refactoring (by @gid9798 | PR #479) +* Desktop Clock: Some improvements and fixes (by @gid9798 | PR #490) +* LF RFID: Cleanup duplicated code (by @gid9798 | PR #493) +* NFC V: Code review fixes + some GUI rework (by @nvx & @xMasterX) +* NFC V: Fixed crash when exiting emulation and starting it again +* Infrared: Use Universal AC Remote from OFW, same for Audio remote, and rename buttons in OFW naming scheme +* Infrared: Update universal remote assets (by @amec0e) +* GUI Keyboard: Fix crash when renaming files with long file name (Fixed issue #489) +* Misc: Fix APP_IDs to match new regex (regex check will be added in OFW soon) +* Plugins: ESP8266 Deauther - Crash fix (Fixed issue #497) +* Plugins: Update -> Mifare Nested [(by AloneLiberty)](https://github.com/AloneLiberty/FlipperNested) +* Plugins: Update -> TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) +* Plugins: Update -> ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-wifi-marauder) +* Plugins: Update -> UART Terminal [(by cool4uma)](https://github.com/cool4uma/UART_Terminal/tree/main) +* OFW: NFC: fix MFC timings -> **Fixes issues with Mifare Classic emulation that could happen after unlshd-049 release** +* OFW: Update dolphin.py +* OFW: NFC Magic: Fix gen1 writing with invalid BCC (lost fix from PR 2511) +* OFW: SubGhz: fix flipper crashes after exiting broadcast blocking message and crash cli +* OFW: Dolphin: new animation +* OFW: fbt: added hooks for build & dist environments; added FW_ORIGIN_* macro for apps & SDK +* OFW: FuriHal: add bus abstraction -> **Breaking API change, API version was changed from 27.x to 28.x** +* OFW: Implement support for reading Opal card (Sydney, Australia) +* OFW: BadUSB: script execution pause +* OFW: IR Universal AC: Add Carrier 42QHB12D8S #### [🎲 Download latest extra apps pack](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip) diff --git a/ReadMe.md b/ReadMe.md index 9b6947e906..4917d784c5 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -143,7 +143,7 @@ You can support us by using links or addresses below: - WAV Player [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) -> Also outputs audio on `PA6` - `3(A6)` pin - Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey - GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin) -- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) +- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-wifi-marauder) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) - NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker) - Simple Clock (timer by GMMan) [(original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61) - **Sub-GHz Remote** [(by @gid9798)](https://github.com/gid9798) diff --git a/applications/debug/application.fam b/applications/debug/application.fam index c52907002e..a33b3693df 100644 --- a/applications/debug/application.fam +++ b/applications/debug/application.fam @@ -7,8 +7,8 @@ App( "vibro_test", "keypad_test", "usb_test", - "USB_Mouse", - "UART_Echo", + "usb_mouse", + "uart_echo", "display_test", "text_box_test", "file_browser_test", diff --git a/applications/debug/lfrfid_debug/scenes/lfrfid_debug_app_scene_tune.c b/applications/debug/lfrfid_debug/scenes/lfrfid_debug_app_scene_tune.c index c7f3bf24fd..74c53ae6d4 100644 --- a/applications/debug/lfrfid_debug/scenes/lfrfid_debug_app_scene_tune.c +++ b/applications/debug/lfrfid_debug/scenes/lfrfid_debug_app_scene_tune.c @@ -14,9 +14,7 @@ void lfrfid_debug_scene_tune_on_enter(void* context) { furi_hal_rfid_comp_set_callback(comparator_trigger_callback, app); furi_hal_rfid_comp_start(); - furi_hal_rfid_pins_read(); - furi_hal_rfid_tim_read(125000, 0.5); - furi_hal_rfid_tim_read_start(); + furi_hal_rfid_tim_read_start(125000, 0.5); view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidDebugViewTune); } @@ -43,6 +41,5 @@ void lfrfid_debug_scene_tune_on_exit(void* context) { furi_hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog); furi_hal_rfid_tim_read_stop(); - furi_hal_rfid_tim_reset(); furi_hal_rfid_pins_reset(); } diff --git a/applications/debug/uart_echo/application.fam b/applications/debug/uart_echo/application.fam index fce9ac8090..b7cff991d1 100644 --- a/applications/debug/uart_echo/application.fam +++ b/applications/debug/uart_echo/application.fam @@ -1,5 +1,5 @@ App( - appid="UART_Echo", + appid="uart_echo", name="UART Echo", apptype=FlipperAppType.DEBUG, entry_point="uart_echo_app", diff --git a/applications/debug/unit_tests/nfc/nfc_test.c b/applications/debug/unit_tests/nfc/nfc_test.c index 54bdd59097..bc2f7887b1 100644 --- a/applications/debug/unit_tests/nfc/nfc_test.c +++ b/applications/debug/unit_tests/nfc/nfc_test.c @@ -27,6 +27,12 @@ static const uint32_t nfc_test_file_version = 1; #define NFC_TEST_DATA_MAX_LEN 18 #define NFC_TETS_TIMINGS_MAX_LEN 1350 +// Maximum allowed time for buffer preparation to fit 500us nt message timeout +#define NFC_TEST_4_BYTE_BUILD_BUFFER_TIM_MAX (150) +#define NFC_TEST_16_BYTE_BUILD_BUFFER_TIM_MAX (640) +#define NFC_TEST_4_BYTE_BUILD_SIGNAL_TIM_MAX (110) +#define NFC_TEST_16_BYTE_BUILD_SIGNAL_TIM_MAX (440) + typedef struct { Storage* storage; NfcaSignal* signal; @@ -89,13 +95,13 @@ static bool nfc_test_read_signal_from_file(const char* file_name) { static bool nfc_test_digital_signal_test_encode( const char* file_name, - uint32_t encode_max_time, + uint32_t build_signal_max_time_us, + uint32_t build_buffer_max_time_us, uint32_t timing_tolerance, uint32_t timings_sum_tolerance) { furi_assert(nfc_test); bool success = false; - uint32_t time = 0; uint32_t dut_timings_sum = 0; uint32_t ref_timings_sum = 0; uint8_t parity[10] = {}; @@ -109,17 +115,37 @@ static bool nfc_test_digital_signal_test_encode( // Encode signal FURI_CRITICAL_ENTER(); - time = DWT->CYCCNT; + uint32_t time_start = DWT->CYCCNT; + nfca_signal_encode( nfc_test->signal, nfc_test->test_data, nfc_test->test_data_len * 8, parity); + + uint32_t time_signal = + (DWT->CYCCNT - time_start) / furi_hal_cortex_instructions_per_microsecond(); + + time_start = DWT->CYCCNT; + digital_signal_prepare_arr(nfc_test->signal->tx_signal); - time = (DWT->CYCCNT - time) / furi_hal_cortex_instructions_per_microsecond(); + + uint32_t time_buffer = + (DWT->CYCCNT - time_start) / furi_hal_cortex_instructions_per_microsecond(); FURI_CRITICAL_EXIT(); // Check timings - if(time > encode_max_time) { + if(time_signal > build_signal_max_time_us) { FURI_LOG_E( - TAG, "Encoding time: %ld us while accepted value: %ld us", time, encode_max_time); + TAG, + "Build signal time: %ld us while accepted value: %ld us", + time_signal, + build_signal_max_time_us); + break; + } + if(time_buffer > build_buffer_max_time_us) { + FURI_LOG_E( + TAG, + "Build buffer time: %ld us while accepted value: %ld us", + time_buffer, + build_buffer_max_time_us); break; } @@ -156,7 +182,16 @@ static bool nfc_test_digital_signal_test_encode( break; } - FURI_LOG_I(TAG, "Encoding time: %ld us. Acceptable time: %ld us", time, encode_max_time); + FURI_LOG_I( + TAG, + "Build signal time: %ld us. Acceptable time: %ld us", + time_signal, + build_signal_max_time_us); + FURI_LOG_I( + TAG, + "Build buffer time: %ld us. Acceptable time: %ld us", + time_buffer, + build_buffer_max_time_us); FURI_LOG_I( TAG, "Timings sum difference: %ld [1/64MHZ]. Acceptable difference: %ld [1/64MHz]", @@ -171,11 +206,19 @@ static bool nfc_test_digital_signal_test_encode( MU_TEST(nfc_digital_signal_test) { mu_assert( nfc_test_digital_signal_test_encode( - NFC_TEST_RESOURCES_DIR NFC_TEST_SIGNAL_SHORT_FILE, 500, 1, 37), + NFC_TEST_RESOURCES_DIR NFC_TEST_SIGNAL_SHORT_FILE, + NFC_TEST_4_BYTE_BUILD_SIGNAL_TIM_MAX, + NFC_TEST_4_BYTE_BUILD_BUFFER_TIM_MAX, + 1, + 37), "NFC short digital signal test failed\r\n"); mu_assert( nfc_test_digital_signal_test_encode( - NFC_TEST_RESOURCES_DIR NFC_TEST_SIGNAL_LONG_FILE, 2000, 1, 37), + NFC_TEST_RESOURCES_DIR NFC_TEST_SIGNAL_LONG_FILE, + NFC_TEST_16_BYTE_BUILD_SIGNAL_TIM_MAX, + NFC_TEST_16_BYTE_BUILD_BUFFER_TIM_MAX, + 1, + 37), "NFC long digital signal test failed\r\n"); } diff --git a/applications/debug/usb_mouse/application.fam b/applications/debug/usb_mouse/application.fam index 38ba55425c..ab91e7aa26 100644 --- a/applications/debug/usb_mouse/application.fam +++ b/applications/debug/usb_mouse/application.fam @@ -1,5 +1,5 @@ App( - appid="USB_Mouse", + appid="usb_mouse", name="USB Mouse", apptype=FlipperAppType.DEBUG, entry_point="usb_mouse_app", diff --git a/applications/external/arkanoid/application.fam b/applications/external/arkanoid/application.fam index 5cfec8862d..9092c32c6a 100644 --- a/applications/external/arkanoid/application.fam +++ b/applications/external/arkanoid/application.fam @@ -1,5 +1,5 @@ App( - appid="Arkanoid", + appid="arkanoid", name="Arkanoid", apptype=FlipperAppType.EXTERNAL, entry_point="arkanoid_game_app", diff --git a/applications/external/bad_bt/application.fam b/applications/external/bad_bt/application.fam index ddd8eee198..a3544b9974 100644 --- a/applications/external/bad_bt/application.fam +++ b/applications/external/bad_bt/application.fam @@ -13,5 +13,4 @@ App( fap_category="Tools", fap_icon="images/badbt_10px.png", fap_icon_assets="images", - fap_icon_assets_symbol="bad_bt", ) diff --git a/applications/external/barcode_generator/application.fam b/applications/external/barcode_generator/application.fam index c924980056..4f9f234cca 100644 --- a/applications/external/barcode_generator/application.fam +++ b/applications/external/barcode_generator/application.fam @@ -1,5 +1,5 @@ App( - appid="Barcode_Generator", + appid="barcode_generator", name="Barcode Generator", apptype=FlipperAppType.EXTERNAL, entry_point="barcode_generator_app", diff --git a/applications/external/blackjack/application.fam b/applications/external/blackjack/application.fam index f0645f0030..139d94f2e8 100644 --- a/applications/external/blackjack/application.fam +++ b/applications/external/blackjack/application.fam @@ -1,5 +1,5 @@ App( - appid="Blackjack", + appid="blackjack", name="Blackjack", apptype=FlipperAppType.EXTERNAL, entry_point="blackjack_app", diff --git a/applications/external/blackjack/blackjack.c b/applications/external/blackjack/blackjack.c index 95f9c72bb6..44db29087f 100644 --- a/applications/external/blackjack/blackjack.c +++ b/applications/external/blackjack/blackjack.c @@ -14,7 +14,7 @@ #include "util.h" #include "ui.h" -#include "Blackjack_icons.h" +#include "blackjack_icons.h" #define DEALER_MAX 17 diff --git a/applications/external/doom/application.fam b/applications/external/doom/application.fam index 4ff7b12f33..94fa9ab67f 100644 --- a/applications/external/doom/application.fam +++ b/applications/external/doom/application.fam @@ -1,5 +1,5 @@ App( - appid="DOOM", + appid="doom", name="DOOM", apptype=FlipperAppType.EXTERNAL, entry_point="doom_app", diff --git a/applications/external/esp8266_deauth/application.fam b/applications/external/esp8266_deauth/application.fam index 780c51c537..5db7bb40e9 100644 --- a/applications/external/esp8266_deauth/application.fam +++ b/applications/external/esp8266_deauth/application.fam @@ -1,5 +1,5 @@ App( - appid="ESP8266_Deauther", + appid="esp8266_deauther", name="[ESP8266] Deauther", apptype=FlipperAppType.EXTERNAL, entry_point="esp8266_deauth_app", diff --git a/applications/external/esp8266_deauth/esp8266_deauth.c b/applications/external/esp8266_deauth/esp8266_deauth.c index e0a966975e..cb79cf651d 100644 --- a/applications/external/esp8266_deauth/esp8266_deauth.c +++ b/applications/external/esp8266_deauth/esp8266_deauth.c @@ -371,8 +371,8 @@ int32_t esp8266_deauth_app(void* p) { view_port_input_callback_set(view_port, esp8266_deauth_module_input_callback, event_queue); // Open GUI and register view_port - Gui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, view_port, GuiLayerFullscreen); + app->m_gui = furi_record_open(RECORD_GUI); + gui_add_view_port(app->m_gui, view_port, GuiLayerFullscreen); //notification_message(app->notification, &sequence_set_only_blue_255); @@ -513,7 +513,7 @@ int32_t esp8266_deauth_app(void* p) { view_port_enabled_set(view_port, false); - gui_remove_view_port(gui, view_port); + gui_remove_view_port(app->m_gui, view_port); // Close gui record furi_record_close(RECORD_GUI); diff --git a/applications/external/flappy_bird/application.fam b/applications/external/flappy_bird/application.fam index f9fe85fa20..9bfab454f4 100644 --- a/applications/external/flappy_bird/application.fam +++ b/applications/external/flappy_bird/application.fam @@ -1,5 +1,5 @@ App( - appid="FlappyBird", + appid="flappy_bird", name="Flappy Bird", apptype=FlipperAppType.EXTERNAL, entry_point="flappy_game_app", diff --git a/applications/external/flappy_bird/flappy_bird.c b/applications/external/flappy_bird/flappy_bird.c index b264d1b70f..709219bb5d 100644 --- a/applications/external/flappy_bird/flappy_bird.c +++ b/applications/external/flappy_bird/flappy_bird.c @@ -1,6 +1,6 @@ #include -#include +#include #include #include #include diff --git a/applications/external/flipfrid/application.fam b/applications/external/flipfrid/application.fam index 343d4f62d3..1ddd6ba50b 100644 --- a/applications/external/flipfrid/application.fam +++ b/applications/external/flipfrid/application.fam @@ -1,5 +1,5 @@ App( - appid="RFID_Fuzzer", + appid="rfid_fuzzer", name="RFID Fuzzer", apptype=FlipperAppType.EXTERNAL, entry_point="flipfrid_start", diff --git a/applications/external/flipfrid/flipfrid.h b/applications/external/flipfrid/flipfrid.h index 0ee8aa3209..b95f9f75f1 100644 --- a/applications/external/flipfrid/flipfrid.h +++ b/applications/external/flipfrid/flipfrid.h @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include diff --git a/applications/external/flipper_i2ctools/application.fam b/applications/external/flipper_i2ctools/application.fam index 5a00aa045f..a6bab122a6 100644 --- a/applications/external/flipper_i2ctools/application.fam +++ b/applications/external/flipper_i2ctools/application.fam @@ -1,5 +1,5 @@ App( - appid="i2cTools", + appid="i2c_tools", name="[GPIO] i2c Tools", apptype=FlipperAppType.EXTERNAL, entry_point="i2ctools_app", diff --git a/applications/external/flipper_i2ctools/views/main_view.h b/applications/external/flipper_i2ctools/views/main_view.h index 050e411304..f0ce5e8adf 100644 --- a/applications/external/flipper_i2ctools/views/main_view.h +++ b/applications/external/flipper_i2ctools/views/main_view.h @@ -1,7 +1,7 @@ #include #include #include -#include +#include #define APP_NAME "I2C Tools" #define SCAN_MENU_TEXT "Scan" diff --git a/applications/external/flipper_i2ctools/views/scanner_view.h b/applications/external/flipper_i2ctools/views/scanner_view.h index 02bc8fb1c8..52f30a7bf3 100644 --- a/applications/external/flipper_i2ctools/views/scanner_view.h +++ b/applications/external/flipper_i2ctools/views/scanner_view.h @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include "../i2cscanner.h" #define SCAN_TEXT "SCAN" diff --git a/applications/external/flipper_i2ctools/views/sender_view.h b/applications/external/flipper_i2ctools/views/sender_view.h index 5f48081dda..c4fdd98a28 100644 --- a/applications/external/flipper_i2ctools/views/sender_view.h +++ b/applications/external/flipper_i2ctools/views/sender_view.h @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include "../i2csender.h" #define SEND_TEXT "SEND" diff --git a/applications/external/flipper_i2ctools/views/sniffer_view.h b/applications/external/flipper_i2ctools/views/sniffer_view.h index 80c92f7fc6..8f2140bbac 100644 --- a/applications/external/flipper_i2ctools/views/sniffer_view.h +++ b/applications/external/flipper_i2ctools/views/sniffer_view.h @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include "../i2csniffer.h" #define SNIFF_TEXT "SNIFF" diff --git a/applications/external/ibtn_fuzzer/application.fam b/applications/external/ibtn_fuzzer/application.fam index 00c244c41a..87c02a9136 100644 --- a/applications/external/ibtn_fuzzer/application.fam +++ b/applications/external/ibtn_fuzzer/application.fam @@ -1,5 +1,5 @@ App( - appid="iBtn_Fuzzer", + appid="ibtn_fuzzer", name="iButton Fuzzer", apptype=FlipperAppType.EXTERNAL, entry_point="ibtnfuzzer_start", diff --git a/applications/external/ibtn_fuzzer/ibtnfuzzer.h b/applications/external/ibtn_fuzzer/ibtnfuzzer.h index 3a3a1d21f6..7a9e2b537a 100644 --- a/applications/external/ibtn_fuzzer/ibtnfuzzer.h +++ b/applications/external/ibtn_fuzzer/ibtnfuzzer.h @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include diff --git a/applications/external/metronome/application.fam b/applications/external/metronome/application.fam index 67411c5f2a..8acd4b3b09 100644 --- a/applications/external/metronome/application.fam +++ b/applications/external/metronome/application.fam @@ -1,5 +1,5 @@ App( - appid="Metronome", + appid="metronome", name="Metronome", apptype=FlipperAppType.EXTERNAL, entry_point="metronome_app", diff --git a/applications/external/metronome/gui_extensions.c b/applications/external/metronome/gui_extensions.c index 458eb137be..f33c5f651f 100644 --- a/applications/external/metronome/gui_extensions.c +++ b/applications/external/metronome/gui_extensions.c @@ -1,6 +1,6 @@ #include #include -#include +#include //lib can only do bottom left/right void elements_button_top_left(Canvas* canvas, const char* str) { diff --git a/applications/external/mifare_nested/application.fam b/applications/external/mifare_nested/application.fam index 236abf6d17..5b2c0b4664 100644 --- a/applications/external/mifare_nested/application.fam +++ b/applications/external/mifare_nested/application.fam @@ -21,5 +21,5 @@ App( fap_author="AloneLiberty", fap_description="Recover Mifare Classic keys", fap_weburl="https://github.com/AloneLiberty/FlipperNested", - fap_version=(1, 4) + fap_version="1.5.0" ) diff --git a/applications/external/mifare_nested/lib/nested/nested.c b/applications/external/mifare_nested/lib/nested/nested.c index 4d04b99d54..b289b74fbc 100644 --- a/applications/external/mifare_nested/lib/nested/nested.c +++ b/applications/external/mifare_nested/lib/nested/nested.c @@ -5,28 +5,6 @@ #include "../../lib/crypto1/crypto1.h" #define TAG "Nested" -void nfc_util_num2bytes(uint64_t src, uint8_t len, uint8_t* dest) { - furi_assert(dest); - furi_assert(len <= 8); - - while(len--) { - dest[len] = (uint8_t)src; - src >>= 8; - } -} - -uint64_t nfc_util_bytes2num(const uint8_t* src, uint8_t len) { - furi_assert(src); - furi_assert(len <= 8); - - uint64_t res = 0; - while(len--) { - res = (res << 8) | (*src); - src++; - } - return res; -} - uint16_t nfca_get_crc16(uint8_t* buff, uint16_t len) { uint16_t crc = 0x6363; // NFCA_CRC_INIT uint8_t byte = 0; diff --git a/applications/external/mifare_nested/mifare_nested.c b/applications/external/mifare_nested/mifare_nested.c index 237eaef9a6..bb6947a91a 100644 --- a/applications/external/mifare_nested/mifare_nested.c +++ b/applications/external/mifare_nested/mifare_nested.c @@ -396,6 +396,7 @@ void mifare_nested_blink_stop(MifareNested* mifare_nested) { int32_t mifare_nested_app(void* p) { UNUSED(p); + MifareNested* mifare_nested = mifare_nested_alloc(); scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneStart); diff --git a/applications/external/mifare_nested/mifare_nested_i.h b/applications/external/mifare_nested/mifare_nested_i.h index 59aab5825d..69907dcd04 100644 --- a/applications/external/mifare_nested/mifare_nested_i.h +++ b/applications/external/mifare_nested/mifare_nested_i.h @@ -21,7 +21,7 @@ #include #include "mifare_nested_icons.h" -#define NESTED_VERSION_APP "1.4.6" +#define NESTED_VERSION_APP "1.5.0" #define NESTED_GITHUB_LINK "https://github.com/AloneLiberty/FlipperNested" #define NESTED_RECOVER_KEYS_GITHUB_LINK "https://github.com/AloneLiberty/FlipperNestedRecovery" #define NESTED_NONCE_FORMAT_VERSION "3" @@ -99,6 +99,7 @@ struct MifareNested { NestedState* nested_state; CheckKeysState* keys_state; + SaveNoncesResult_t* save_state; MifareNestedWorkerState collecting_type; diff --git a/applications/external/mifare_nested/mifare_nested_worker.c b/applications/external/mifare_nested/mifare_nested_worker.c index 56d2f24271..7598d28c9f 100644 --- a/applications/external/mifare_nested/mifare_nested_worker.c +++ b/applications/external/mifare_nested/mifare_nested_worker.c @@ -296,7 +296,7 @@ uint32_t mifare_nested_worker_predict_delay( } // This part of attack is my attempt to implement it on Flipper. - // Proxmark can do this in 2 fucking steps, but idk how. + // Check README.md for more info // First, we find RPNG rounds per 1000 us for(uint32_t rtr = 0; rtr < 25; rtr++) { @@ -448,7 +448,7 @@ uint32_t mifare_nested_worker_predict_delay( return 1; } -void mifare_nested_worker_write_nonces( +SaveNoncesResult_t* mifare_nested_worker_write_nonces( FuriHalNfcDevData* data, Storage* storage, NonceList_t* nonces, @@ -459,6 +459,11 @@ void mifare_nested_worker_write_nonces( uint32_t distance) { FuriString* path = furi_string_alloc(); Stream* file_stream = file_stream_alloc(storage); + SaveNoncesResult_t* result = malloc(sizeof(SaveNoncesResult_t)); + result->saved = 0; + result->invalid = 0; + result->skipped = 0; + mifare_nested_worker_get_nonces_file_path(data, path); file_stream_open(file_stream, furi_string_get_cstr(path), FSAM_READ_WRITE, FSOM_CREATE_ALWAYS); @@ -472,23 +477,26 @@ void mifare_nested_worker_write_nonces( for(uint8_t tries = 0; tries < tries_count; tries++) { for(uint8_t sector = 0; sector < sector_count; sector++) { for(uint8_t key_type = 0; key_type < 2; key_type++) { - if(nonces->nonces[sector][key_type][tries]->collected && - !nonces->nonces[sector][key_type][tries]->skipped) { + if(nonces->nonces[sector][key_type][tries]->invalid) { + result->invalid++; + } else if(nonces->nonces[sector][key_type][tries]->skipped) { + result->skipped++; + } else if(nonces->nonces[sector][key_type][tries]->collected) { if(nonces->nonces[sector][key_type][tries]->hardnested) { - FuriString* path = furi_string_alloc(); + FuriString* hardnested_path = furi_string_alloc(); mifare_nested_worker_get_hardnested_file_path( - data, path, sector, key_type); + data, hardnested_path, sector, key_type); FuriString* str = furi_string_alloc_printf( "HardNested: Key %c cuid 0x%08lx file %s sec %u\n", !key_type ? 'A' : 'B', nonces->cuid, - furi_string_get_cstr(path), + furi_string_get_cstr(hardnested_path), sector); stream_write_string(file_stream, str); - furi_string_free(path); + furi_string_free(hardnested_path); furi_string_free(str); } else { FuriString* str = furi_string_alloc_printf( @@ -515,6 +523,8 @@ void mifare_nested_worker_write_nonces( stream_write_string(file_stream, str); furi_string_free(str); } + + result->saved++; } } } @@ -529,10 +539,20 @@ void mifare_nested_worker_write_nonces( } free_nonces(nonces, sector_count, free_tries_count); - furi_string_free(path); file_stream_close(file_stream); free(file_stream); + + if(!result->saved) { + FURI_LOG_E(TAG, "No nonces collected, removing file..."); + if(!storage_simply_remove(storage, furi_string_get_cstr(path))) { + FURI_LOG_E(TAG, "Failed to remove .nonces file"); + } + } + + furi_string_free(path); furi_record_close(RECORD_STORAGE); + + return result; } bool mifare_nested_worker_check_initial_keys( @@ -759,7 +779,7 @@ void mifare_nested_worker_collect_nonces_static(MifareNestedWorker* mifare_neste mifare_nested_worker_get_block_by_sector(sector), key_type); - info->skipped = true; + info->invalid = true; nonces.nonces[sector][key_type][0] = info; @@ -818,12 +838,20 @@ void mifare_nested_worker_collect_nonces_static(MifareNestedWorker* mifare_neste break; } - mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0); + SaveNoncesResult_t* result = + mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0); free(mf_data); - mifare_nested_worker->callback( - MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + if(result->saved) { + mifare_nested_worker->callback( + MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + } else { + mifare_nested_worker->context->save_state = result; + + mifare_nested_worker->callback( + MifareNestedWorkerEventNoNoncesCollected, mifare_nested_worker->context); + } nfc_deactivate(); } @@ -930,7 +958,7 @@ void mifare_nested_worker_collect_nonces_hard(MifareNestedWorker* mifare_nested_ mifare_nested_worker_get_block_by_sector(sector), key_type); - info->skipped = true; + info->invalid = true; nonces.nonces[sector][key_type][0] = info; mifare_nested_worker->context->nonces = &nonces; @@ -1059,12 +1087,20 @@ void mifare_nested_worker_collect_nonces_hard(MifareNestedWorker* mifare_nested_ } } - mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0); + SaveNoncesResult_t* result = + mifare_nested_worker_write_nonces(&data, storage, &nonces, 1, 1, sector_count, 0, 0); free(mf_data); - mifare_nested_worker->callback( - MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + if(result->saved) { + mifare_nested_worker->callback( + MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + } else { + mifare_nested_worker->context->save_state = result; + + mifare_nested_worker->callback( + MifareNestedWorkerEventNoNoncesCollected, mifare_nested_worker->context); + } nfc_deactivate(); } @@ -1368,13 +1404,20 @@ void mifare_nested_worker_collect_nonces(MifareNestedWorker* mifare_nested_worke break; } - mifare_nested_worker_write_nonces( + SaveNoncesResult_t* result = mifare_nested_worker_write_nonces( &data, storage, &nonces, tries_count, 3, sector_count, delay, distance); free(mf_data); - mifare_nested_worker->callback( - MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + if(result->saved) { + mifare_nested_worker->callback( + MifareNestedWorkerEventNoncesCollected, mifare_nested_worker->context); + } else { + mifare_nested_worker->context->save_state = result; + + mifare_nested_worker->callback( + MifareNestedWorkerEventNoNoncesCollected, mifare_nested_worker->context); + } nfc_deactivate(); } diff --git a/applications/external/mifare_nested/mifare_nested_worker.h b/applications/external/mifare_nested/mifare_nested_worker.h index 5616206768..2421b35ebb 100644 --- a/applications/external/mifare_nested/mifare_nested_worker.h +++ b/applications/external/mifare_nested/mifare_nested_worker.h @@ -22,6 +22,7 @@ typedef enum { MifareNestedWorkerEventReserved = 1000, MifareNestedWorkerEventNoTagDetected, + MifareNestedWorkerEventNoNoncesCollected, MifareNestedWorkerEventNoncesCollected, MifareNestedWorkerEventCollecting, @@ -64,8 +65,9 @@ typedef struct { uint32_t target_nt[2]; uint32_t target_ks[2]; uint8_t parity[2][4]; - bool collected; bool skipped; + bool invalid; + bool collected; bool hardnested; } Nonces; @@ -87,3 +89,9 @@ typedef struct { uint32_t sector_keys; bool tag_lost; } KeyInfo_t; + +typedef struct { + uint32_t saved; + uint32_t invalid; + uint32_t skipped; +} SaveNoncesResult_t; \ No newline at end of file diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_about.c b/applications/external/mifare_nested/scenes/mifare_nested_scene_about.c index cb07f81a3b..9aa46f6985 100644 --- a/applications/external/mifare_nested/scenes/mifare_nested_scene_about.c +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_about.c @@ -51,7 +51,7 @@ void mifare_nested_scene_about_on_enter(void* context) { 14, AlignCenter, AlignBottom, - "\e#\e! Flipper (Mifare) Nested \e!\n", + "\e#\e! Flipper Nested \e!\n", false); widget_add_text_scroll_element( mifare_nested->widget, 0, 16, 128, 50, furi_string_get_cstr(temp_str)); diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_check.c b/applications/external/mifare_nested/scenes/mifare_nested_scene_check.c index 4eb344703e..45837ff928 100644 --- a/applications/external/mifare_nested/scenes/mifare_nested_scene_check.c +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_check.c @@ -56,14 +56,7 @@ bool mifare_nested_scene_check_on_event(void* context, SceneManagerEvent event) bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - if(event.event == MifareNestedWorkerEventNoncesCollected) { - scene_manager_next_scene( - mifare_nested->scene_manager, MifareNestedSceneNoncesCollected); - consumed = true; - } else if(event.event == MifareNestedWorkerEventAttackFailed) { - scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneFailed); - consumed = true; - } else if(event.event == MifareNestedWorkerEventCollecting) { + if(event.event == MifareNestedWorkerEventCollecting) { if(mifare_nested->run == NestedRunAttack) { if(mifare_nested->settings->only_hardnested) { FURI_LOG_I("MifareNested", "Using Hard Nested because user settings"); diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_check_keys.c b/applications/external/mifare_nested/scenes/mifare_nested_scene_check_keys.c index f0071b7aa6..b06953eeb2 100644 --- a/applications/external/mifare_nested/scenes/mifare_nested_scene_check_keys.c +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_check_keys.c @@ -84,13 +84,6 @@ bool mifare_nested_scene_check_keys_on_event(void* context, SceneManagerEvent ev if(event.event == GuiButtonTypeCenter) { scene_manager_search_and_switch_to_previous_scene(mifare_nested->scene_manager, 0); consumed = true; - } else if(event.event == MifareNestedWorkerEventNoncesCollected) { - scene_manager_next_scene( - mifare_nested->scene_manager, MifareNestedSceneNoncesCollected); - consumed = true; - } else if(event.event == MifareNestedWorkerEventNeedKey) { - scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneNoKeys); - consumed = true; } else if(event.event == MifareNestedWorkerEventKeysFound) { scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneAddedKeys); consumed = true; diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_collecting.c b/applications/external/mifare_nested/scenes/mifare_nested_scene_collecting.c index 05c96d97df..281210107b 100644 --- a/applications/external/mifare_nested/scenes/mifare_nested_scene_collecting.c +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_collecting.c @@ -120,6 +120,10 @@ bool mifare_nested_scene_collecting_on_event(void* context, SceneManagerEvent ev scene_manager_next_scene( mifare_nested->scene_manager, MifareNestedSceneNoncesCollected); consumed = true; + } else if(event.event == MifareNestedWorkerEventNoNoncesCollected) { + scene_manager_next_scene( + mifare_nested->scene_manager, MifareNestedSceneNoNoncesCollected); + consumed = true; } else if(event.event == MifareNestedWorkerEventAttackFailed) { scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneFailed); consumed = true; diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_config.h b/applications/external/mifare_nested/scenes/mifare_nested_scene_config.h index 14cf52c4ee..648f0bd739 100644 --- a/applications/external/mifare_nested/scenes/mifare_nested_scene_config.h +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_config.h @@ -10,4 +10,5 @@ ADD_SCENE(mifare_nested, about, About) ADD_SCENE(mifare_nested, static_encrypted_nonce, StaticEncryptedNonce) ADD_SCENE(mifare_nested, need_key_recovery, NeedKeyRecovery) ADD_SCENE(mifare_nested, need_collection, NeedCollection) -ADD_SCENE(mifare_nested, settings, Settings) \ No newline at end of file +ADD_SCENE(mifare_nested, settings, Settings) +ADD_SCENE(mifare_nested, no_nonces_collected, NoNoncesCollected) \ No newline at end of file diff --git a/applications/external/mifare_nested/scenes/mifare_nested_scene_no_nonces_collected.c b/applications/external/mifare_nested/scenes/mifare_nested_scene_no_nonces_collected.c new file mode 100644 index 0000000000..74e2459e8c --- /dev/null +++ b/applications/external/mifare_nested/scenes/mifare_nested_scene_no_nonces_collected.c @@ -0,0 +1,94 @@ +#include "../mifare_nested_i.h" + +void mifare_nested_scene_no_nonces_collected_widget_callback( + GuiButtonType result, + InputType type, + void* context) { + MifareNested* mifare_nested = context; + if(type == InputTypeShort) { + view_dispatcher_send_custom_event(mifare_nested->view_dispatcher, result); + } +} + +void mifare_nested_scene_no_nonces_collected_on_enter(void* context) { + MifareNested* mifare_nested = context; + Widget* widget = mifare_nested->widget; + SaveNoncesResult_t* save_state = mifare_nested->save_state; + + notification_message(mifare_nested->notifications, &sequence_error); + + widget_add_icon_element(widget, 73, 12, &I_DolphinCry); + widget_add_string_element( + widget, 0, 0, AlignLeft, AlignTop, FontPrimary, "No nonces collected"); + + uint32_t index = 12; + + if(save_state->skipped) { + char append_skipped[8] = {'s', 'e', 'c', 't', 'o', 'r', ' ', '\0'}; + if(save_state->skipped != 1) { + append_skipped[6] = 's'; + } + + char draw_str[32] = {}; + snprintf( + draw_str, sizeof(draw_str), "Skipped: %lu %s", save_state->skipped, append_skipped); + + widget_add_string_element(widget, 0, index, AlignLeft, AlignTop, FontSecondary, draw_str); + + widget_add_string_element( + widget, 0, index + 10, AlignLeft, AlignTop, FontSecondary, "(already has keys)"); + + index += 20; + } + + if(save_state->invalid) { + char append_invalid[8] = {'s', 'e', 'c', 't', 'o', 'r', ' ', '\0'}; + if(save_state->invalid != 1) { + append_invalid[6] = 's'; + } + + char draw_str[32] = {}; + snprintf( + draw_str, sizeof(draw_str), "Invalid: %lu %s", save_state->invalid, append_invalid); + + widget_add_string_element(widget, 0, index, AlignLeft, AlignTop, FontSecondary, draw_str); + + widget_add_string_element( + widget, 0, index + 10, AlignLeft, AlignTop, FontSecondary, "(can't auth)"); + } + + free(save_state); + + widget_add_button_element( + widget, + GuiButtonTypeLeft, + "Back", + mifare_nested_scene_no_nonces_collected_widget_callback, + mifare_nested); + + // Setup and start worker + view_dispatcher_switch_to_view(mifare_nested->view_dispatcher, MifareNestedViewWidget); +} + +bool mifare_nested_scene_no_nonces_collected_on_event(void* context, SceneManagerEvent event) { + MifareNested* mifare_nested = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == GuiButtonTypeCenter || event.event == GuiButtonTypeLeft) { + scene_manager_search_and_switch_to_previous_scene(mifare_nested->scene_manager, 0); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + scene_manager_search_and_switch_to_previous_scene(mifare_nested->scene_manager, 0); + consumed = true; + } + + return consumed; +} + +void mifare_nested_scene_no_nonces_collected_on_exit(void* context) { + MifareNested* mifare_nested = context; + + widget_reset(mifare_nested->widget); +} diff --git a/applications/external/minesweeper/application.fam b/applications/external/minesweeper/application.fam index c0211282cc..0a40662799 100644 --- a/applications/external/minesweeper/application.fam +++ b/applications/external/minesweeper/application.fam @@ -1,5 +1,5 @@ App( - appid="Minesweeper", + appid="minesweeper", name="Minesweeper", apptype=FlipperAppType.EXTERNAL, entry_point="minesweeper_app", diff --git a/applications/external/mousejacker/application.fam b/applications/external/mousejacker/application.fam index f65b06cc21..3b8ae7104f 100644 --- a/applications/external/mousejacker/application.fam +++ b/applications/external/mousejacker/application.fam @@ -1,5 +1,5 @@ App( - appid="NRF24_Mouse_Jacker", + appid="nrf24_mouse_jacker", name="[NRF24] Mouse Jacker", apptype=FlipperAppType.EXTERNAL, entry_point="mousejacker_app", diff --git a/applications/external/mousejacker/mousejacker.c b/applications/external/mousejacker/mousejacker.c index 606e092ca4..ce93aa996c 100644 --- a/applications/external/mousejacker/mousejacker.c +++ b/applications/external/mousejacker/mousejacker.c @@ -10,7 +10,7 @@ #include #include #include "mousejacker_ducky.h" -#include +#include #define TAG "mousejacker" #define LOGITECH_MAX_CHANNEL 85 diff --git a/applications/external/multi_converter/application.fam b/applications/external/multi_converter/application.fam index 9f49f18adf..8d5e7bb440 100644 --- a/applications/external/multi_converter/application.fam +++ b/applications/external/multi_converter/application.fam @@ -1,5 +1,5 @@ App( - appid="Multi_Converter", + appid="multi_converter", name="Multi Converter", apptype=FlipperAppType.EXTERNAL, entry_point="multi_converter_app", diff --git a/applications/external/music_player/application.fam b/applications/external/music_player/application.fam index e0254250e3..3414c0a482 100644 --- a/applications/external/music_player/application.fam +++ b/applications/external/music_player/application.fam @@ -1,5 +1,5 @@ App( - appid="Music_Player", + appid="music_player", name="Music Player", apptype=FlipperAppType.EXTERNAL, entry_point="music_player_app", diff --git a/applications/external/music_player/music_player.c b/applications/external/music_player/music_player.c index 71840ff92c..28127a575d 100644 --- a/applications/external/music_player/music_player.c +++ b/applications/external/music_player/music_player.c @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include diff --git a/applications/external/nfc_magic/lib/magic/classic_gen1.c b/applications/external/nfc_magic/lib/magic/classic_gen1.c index ebd2b08057..8d87d63161 100644 --- a/applications/external/nfc_magic/lib/magic/classic_gen1.c +++ b/applications/external/nfc_magic/lib/magic/classic_gen1.c @@ -5,7 +5,6 @@ #define TAG "Magic" #define MAGIC_CMD_WUPA (0x40) -#define MAGIC_CMD_WIPE (0x41) #define MAGIC_CMD_ACCESS (0x43) #define MAGIC_MIFARE_READ_CMD (0x30) @@ -144,32 +143,3 @@ bool magic_gen1_write_blk(uint8_t block_num, MfClassicBlock* data) { return write_success; } - -bool magic_gen1_wipe() { - bool wipe_success = false; - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - tx_data[0] = MAGIC_CMD_WIPE; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_TX_MANUAL | FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(2000)); - - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - - wipe_success = true; - } while(false); - - return wipe_success; -} \ No newline at end of file diff --git a/applications/external/nfc_magic/lib/magic/classic_gen1.h b/applications/external/nfc_magic/lib/magic/classic_gen1.h index 6d4ff6dcd9..98de123023 100644 --- a/applications/external/nfc_magic/lib/magic/classic_gen1.h +++ b/applications/external/nfc_magic/lib/magic/classic_gen1.h @@ -9,5 +9,3 @@ bool magic_gen1_read_block(uint8_t block_num, MfClassicBlock* data); bool magic_gen1_data_access_cmd(); bool magic_gen1_write_blk(uint8_t block_num, MfClassicBlock* data); - -bool magic_gen1_wipe(); \ No newline at end of file diff --git a/applications/external/nfc_magic/lib/magic/magic.c b/applications/external/nfc_magic/lib/magic/magic.c deleted file mode 100644 index ebd2b08057..0000000000 --- a/applications/external/nfc_magic/lib/magic/magic.c +++ /dev/null @@ -1,175 +0,0 @@ -#include "classic_gen1.h" - -#include - -#define TAG "Magic" - -#define MAGIC_CMD_WUPA (0x40) -#define MAGIC_CMD_WIPE (0x41) -#define MAGIC_CMD_ACCESS (0x43) - -#define MAGIC_MIFARE_READ_CMD (0x30) -#define MAGIC_MIFARE_WRITE_CMD (0xA0) - -#define MAGIC_ACK (0x0A) - -#define MAGIC_BUFFER_SIZE (32) - -bool magic_gen1_wupa() { - bool magic_activated = false; - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - // Start communication - tx_data[0] = MAGIC_CMD_WUPA; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 7, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_TX_MANUAL | FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(20)); - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - magic_activated = true; - } while(false); - - return magic_activated; -} - -bool magic_gen1_data_access_cmd() { - bool write_cmd_success = false; - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - tx_data[0] = MAGIC_CMD_ACCESS; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_TX_MANUAL | FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(20)); - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - - write_cmd_success = true; - } while(false); - - return write_cmd_success; -} - -bool magic_gen1_read_block(uint8_t block_num, MfClassicBlock* data) { - furi_assert(data); - - bool read_success = false; - - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - tx_data[0] = MAGIC_MIFARE_READ_CMD; - tx_data[1] = block_num; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 2 * 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON, - furi_hal_nfc_ll_ms2fc(20)); - - if(ret != FuriHalNfcReturnOk) break; - if(rx_len != 16 * 8) break; - memcpy(data->value, rx_data, sizeof(data->value)); - read_success = true; - } while(false); - - return read_success; -} - -bool magic_gen1_write_blk(uint8_t block_num, MfClassicBlock* data) { - furi_assert(data); - - bool write_success = false; - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - tx_data[0] = MAGIC_MIFARE_WRITE_CMD; - tx_data[1] = block_num; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 2 * 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(20)); - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - - memcpy(tx_data, data->value, sizeof(data->value)); - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 16 * 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(20)); - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - - write_success = true; - } while(false); - - return write_success; -} - -bool magic_gen1_wipe() { - bool wipe_success = false; - uint8_t tx_data[MAGIC_BUFFER_SIZE] = {}; - uint8_t rx_data[MAGIC_BUFFER_SIZE] = {}; - uint16_t rx_len = 0; - FuriHalNfcReturn ret = 0; - - do { - tx_data[0] = MAGIC_CMD_WIPE; - ret = furi_hal_nfc_ll_txrx_bits( - tx_data, - 8, - rx_data, - sizeof(rx_data), - &rx_len, - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_TX_MANUAL | FURI_HAL_NFC_LL_TXRX_FLAGS_AGC_ON | - FURI_HAL_NFC_LL_TXRX_FLAGS_CRC_RX_KEEP, - furi_hal_nfc_ll_ms2fc(2000)); - - if(ret != FuriHalNfcReturnIncompleteByte) break; - if(rx_len != 4) break; - if(rx_data[0] != MAGIC_ACK) break; - - wipe_success = true; - } while(false); - - return wipe_success; -} \ No newline at end of file diff --git a/applications/external/nfc_magic/nfc_magic_worker.c b/applications/external/nfc_magic/nfc_magic_worker.c index cc13476c4c..c55f4593af 100644 --- a/applications/external/nfc_magic/nfc_magic_worker.c +++ b/applications/external/nfc_magic/nfc_magic_worker.c @@ -95,51 +95,49 @@ void nfc_magic_worker_write(NfcMagicWorker* nfc_magic_worker) { while(nfc_magic_worker->state == NfcMagicWorkerStateWrite) { do { - if(furi_hal_nfc_detect(&nfc_data, 200)) { - if(nfc_data.cuid != magic_dev->cuid) break; - if(!card_found_notified) { - nfc_magic_worker->callback( - NfcMagicWorkerEventCardDetected, nfc_magic_worker->context); - card_found_notified = true; - } - furi_hal_nfc_sleep(); - - magic_activate(); - if(magic_dev->type == MagicTypeClassicGen1) { - if(dev_protocol != NfcDeviceProtocolMifareClassic) break; - MfClassicData* mfc_data = &dev_data->mf_classic_data; - - if(mfc_data->type != MfClassicType1k) break; + if(magic_dev->type == MagicTypeClassicGen1) { + if(furi_hal_nfc_detect(&nfc_data, 200)) { + magic_deactivate(); + magic_activate(); if(!magic_gen1_wupa()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E(TAG, "No card response to WUPA (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); done = true; break; } + magic_deactivate(); + } + magic_activate(); + if(magic_gen1_wupa()) { if(!magic_gen1_data_access_cmd()) { - FURI_LOG_E(TAG, "Not Magic card"); + FURI_LOG_E( + TAG, "No card response to data access command (not a magic card)"); nfc_magic_worker->callback( NfcMagicWorkerEventWrongCard, nfc_magic_worker->context); done = true; break; } + + MfClassicData* mfc_data = &dev_data->mf_classic_data; for(size_t i = 0; i < 64; i++) { FURI_LOG_D(TAG, "Writing block %d", i); if(!magic_gen1_write_blk(i, &mfc_data->block[i])) { FURI_LOG_E(TAG, "Failed to write %d block", i); + done = true; nfc_magic_worker->callback( NfcMagicWorkerEventFail, nfc_magic_worker->context); - done = true; break; } } + done = true; nfc_magic_worker->callback( NfcMagicWorkerEventSuccess, nfc_magic_worker->context); - done = true; break; - } else if(magic_dev->type == MagicTypeGen4) { + } + } else if(magic_dev->type == MagicTypeGen4) { + if(furi_hal_nfc_detect(&nfc_data, 200)) { uint8_t gen4_config[28]; uint32_t password = magic_dev->password; @@ -199,6 +197,7 @@ void nfc_magic_worker_write(NfcMagicWorker* nfc_magic_worker) { gen4_config[25] = dev_data->nfc_data.atqa[1]; gen4_config[26] = dev_data->nfc_data.sak; + furi_hal_nfc_sleep(); furi_hal_nfc_activate_nfca(200, &cuid); if(!magic_gen4_set_cfg(password, gen4_config, sizeof(gen4_config), false)) { nfc_magic_worker->callback( @@ -397,6 +396,11 @@ void nfc_magic_worker_wipe(NfcMagicWorker* nfc_magic_worker) { MfClassicBlock block; memset(&block, 0, sizeof(MfClassicBlock)); + MfClassicBlock empty_block; + memset(&empty_block, 0, sizeof(MfClassicBlock)); + MfClassicBlock trailer_block; + memset(&trailer_block, 0xff, sizeof(MfClassicBlock)); + block.value[0] = 0x01; block.value[1] = 0x02; block.value[2] = 0x03; @@ -405,6 +409,10 @@ void nfc_magic_worker_wipe(NfcMagicWorker* nfc_magic_worker) { block.value[5] = 0x08; block.value[6] = 0x04; + trailer_block.value[7] = 0x07; + trailer_block.value[8] = 0x80; + trailer_block.value[9] = 0x69; + while(nfc_magic_worker->state == NfcMagicWorkerStateWipe) { do { magic_deactivate(); @@ -418,10 +426,26 @@ void nfc_magic_worker_wipe(NfcMagicWorker* nfc_magic_worker) { card_found_notified = true; } - if(!magic_gen1_wipe()) break; if(!magic_gen1_data_access_cmd()) break; if(!magic_gen1_write_blk(0, &block)) break; + for(size_t i = 1; i < 64; i++) { + FURI_LOG_D(TAG, "Wiping block %d", i); + bool success = false; + if((i | 0x03) == i) { + success = magic_gen1_write_blk(i, &trailer_block); + } else { + success = magic_gen1_write_blk(i, &empty_block); + } + + if(!success) { + FURI_LOG_E(TAG, "Failed to write %d block", i); + nfc_magic_worker->callback( + NfcMagicWorkerEventFail, nfc_magic_worker->context); + break; + } + } + card_wiped = true; nfc_magic_worker->callback(NfcMagicWorkerEventSuccess, nfc_magic_worker->context); } else if(magic_dev->type == MagicTypeGen4) { diff --git a/applications/external/nrfsniff/application.fam b/applications/external/nrfsniff/application.fam index c99b9bf22f..1ec1718c11 100644 --- a/applications/external/nrfsniff/application.fam +++ b/applications/external/nrfsniff/application.fam @@ -1,5 +1,5 @@ App( - appid="NRF24_Sniffer", + appid="nrf24_sniffer", name="[NRF24] Sniffer", apptype=FlipperAppType.EXTERNAL, entry_point="nrfsniff_app", diff --git a/applications/external/picopass/application.fam b/applications/external/picopass/application.fam index 34c3f785c7..94d328a094 100644 --- a/applications/external/picopass/application.fam +++ b/applications/external/picopass/application.fam @@ -1,5 +1,5 @@ App( - appid="Picopass", + appid="picopass", name="[iClass] PicoPass", apptype=FlipperAppType.EXTERNAL, targets=["f7"], diff --git a/applications/external/picopass/picopass_device.c b/applications/external/picopass/picopass_device.c index b5ba8ba78b..53778cfb32 100644 --- a/applications/external/picopass/picopass_device.c +++ b/applications/external/picopass/picopass_device.c @@ -2,7 +2,7 @@ #include #include -#include +#include #define TAG "PicopassDevice" diff --git a/applications/external/picopass/picopass_i.h b/applications/external/picopass/picopass_i.h index 23da3056e7..9147cfa0cf 100644 --- a/applications/external/picopass/picopass_i.h +++ b/applications/external/picopass/picopass_i.h @@ -25,7 +25,7 @@ #include #include -#include +#include #define PICOPASS_TEXT_STORE_SIZE 128 diff --git a/applications/external/playlist/application.fam b/applications/external/playlist/application.fam index e137cdb399..6f74f2b55a 100644 --- a/applications/external/playlist/application.fam +++ b/applications/external/playlist/application.fam @@ -1,5 +1,5 @@ App( - appid="SubGHz_Playlist", + appid="subghz_playlist", name="Sub-GHz Playlist", apptype=FlipperAppType.EXTERNAL, entry_point="playlist_app", diff --git a/applications/external/playlist/playlist.c b/applications/external/playlist/playlist.c index 1ecfda02ad..5bf376ccd9 100644 --- a/applications/external/playlist/playlist.c +++ b/applications/external/playlist/playlist.c @@ -6,7 +6,7 @@ #include #include -#include +#include #include #include diff --git a/applications/external/sentry_safe/application.fam b/applications/external/sentry_safe/application.fam index 8958dc8bcb..b9254c58db 100644 --- a/applications/external/sentry_safe/application.fam +++ b/applications/external/sentry_safe/application.fam @@ -1,5 +1,5 @@ App( - appid="GPIO_Sentry_Safe", + appid="gpio_sentry_safe", name="[GPIO] Sentry Safe", apptype=FlipperAppType.EXTERNAL, entry_point="sentry_safe_app", diff --git a/applications/external/signal_generator/application.fam b/applications/external/signal_generator/application.fam index bcf7d20b65..094e784cc8 100644 --- a/applications/external/signal_generator/application.fam +++ b/applications/external/signal_generator/application.fam @@ -1,5 +1,5 @@ App( - appid="Signal_Generator", + appid="signal_generator", name="Signal Generator", apptype=FlipperAppType.EXTERNAL, entry_point="signal_gen_app", diff --git a/applications/external/signal_generator/views/signal_gen_pwm.c b/applications/external/signal_generator/views/signal_gen_pwm.c index 928be79165..d625ed5a9e 100644 --- a/applications/external/signal_generator/views/signal_gen_pwm.c +++ b/applications/external/signal_generator/views/signal_gen_pwm.c @@ -1,7 +1,7 @@ #include "../signal_gen_app_i.h" #include #include -#include +#include typedef enum { LineIndexChannel, diff --git a/applications/external/snake_game/application.fam b/applications/external/snake_game/application.fam index 4c15c309b2..b05426e9d0 100644 --- a/applications/external/snake_game/application.fam +++ b/applications/external/snake_game/application.fam @@ -1,5 +1,5 @@ App( - appid="Snake", + appid="snake", name="Snake Game", apptype=FlipperAppType.EXTERNAL, entry_point="snake_game_app", diff --git a/applications/external/solitaire/application.fam b/applications/external/solitaire/application.fam index 44152a0383..7b5910c491 100644 --- a/applications/external/solitaire/application.fam +++ b/applications/external/solitaire/application.fam @@ -1,5 +1,5 @@ App( - appid="Solitaire", + appid="solitaire", name="Solitaire", apptype=FlipperAppType.EXTERNAL, entry_point="solitaire_app", diff --git a/applications/external/solitaire/solitaire.c b/applications/external/solitaire/solitaire.c index c9de533d3f..7d39ae6365 100644 --- a/applications/external/solitaire/solitaire.c +++ b/applications/external/solitaire/solitaire.c @@ -4,7 +4,7 @@ #include #include "defines.h" #include "common/ui.h" -#include "Solitaire_icons.h" +#include "solitaire_icons.h" #include #include void init(GameState* game_state); diff --git a/applications/external/spectrum_analyzer/application.fam b/applications/external/spectrum_analyzer/application.fam index 286aa64ba3..79effb3a7f 100644 --- a/applications/external/spectrum_analyzer/application.fam +++ b/applications/external/spectrum_analyzer/application.fam @@ -1,5 +1,5 @@ App( - appid="Spectrum_Analyzer", + appid="spectrum_analyzer", name="Spectrum Analyzer", apptype=FlipperAppType.EXTERNAL, entry_point="spectrum_analyzer_app", diff --git a/applications/external/subbrute b/applications/external/subbrute index d1317392a4..c55814712d 160000 --- a/applications/external/subbrute +++ b/applications/external/subbrute @@ -1 +1 @@ -Subproject commit d1317392a4a7dadd34157e66c73fee6990fd2100 +Subproject commit c55814712d07cb5983c0c46dfc1386ab973358c3 diff --git a/applications/external/subghz_remote_configurator/helpers/subrem_custom_event.h b/applications/external/subghz_remote_configurator/helpers/subrem_custom_event.h index 779458c203..da3de2aae3 100644 --- a/applications/external/subghz_remote_configurator/helpers/subrem_custom_event.h +++ b/applications/external/subghz_remote_configurator/helpers/subrem_custom_event.h @@ -9,11 +9,13 @@ typedef enum { } SubRemEditMenuState; typedef enum { - // SubmenuIndex + // StartSubmenuIndex SubmenuIndexSubRemEditMapFile = 0, SubmenuIndexSubRemNewMapFile, +#if FURI_DEBUG SubmenuIndexSubRemRemoteView, - SubmenuIndexSubRemAbout, +#endif + // SubmenuIndexSubRemAbout, // EditSubmenuIndex EditSubmenuIndexEditLabel, @@ -45,8 +47,4 @@ typedef enum { SubRemCustomEventSceneEditPreviewSaved, SubRemCustomEventSceneNewName, - - // // SceneStates - // SubRemSceneOpenMapFileStateOpen, - // SubRemSceneOpenMapFileStateEdit, } SubRemCustomEvent; \ No newline at end of file diff --git a/applications/external/subghz_remote_configurator/helpers/subrem_presets.c b/applications/external/subghz_remote_configurator/helpers/subrem_presets.c index dc298c069a..e5823b721d 100644 --- a/applications/external/subghz_remote_configurator/helpers/subrem_presets.c +++ b/applications/external/subghz_remote_configurator/helpers/subrem_presets.c @@ -147,8 +147,7 @@ SubRemLoadSubState subrem_sub_preset_load( if(protocol->flag & SubGhzProtocolFlag_Send) { if((protocol->type == SubGhzProtocolTypeStatic) || (protocol->type == SubGhzProtocolTypeDynamic) || - // TODO: BINRAW It probably works, but checks are needed. - // (protocol->type == SubGhzProtocolTypeBinRAW) || + (protocol->type == SubGhzProtocolTypeBinRAW) || (protocol->type == SubGhzProtocolTypeRAW)) { sub_preset->type = protocol->type; } else { diff --git a/applications/external/subghz_remote_configurator/subghz_remote_app_i.h b/applications/external/subghz_remote_configurator/subghz_remote_app_i.h index ce5f31009a..a84e1ba502 100644 --- a/applications/external/subghz_remote_configurator/subghz_remote_app_i.h +++ b/applications/external/subghz_remote_configurator/subghz_remote_app_i.h @@ -23,10 +23,6 @@ #include -#include -#include -#include - #define SUBREM_APP_FOLDER EXT_PATH("subghz_remote") #define SUBREM_MAX_LEN_NAME 64 diff --git a/applications/external/tetris_game/application.fam b/applications/external/tetris_game/application.fam index 998345c0e4..a6c433b9e4 100644 --- a/applications/external/tetris_game/application.fam +++ b/applications/external/tetris_game/application.fam @@ -1,5 +1,5 @@ App( - appid="Tetris", + appid="tetris", name="Tetris", apptype=FlipperAppType.EXTERNAL, entry_point="tetris_game_app", diff --git a/applications/external/tictactoe_game/application.fam b/applications/external/tictactoe_game/application.fam index 8b67be874d..4d50bc1a25 100644 --- a/applications/external/tictactoe_game/application.fam +++ b/applications/external/tictactoe_game/application.fam @@ -1,5 +1,5 @@ App( - appid="TicTacToe", + appid="tictactoe", name="Tic Tac Toe", apptype=FlipperAppType.EXTERNAL, entry_point="tictactoe_game_app", diff --git a/applications/external/totp/features_config.h b/applications/external/totp/features_config.h index c789af27b5..15e81b28a2 100644 --- a/applications/external/totp/features_config.h +++ b/applications/external/totp/features_config.h @@ -12,3 +12,6 @@ // Target firmware to build for #define TOTP_TARGET_FIRMWARE TOTP_FIRMWARE_UL_XFW + +// Max custom fonts value +#define MAX_CUSTOM_FONTS (9) \ No newline at end of file diff --git a/applications/external/totp/ui/fonts/active_font.h b/applications/external/totp/ui/fonts/active_font.h index 054fa4a558..c873ce2003 100644 --- a/applications/external/totp/ui/fonts/active_font.h +++ b/applications/external/totp/ui/fonts/active_font.h @@ -10,3 +10,6 @@ #include "712serif/712serif.h" #include "graph35pix/graph35pix.h" #include "karma_future/karma_future.h" +#include "funclimbing/funclimbing.h" +#include "dpcomic/dpcomic.h" +#include "pixelflag/pixelflag.h" diff --git a/applications/external/totp/ui/fonts/dpcomic/dpcomic.c b/applications/external/totp/ui/fonts/dpcomic/dpcomic.c new file mode 100644 index 0000000000..e9c5ea1dee --- /dev/null +++ b/applications/external/totp/ui/fonts/dpcomic/dpcomic.c @@ -0,0 +1,1114 @@ +#include "dpcomic.h" + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +/* +** Font data for DPComic 18pt +*/ + +/* Character bitmaps for DPComic 18pt */ +const uint8_t dPComic_18ptBitmaps[] = { + /* @0 '-' (15 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE0, + 0x3F, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @34 '0' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x07, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0xE0, + 0x07, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @68 '1' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x01, + 0xF8, + 0x01, + 0xF8, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @102 '2' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x07, + 0xC0, + 0x07, + 0xE0, + 0x0F, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x07, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x3F, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @136 '3' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x3F, + 0xC0, + 0x3F, + 0xE0, + 0x3F, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x07, + 0xC0, + 0x07, + 0xC0, + 0x07, + 0x00, + 0x0F, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0xE0, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @170 '4' (15 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0F, + 0xC0, + 0x0F, + 0xC0, + 0x0F, + 0xE0, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @204 '5' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x3F, + 0xC0, + 0x3F, + 0xC0, + 0x0F, + 0xE0, + 0x00, + 0xE0, + 0x00, + 0xE0, + 0x07, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0x00, + 0x0E, + 0x00, + 0x0F, + 0x00, + 0x0F, + 0xE0, + 0x07, + 0xF8, + 0x01, + 0xF8, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @238 '6' (15 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x0F, + 0x00, + 0x0F, + 0xC0, + 0x07, + 0xE0, + 0x00, + 0xE0, + 0x00, + 0xE0, + 0x07, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0F, + 0x38, + 0x0F, + 0xF8, + 0x07, + 0xE0, + 0x01, + 0xE0, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @272 '7' (15 pixels wide) */ + 0x00, + 0x00, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0xF8, + 0x0F, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x07, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x00, + 0xF8, + 0x00, + 0xF8, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @306 '8' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x0F, + 0xC0, + 0x0F, + 0xE0, + 0x38, + 0xE0, + 0x3E, + 0xE0, + 0x3E, + 0xC0, + 0x0F, + 0xE0, + 0x07, + 0xE0, + 0x07, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0F, + 0xE0, + 0x07, + 0xE0, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @340 '9' (15 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x07, + 0xC0, + 0x07, + 0xE0, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0xE0, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0xE0, + 0x01, + 0xF8, + 0x00, + 0xF8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @374 'B' (15 pixels wide) */ + 0xC0, + 0x0F, + 0xE0, + 0x3F, + 0xE0, + 0x3F, + 0xF8, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0xF8, + 0x0F, + 0xF8, + 0x3F, + 0xF8, + 0x3F, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0xF8, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @408 'C' (15 pixels wide) */ + 0x00, + 0x0F, + 0xC0, + 0x3F, + 0xC0, + 0x3F, + 0xE0, + 0x39, + 0xE0, + 0x00, + 0xE0, + 0x00, + 0xF8, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0xF8, + 0x0F, + 0xE0, + 0x07, + 0xE0, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @442 'D' (15 pixels wide) */ + 0xC0, + 0x07, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0xF8, + 0x3E, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x0F, + 0x38, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x01, + 0xF8, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @476 'F' (15 pixels wide) */ + 0x80, + 0x1F, + 0xC0, + 0x0F, + 0xC0, + 0x0F, + 0xF0, + 0x01, + 0x70, + 0x00, + 0x70, + 0x00, + 0xF0, + 0x0F, + 0xF0, + 0x03, + 0xF0, + 0x03, + 0x70, + 0x00, + 0x70, + 0x00, + 0x70, + 0x00, + 0x70, + 0x00, + 0x70, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @510 'G' (15 pixels wide) */ + 0x00, + 0x0F, + 0xC0, + 0x3F, + 0xC0, + 0x3F, + 0xE0, + 0x39, + 0xE0, + 0x00, + 0xE0, + 0x00, + 0xF8, + 0x00, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0xF8, + 0x0F, + 0xE0, + 0x07, + 0xE0, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @544 'H' (15 pixels wide) */ + 0x00, + 0x30, + 0x20, + 0x38, + 0x20, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0xF8, + 0x3F, + 0xF8, + 0x3F, + 0xF8, + 0x3F, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @578 'J' (15 pixels wide) */ + 0x00, + 0x08, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x00, + 0x0E, + 0x18, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0xE0, + 0x01, + 0xE0, + 0x01, + + /* @612 'K' (15 pixels wide) */ + 0x20, + 0x30, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x0F, + 0x38, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x38, + 0x0F, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @646 'M' (15 pixels wide) */ + 0x08, + 0x10, + 0x3E, + 0x1C, + 0x3E, + 0x1C, + 0x7E, + 0x1E, + 0xFE, + 0x1F, + 0xFE, + 0x1F, + 0xCE, + 0x1D, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x0E, + 0x1C, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @680 'N' (15 pixels wide) */ + 0x20, + 0x30, + 0xF8, + 0x38, + 0xF8, + 0x38, + 0xF8, + 0x38, + 0xF8, + 0x39, + 0xF8, + 0x39, + 0xF8, + 0x39, + 0x38, + 0x3F, + 0x38, + 0x3F, + 0x38, + 0x3F, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0x38, + 0x38, + 0x38, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @714 'P' (15 pixels wide) */ + 0xC0, + 0x07, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0xF8, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0xF8, + 0x01, + 0x38, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @748 'Q' (15 pixels wide) */ + 0x00, + 0x0F, + 0xC0, + 0x3F, + 0xC0, + 0x3F, + 0xE0, + 0x39, + 0xE0, + 0x38, + 0xE0, + 0x38, + 0xF8, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x3E, + 0x38, + 0x3E, + 0xF8, + 0x0F, + 0xE0, + 0x3F, + 0xE0, + 0x3F, + 0x00, + 0x38, + 0x00, + 0x38, + + /* @782 'R' (15 pixels wide) */ + 0xC0, + 0x07, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0xF8, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0F, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0xF8, + 0x01, + 0x38, + 0x07, + 0x38, + 0x07, + 0x38, + 0x0F, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @816 'T' (15 pixels wide) */ + 0x00, + 0x7E, + 0xE0, + 0x3F, + 0xE0, + 0x3F, + 0xF8, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @850 'V' (15 pixels wide) */ + 0x20, + 0x30, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x07, + 0x38, + 0x07, + 0xE0, + 0x07, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @884 'W' (15 pixels wide) */ + 0x04, + 0x40, + 0x07, + 0x70, + 0x07, + 0x70, + 0x07, + 0x71, + 0xC7, + 0x71, + 0xC7, + 0x71, + 0xC7, + 0x71, + 0xC7, + 0x71, + 0xC7, + 0x71, + 0xC7, + 0x71, + 0xE7, + 0x39, + 0xE7, + 0x39, + 0x3C, + 0x0F, + 0x1C, + 0x07, + 0x1C, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @918 'X' (15 pixels wide) */ + 0x18, + 0x30, + 0x38, + 0x38, + 0x38, + 0x38, + 0xF8, + 0x3E, + 0xE0, + 0x0F, + 0xE0, + 0x0F, + 0xC0, + 0x07, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xE0, + 0x07, + 0x38, + 0x0F, + 0x38, + 0x0F, + 0x38, + 0x3E, + 0x18, + 0x38, + 0x18, + 0x38, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @952 'Y' (15 pixels wide) */ + 0x18, + 0x08, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0x38, + 0x0E, + 0xF8, + 0x0F, + 0xF8, + 0x0F, + 0xE0, + 0x07, + 0xE0, + 0x01, + 0xE0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, +}; + +/* Character descriptors for DPComic 18pt */ +/* { [Char width in bits], [Offset into dPComic_18ptCharBitmaps in bytes] } */ +const FONT_CHAR_INFO dPComic_18ptDescriptors[] = { + {15, 0}, /* - */ + {0, 0}, /* . */ + {0, 0}, /* / */ + {15, 34}, /* 0 */ + {15, 68}, /* 1 */ + {15, 102}, /* 2 */ + {15, 136}, /* 3 */ + {15, 170}, /* 4 */ + {15, 204}, /* 5 */ + {15, 238}, /* 6 */ + {15, 272}, /* 7 */ + {15, 306}, /* 8 */ + {15, 340}, /* 9 */ + {0, 0}, /* : */ + {0, 0}, /* ; */ + {0, 0}, /* < */ + {0, 0}, /* = */ + {0, 0}, /* > */ + {0, 0}, /* ? */ + {0, 0}, /* @ */ + {0, 0}, /* A */ + {15, 374}, /* B */ + {15, 408}, /* C */ + {15, 442}, /* D */ + {0, 0}, /* E */ + {15, 476}, /* F */ + {15, 510}, /* G */ + {15, 544}, /* H */ + {0, 0}, /* I */ + {15, 578}, /* J */ + {15, 612}, /* K */ + {0, 0}, /* L */ + {15, 646}, /* M */ + {15, 680}, /* N */ + {0, 0}, /* O */ + {15, 714}, /* P */ + {15, 748}, /* Q */ + {15, 782}, /* R */ + {0, 0}, /* S */ + {15, 816}, /* T */ + {0, 0}, /* U */ + {15, 850}, /* V */ + {15, 884}, /* W */ + {15, 918}, /* X */ + {15, 952}, /* Y */ +}; + +/* Font information for DPComic 18pt */ +const FONT_INFO dPComic_18ptFontInfo = { + 17, /* Character height */ + '-', /* Start character */ + 'Y', /* End character */ + 2, /* Width, in pixels, of space character */ + dPComic_18ptDescriptors, /* Character descriptor array */ + dPComic_18ptBitmaps, /* Character bitmap array */ +}; diff --git a/applications/external/totp/ui/fonts/dpcomic/dpcomic.h b/applications/external/totp/ui/fonts/dpcomic/dpcomic.h new file mode 100644 index 0000000000..bac49b4d64 --- /dev/null +++ b/applications/external/totp/ui/fonts/dpcomic/dpcomic.h @@ -0,0 +1,7 @@ +#pragma once + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +#include "../font_info.h" + +extern const FONT_INFO dPComic_18ptFontInfo; \ No newline at end of file diff --git a/applications/external/totp/ui/fonts/funclimbing/funclimbing.c b/applications/external/totp/ui/fonts/funclimbing/funclimbing.c new file mode 100644 index 0000000000..d6b1a0c974 --- /dev/null +++ b/applications/external/totp/ui/fonts/funclimbing/funclimbing.c @@ -0,0 +1,1172 @@ +#include "funclimbing.h" + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +/* +** Font data for fun climbing (Demo) 18pt +*/ + +/* Character bitmaps for fun climbing (Demo) 18pt */ +const uint8_t funclimbingDemo_18ptBitmaps[] = { + /* @0 '-' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE0, + 0x03, + 0xE0, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @36 '0' (16 pixels wide) */ + 0x00, + 0x00, + 0x80, + 0x00, + 0xE0, + 0x03, + 0x20, + 0x02, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x08, + 0x04, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x20, + 0x02, + 0xE0, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @72 '1' (16 pixels wide) */ + 0x00, + 0x02, + 0x00, + 0x03, + 0x80, + 0x03, + 0xC0, + 0x02, + 0x60, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + + /* @108 '2' (16 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x07, + 0x60, + 0x04, + 0x20, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x08, + 0x02, + 0x08, + 0x02, + 0x00, + 0x01, + 0x00, + 0x01, + 0x80, + 0x00, + 0x80, + 0x00, + 0x40, + 0x00, + 0x60, + 0x00, + 0xC0, + 0x03, + 0x00, + 0x1C, + 0x00, + 0x00, + + /* @144 '3' (16 pixels wide) */ + 0x00, + 0x02, + 0x80, + 0x05, + 0x40, + 0x08, + 0x40, + 0x08, + 0x40, + 0x10, + 0x40, + 0x10, + 0x00, + 0x10, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x0C, + 0x00, + 0x06, + 0x00, + 0x03, + 0x80, + 0x0F, + 0x00, + 0x10, + 0x00, + 0x10, + 0x30, + 0x08, + 0xC0, + 0x07, + 0x00, + 0x00, + + /* @180 '4' (16 pixels wide) */ + 0x00, + 0x10, + 0x00, + 0x10, + 0x40, + 0x10, + 0x40, + 0x10, + 0x40, + 0x10, + 0x40, + 0x10, + 0x40, + 0x10, + 0x20, + 0x10, + 0x20, + 0x10, + 0x20, + 0x10, + 0x20, + 0x10, + 0x30, + 0x10, + 0xF0, + 0x1F, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + + /* @216 '5' (16 pixels wide) */ + 0x00, + 0x00, + 0x60, + 0x00, + 0xA0, + 0x03, + 0x20, + 0x04, + 0x20, + 0x00, + 0x30, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0xF0, + 0x00, + 0x80, + 0x03, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x04, + 0x80, + 0x03, + 0xF0, + 0x00, + 0x00, + 0x00, + + /* @252 '6' (16 pixels wide) */ + 0x00, + 0x00, + 0x40, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x18, + 0x03, + 0xC8, + 0x06, + 0x28, + 0x0C, + 0x18, + 0x08, + 0x18, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x10, + 0x08, + 0x30, + 0x0C, + 0xC0, + 0x07, + 0x00, + 0x00, + + /* @288 '7' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x0F, + 0xF0, + 0x09, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x03, + 0x00, + 0x01, + 0x00, + 0x01, + 0x00, + 0x01, + 0x00, + 0x00, + + /* @324 '8' (16 pixels wide) */ + 0x80, + 0x01, + 0x60, + 0x02, + 0x30, + 0x04, + 0x10, + 0x08, + 0x10, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x10, + 0x0C, + 0x10, + 0x04, + 0x60, + 0x03, + 0xC0, + 0x01, + 0x40, + 0x03, + 0x20, + 0x04, + 0x20, + 0x04, + 0x20, + 0x04, + 0x20, + 0x04, + 0xC0, + 0x03, + 0x00, + 0x00, + + /* @360 '9' (16 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x01, + 0x20, + 0x02, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0xE0, + 0x03, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x01, + 0x00, + 0x01, + 0x80, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @396 'B' (16 pixels wide) */ + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0xE8, + 0x0F, + 0x38, + 0x10, + 0x10, + 0x10, + 0x10, + 0x30, + 0x10, + 0x10, + 0x10, + 0x18, + 0xF0, + 0x07, + 0x20, + 0x00, + + /* @432 'C' (16 pixels wide) */ + 0x00, + 0x03, + 0x80, + 0x06, + 0x40, + 0x04, + 0x40, + 0x04, + 0x40, + 0x08, + 0x40, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x40, + 0x00, + 0x40, + 0x08, + 0x40, + 0x08, + 0x40, + 0x08, + 0xC0, + 0x08, + 0x80, + 0x04, + 0x80, + 0x05, + 0x00, + 0x02, + + /* @468 'D' (16 pixels wide) */ + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x80, + 0x07, + 0x40, + 0x04, + 0x20, + 0x04, + 0x20, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x30, + 0x04, + 0x20, + 0x04, + 0x20, + 0x04, + 0x40, + 0x04, + 0x80, + 0x05, + 0x00, + 0x07, + + /* @504 'F' (16 pixels wide) */ + 0x00, + 0x02, + 0x80, + 0x0D, + 0xC0, + 0x08, + 0x40, + 0x10, + 0x60, + 0x10, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0xF8, + 0x01, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x20, + 0x00, + 0x40, + 0x00, + + /* @540 'G' (16 pixels wide) */ + 0x80, + 0x00, + 0x60, + 0x01, + 0x20, + 0x03, + 0x30, + 0x02, + 0x10, + 0x02, + 0x10, + 0x02, + 0x10, + 0x02, + 0x10, + 0x02, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0xD0, + 0x0F, + 0x10, + 0x02, + 0x10, + 0x01, + 0x20, + 0x01, + 0xE0, + 0x00, + 0x40, + 0x00, + + /* @576 'H' (16 pixels wide) */ + 0x00, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x18, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x0F, + 0x90, + 0x09, + 0xD0, + 0x18, + 0x50, + 0x10, + 0x30, + 0x10, + 0x30, + 0x10, + 0x10, + 0x10, + 0x00, + 0x00, + + /* @612 'J' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x10, + 0x04, + 0x20, + 0x04, + 0x20, + 0x02, + 0x20, + 0x02, + 0x60, + 0x03, + 0xC0, + 0x01, + 0x00, + 0x00, + + /* @648 'K' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x08, + 0x10, + 0x0C, + 0x10, + 0x02, + 0xB0, + 0x01, + 0xE0, + 0x00, + 0x60, + 0x00, + 0x60, + 0x00, + 0xA0, + 0x00, + 0x20, + 0x01, + 0x20, + 0x02, + 0x20, + 0x0C, + 0x20, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @684 'M' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x10, + 0x10, + 0x30, + 0x18, + 0x30, + 0x18, + 0x50, + 0x34, + 0x50, + 0x24, + 0xC8, + 0x22, + 0x88, + 0x22, + 0x88, + 0x21, + 0x08, + 0x21, + 0x04, + 0x60, + 0x04, + 0x40, + 0x04, + 0x40, + 0x04, + 0x40, + 0x02, + 0x40, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @720 'N' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x02, + 0x01, + 0x86, + 0x07, + 0x44, + 0x04, + 0x24, + 0x08, + 0x24, + 0x08, + 0x14, + 0x18, + 0x14, + 0x10, + 0x1C, + 0x10, + 0x0C, + 0x10, + 0x0C, + 0x10, + 0x08, + 0x10, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @756 'P' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0xE0, + 0x01, + 0x20, + 0x02, + 0x20, + 0x04, + 0x60, + 0x04, + 0x40, + 0x04, + 0x40, + 0x04, + 0x40, + 0x04, + 0x40, + 0x06, + 0x40, + 0x02, + 0xC0, + 0x01, + 0xC0, + 0x00, + 0x40, + 0x00, + 0x40, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @792 'Q' (16 pixels wide) */ + 0x00, + 0x00, + 0xC0, + 0x03, + 0x30, + 0x06, + 0x18, + 0x08, + 0x08, + 0x10, + 0x04, + 0x10, + 0x04, + 0x20, + 0x04, + 0x20, + 0x04, + 0x20, + 0x08, + 0x21, + 0x08, + 0x33, + 0x10, + 0x12, + 0x30, + 0x0E, + 0xC0, + 0x07, + 0x00, + 0x08, + 0x00, + 0x08, + 0x00, + 0x10, + 0x00, + 0x00, + + /* @828 'R' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x07, + 0x88, + 0x0D, + 0x48, + 0x08, + 0x68, + 0x00, + 0x28, + 0x00, + 0x28, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @864 'T' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x80, + 0x00, + 0x80, + 0x00, + 0x80, + 0x00, + 0xE0, + 0x03, + 0x80, + 0x00, + 0x80, + 0x00, + 0x80, + 0x00, + 0x80, + 0x04, + 0x80, + 0x04, + 0x80, + 0x04, + 0x80, + 0x04, + 0x80, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @900 'V' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x10, + 0x10, + 0x10, + 0x10, + 0x18, + 0x10, + 0x08, + 0x10, + 0x08, + 0x10, + 0x04, + 0x10, + 0x04, + 0x20, + 0x04, + 0x20, + 0x02, + 0x20, + 0x02, + 0x20, + 0x01, + 0x40, + 0x01, + 0xC0, + 0x01, + 0xC0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @936 'W' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x80, + 0x02, + 0x80, + 0x02, + 0x40, + 0x02, + 0x40, + 0x02, + 0x41, + 0x86, + 0x42, + 0x84, + 0x42, + 0x44, + 0x44, + 0x44, + 0x64, + 0x24, + 0x28, + 0x28, + 0x28, + 0x18, + 0x30, + 0x18, + 0x30, + 0x18, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @972 'X' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x08, + 0x10, + 0x04, + 0x20, + 0x04, + 0x40, + 0x02, + 0x80, + 0x03, + 0x80, + 0x01, + 0x80, + 0x03, + 0x40, + 0x02, + 0x30, + 0x04, + 0x18, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + + /* @1008 'Y' (16 pixels wide) */ + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x08, + 0x08, + 0x08, + 0x08, + 0x0C, + 0x08, + 0x0C, + 0x08, + 0x0A, + 0x10, + 0x0A, + 0xF0, + 0x09, + 0x00, + 0x0C, + 0x10, + 0x04, + 0x10, + 0x04, + 0x20, + 0x02, + 0xE0, + 0x03, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, +}; + +/* Character descriptors for fun climbing (Demo) 18pt */ +/* { [Char width in bits], [Offset into funclimbingDemo_18ptCharBitmaps in bytes] } */ +const FONT_CHAR_INFO funclimbingDemo_18ptDescriptors[] = { + {16, 0}, /* - */ + {0, 0}, /* . */ + {0, 0}, /* / */ + {16, 36}, /* 0 */ + {16, 72}, /* 1 */ + {16, 108}, /* 2 */ + {16, 144}, /* 3 */ + {16, 180}, /* 4 */ + {16, 216}, /* 5 */ + {16, 252}, /* 6 */ + {16, 288}, /* 7 */ + {16, 324}, /* 8 */ + {16, 360}, /* 9 */ + {0, 0}, /* : */ + {0, 0}, /* ; */ + {0, 0}, /* < */ + {0, 0}, /* = */ + {0, 0}, /* > */ + {0, 0}, /* ? */ + {0, 0}, /* @ */ + {0, 0}, /* A */ + {16, 396}, /* B */ + {16, 432}, /* C */ + {16, 468}, /* D */ + {0, 0}, /* E */ + {16, 504}, /* F */ + {16, 540}, /* G */ + {16, 576}, /* H */ + {0, 0}, /* I */ + {16, 612}, /* J */ + {16, 648}, /* K */ + {0, 0}, /* L */ + {16, 684}, /* M */ + {16, 720}, /* N */ + {0, 0}, /* O */ + {16, 756}, /* P */ + {16, 792}, /* Q */ + {16, 828}, /* R */ + {0, 0}, /* S */ + {16, 864}, /* T */ + {0, 0}, /* U */ + {16, 900}, /* V */ + {16, 936}, /* W */ + {16, 972}, /* X */ + {16, 1008}, /* Y */ +}; + +/* Font information for fun climbing (Demo) 18pt */ +const FONT_INFO funclimbingDemo_18ptFontInfo = { + 18, /* Character height */ + '-', /* Start character */ + 'Y', /* End character */ + 2, /* Width, in pixels, of space character */ + funclimbingDemo_18ptDescriptors, /* Character descriptor array */ + funclimbingDemo_18ptBitmaps, /* Character bitmap array */ +}; diff --git a/applications/external/totp/ui/fonts/funclimbing/funclimbing.h b/applications/external/totp/ui/fonts/funclimbing/funclimbing.h new file mode 100644 index 0000000000..26614adf12 --- /dev/null +++ b/applications/external/totp/ui/fonts/funclimbing/funclimbing.h @@ -0,0 +1,7 @@ +#pragma once + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +#include "../font_info.h" + +extern const FONT_INFO funclimbingDemo_18ptFontInfo; \ No newline at end of file diff --git a/applications/external/totp/ui/fonts/pixelflag/pixelflag.c b/applications/external/totp/ui/fonts/pixelflag/pixelflag.c new file mode 100644 index 0000000000..2b7be9eb88 --- /dev/null +++ b/applications/external/totp/ui/fonts/pixelflag/pixelflag.c @@ -0,0 +1,1114 @@ +#include "pixelflag.h" + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +/* +** Font data for {PixelFlag} 18pt +*/ + +/* Character bitmaps for {PixelFlag} 18pt */ +const uint8_t pixelFlag_18ptBitmaps[] = { + /* @0 '-' (13 pixels wide) */ + 0xFE, + 0x07, + 0xFE, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFE, + 0x07, + 0xFE, + 0x07, + + /* @34 '0' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @68 '1' (13 pixels wide) */ + 0xff, + 0xff, + 0xff, + 0xff, + 0x00, + 0xe0, + 0xc0, + 0xe0, + 0xc0, + 0xe0, + 0xe0, + 0xe0, + 0xe0, + 0xe0, + 0xc0, + 0xe0, + 0xc0, + 0xe0, + 0xc0, + 0xe0, + 0xc0, + 0xe0, + 0xc0, + 0xe0, + 0xe0, + 0xe3, + 0xe0, + 0xe3, + 0x00, + 0xe0, + 0xff, + 0xff, + 0xff, + 0xff, + + /* @102 '2' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0xF8, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @136 '3' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0xE0, + 0x07, + 0xE0, + 0x1F, + 0x00, + 0x18, + 0x00, + 0x18, + 0xFC, + 0x1F, + 0xFC, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @170 '4' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x07, + 0xC0, + 0x07, + 0xC0, + 0x06, + 0x60, + 0x06, + 0x78, + 0x06, + 0x18, + 0x06, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x00, + 0x06, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @204 '5' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x1F, + 0x00, + 0x18, + 0x00, + 0x18, + 0xFC, + 0x1F, + 0xFC, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @238 '6' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @272 '7' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x03, + 0xC0, + 0x00, + 0xE0, + 0x00, + 0x60, + 0x00, + 0x18, + 0x00, + 0x1C, + 0x00, + 0x0C, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @306 '8' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xF8, + 0x07, + 0xFC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @340 '9' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xF8, + 0x1F, + 0xF8, + 0x1F, + 0x00, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @374 'B' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x07, + 0xFC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xFC, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @408 'C' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @442 'D' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xFC, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @476 'F' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0xFC, + 0x03, + 0xFC, + 0x03, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @510 'G' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x00, + 0xCC, + 0x1F, + 0xCC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @544 'H' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @578 'J' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x00, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @612 'K' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x06, + 0x0C, + 0x07, + 0x0C, + 0x03, + 0xFC, + 0x00, + 0xFC, + 0x03, + 0x0C, + 0x03, + 0x0C, + 0x06, + 0x0C, + 0x1E, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @646 'M' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x1C, + 0x1E, + 0x7C, + 0x1F, + 0x6C, + 0x1B, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @680 'N' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x1C, + 0x18, + 0x7C, + 0x18, + 0x6C, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x1B, + 0x0C, + 0x1B, + 0x0C, + 0x1E, + 0x0C, + 0x1E, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @714 'P' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x0C, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @748 'Q' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xF8, + 0x07, + 0xF8, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x1B, + 0x0C, + 0x1B, + 0x0C, + 0x1E, + 0xFC, + 0x1F, + 0xF8, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @782 'R' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x07, + 0xFC, + 0x07, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xFC, + 0x07, + 0xFC, + 0x1F, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @816 'T' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0xFC, + 0x1F, + 0xFC, + 0x1F, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @850 'V' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x1C, + 0x1E, + 0x18, + 0x06, + 0x60, + 0x03, + 0xE0, + 0x03, + 0xC0, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @884 'W' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0xCC, + 0x18, + 0xFC, + 0x1F, + 0x78, + 0x07, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @918 'X' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x18, + 0x06, + 0x78, + 0x07, + 0x60, + 0x03, + 0xC0, + 0x00, + 0xE0, + 0x03, + 0x60, + 0x03, + 0x18, + 0x06, + 0x1C, + 0x1E, + 0x0C, + 0x18, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, + + /* @952 'Y' (13 pixels wide) */ + 0xFF, + 0x1F, + 0xFF, + 0x1F, + 0x00, + 0x00, + 0x0C, + 0x18, + 0x0C, + 0x18, + 0x18, + 0x06, + 0x78, + 0x07, + 0x60, + 0x03, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0xC0, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x1F, + 0xFF, + 0x1F, +}; + +/* Character descriptors for {PixelFlag} 18pt */ +/* { [Char width in bits], [Offset into pixelFlag_18ptCharBitmaps in bytes] } */ +const FONT_CHAR_INFO pixelFlag_18ptDescriptors[] = { + {13, 0}, /* - */ + {0, 0}, /* . */ + {0, 0}, /* / */ + {13, 34}, /* 0 */ + {13, 68}, /* 1 */ + {13, 102}, /* 2 */ + {13, 136}, /* 3 */ + {13, 170}, /* 4 */ + {13, 204}, /* 5 */ + {13, 238}, /* 6 */ + {13, 272}, /* 7 */ + {13, 306}, /* 8 */ + {13, 340}, /* 9 */ + {0, 0}, /* : */ + {0, 0}, /* ; */ + {0, 0}, /* < */ + {0, 0}, /* = */ + {0, 0}, /* > */ + {0, 0}, /* ? */ + {0, 0}, /* @ */ + {0, 0}, /* A */ + {13, 374}, /* B */ + {13, 408}, /* C */ + {13, 442}, /* D */ + {0, 0}, /* E */ + {13, 476}, /* F */ + {13, 510}, /* G */ + {13, 544}, /* H */ + {0, 0}, /* I */ + {13, 578}, /* J */ + {13, 612}, /* K */ + {0, 0}, /* L */ + {13, 646}, /* M */ + {13, 680}, /* N */ + {0, 0}, /* O */ + {13, 714}, /* P */ + {13, 748}, /* Q */ + {13, 782}, /* R */ + {0, 0}, /* S */ + {13, 816}, /* T */ + {0, 0}, /* U */ + {13, 850}, /* V */ + {13, 884}, /* W */ + {13, 918}, /* X */ + {13, 952}, /* Y */ +}; + +/* Font information for {PixelFlag} 18pt */ +const FONT_INFO pixelFlag_18ptFontInfo = { + 17, /* Character height */ + '-', /* Start character */ + 'Y', /* End character */ + 0, /* Width, in pixels, of space character */ + pixelFlag_18ptDescriptors, /* Character descriptor array */ + pixelFlag_18ptBitmaps, /* Character bitmap array */ +}; diff --git a/applications/external/totp/ui/fonts/pixelflag/pixelflag.h b/applications/external/totp/ui/fonts/pixelflag/pixelflag.h new file mode 100644 index 0000000000..dc339c84d6 --- /dev/null +++ b/applications/external/totp/ui/fonts/pixelflag/pixelflag.h @@ -0,0 +1,7 @@ +#pragma once + +/* GENERATED BY https://github.com/pavius/the-dot-factory */ + +#include "../font_info.h" + +extern const FONT_INFO pixelFlag_18ptFontInfo; \ No newline at end of file diff --git a/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c index 0bdc7aee36..bf76b7c82d 100644 --- a/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c +++ b/applications/external/totp/ui/scenes/app_settings/totp_app_settings.c @@ -250,7 +250,7 @@ bool totp_scene_app_settings_handle_event( #endif else if(scene_state->selected_control == FontSelector) { totp_roll_value_uint8_t( - &scene_state->selected_font, 1, 0, 6, RollOverflowBehaviorStop); + &scene_state->selected_font, 1, 0, MAX_CUSTOM_FONTS, RollOverflowBehaviorStop); } break; case InputKeyLeft: @@ -274,7 +274,7 @@ bool totp_scene_app_settings_handle_event( #endif else if(scene_state->selected_control == FontSelector) { totp_roll_value_uint8_t( - &scene_state->selected_font, -1, 0, 6, RollOverflowBehaviorStop); + &scene_state->selected_font, -1, 0, MAX_CUSTOM_FONTS, RollOverflowBehaviorStop); } break; case InputKeyOk: diff --git a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c index e55f34ea27..da99623fd5 100644 --- a/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c +++ b/applications/external/totp/ui/scenes/generate_token/totp_scene_generate_token.c @@ -165,6 +165,15 @@ static void draw_totp_code(Canvas* const canvas, const PluginState* const plugin case 6: current_font = &karmaFuture_14ptFontInfo; break; + case 7: + current_font = &funclimbingDemo_18ptFontInfo; + break; + case 8: + current_font = &dPComic_18ptFontInfo; + break; + case 9: + current_font = &pixelFlag_18ptFontInfo; + break; default: current_font = &modeNine_15ptFontInfo; break; @@ -222,6 +231,15 @@ static void on_new_token_code_generated(bool time_left, void* context) { case 6: current_font = &karmaFuture_14ptFontInfo; break; + case 7: + current_font = &funclimbingDemo_18ptFontInfo; + break; + case 8: + current_font = &dPComic_18ptFontInfo; + break; + case 9: + current_font = &pixelFlag_18ptFontInfo; + break; default: current_font = &modeNine_15ptFontInfo; break; diff --git a/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c b/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c index d4de748b63..60411b34c8 100644 --- a/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c +++ b/applications/external/uart_terminal/scenes/uart_terminal_scene_start.c @@ -28,7 +28,7 @@ const UART_TerminalItem items[NUM_MENU_ITEMS] = { 9, {"115200", "2400", "9600", "19200", "38400", "57600", "230400", "460800", "921600"}, NO_ARGS, - FOCUS_CONSOLE_TOGGLE, + FOCUS_CONSOLE_END, NO_TIP}, {"Send command", {""}, 1, {""}, INPUT_ARGS, FOCUS_CONSOLE_END, NO_TIP}, {"Send AT command", {""}, 1, {"AT"}, INPUT_ARGS, FOCUS_CONSOLE_END, NO_TIP}, diff --git a/applications/external/wav_player/application.fam b/applications/external/wav_player/application.fam index f76c1cd39e..c71527c9db 100644 --- a/applications/external/wav_player/application.fam +++ b/applications/external/wav_player/application.fam @@ -1,5 +1,5 @@ App( - appid="WAV_Player", + appid="wav_player", name="WAV Player", apptype=FlipperAppType.EXTERNAL, entry_point="wav_player_app", diff --git a/applications/external/wav_player/wav_player.c b/applications/external/wav_player/wav_player.c index 9c1b4e5b67..8f32731311 100644 --- a/applications/external/wav_player/wav_player.c +++ b/applications/external/wav_player/wav_player.c @@ -12,7 +12,7 @@ #include "wav_player_view.h" #include -#include +#include #define TAG "WavPlayer" diff --git a/applications/external/wifi_marauder_companion/ReadMe.md b/applications/external/wifi_marauder_companion/ReadMe.md new file mode 100644 index 0000000000..fd690ece6f --- /dev/null +++ b/applications/external/wifi_marauder_companion/ReadMe.md @@ -0,0 +1,19 @@ +# WiFi Marauder companion app for Flipper Zero + +## https://github.com/0xchocolate/flipperzero-wifi-marauder + +Requires a connected dev board running Marauder FW. [See install instructions from UberGuidoZ here.](https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard#marauder-install-information) + +## Support + +For app feedback, bugs, and feature requests, please [create an issue here](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/issues). + +You can find me (0xchocolate) on discord as @cococode#6011. + +If you'd like to donate to the app development effort: +**ETH**: `0xf32A1F0CD6122C97d8953183E53cB889cc087C9b` +**BTC**: `bc1qtw7s25cwdkuaups22yna8sttfxn0usm2f35wc3` + +Find more info about Marauder and support its developer (justcallmekoko aka WillStunForFood) here: https://github.com/justcallmekoko/ESP32Marauder + +If you found the app preinstalled in a firmware release, consider supporting the maintainers! diff --git a/applications/external/wifi_marauder_companion/application.fam b/applications/external/wifi_marauder_companion/application.fam index d7bde185e3..59e53b725c 100644 --- a/applications/external/wifi_marauder_companion/application.fam +++ b/applications/external/wifi_marauder_companion/application.fam @@ -1,5 +1,5 @@ App( - appid="ESP32_WiFi_Marauder", + appid="esp32_wifi_marauder", name="[ESP32] WiFi Marauder", apptype=FlipperAppType.EXTERNAL, entry_point="wifi_marauder_app", diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app.h b/applications/external/wifi_marauder_companion/wifi_marauder_app.h index 5457f89d84..3a342bbba2 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app.h @@ -4,7 +4,7 @@ extern "C" { #endif -#define WIFI_MARAUDER_APP_VERSION "v0.3.7" +#define WIFI_MARAUDER_APP_VERSION "v0.4.0" typedef struct WifiMarauderApp WifiMarauderApp; diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h index 2a16522bb3..d6a0d37c70 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h +++ b/applications/external/wifi_marauder_companion/wifi_marauder_app_i.h @@ -21,7 +21,7 @@ #include #include "wifi_marauder_text_input.h" -#include +#include #include #include #include diff --git a/applications/external/wifi_marauder_companion/wifi_marauder_text_input.c b/applications/external/wifi_marauder_companion/wifi_marauder_text_input.c index 663d0130e8..d087f268d3 100644 --- a/applications/external/wifi_marauder_companion/wifi_marauder_text_input.c +++ b/applications/external/wifi_marauder_companion/wifi_marauder_text_input.c @@ -1,6 +1,6 @@ #include "wifi_marauder_text_input.h" #include -#include "ESP32_WiFi_Marauder_icons.h" +#include "esp32_wifi_marauder_icons.h" #include "wifi_marauder_app_i.h" #include diff --git a/applications/external/wifi_scanner/application.fam b/applications/external/wifi_scanner/application.fam index c160e8aa94..144354b0f1 100644 --- a/applications/external/wifi_scanner/application.fam +++ b/applications/external/wifi_scanner/application.fam @@ -1,5 +1,5 @@ App( - appid="WiFi_Scanner", + appid="wifi_scanner", name="[WiFi] Scanner", apptype=FlipperAppType.EXTERNAL, entry_point="wifi_scanner_app", diff --git a/applications/external/wifi_scanner/wifi_scanner.c b/applications/external/wifi_scanner/wifi_scanner.c index 127bee0cd1..1eb60fd003 100644 --- a/applications/external/wifi_scanner/wifi_scanner.c +++ b/applications/external/wifi_scanner/wifi_scanner.c @@ -889,8 +889,8 @@ int32_t wifi_scanner_app(void* p) { view_port_input_callback_set(view_port, wifi_module_input_callback, event_queue); // Open GUI and register view_port - Gui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, view_port, GuiLayerFullscreen); + app->m_gui = furi_record_open(RECORD_GUI); + gui_add_view_port(app->m_gui, view_port, GuiLayerFullscreen); //notification_message(app->notification, &sequence_set_only_blue_255); @@ -1040,7 +1040,7 @@ int32_t wifi_scanner_app(void* p) { view_port_enabled_set(view_port, false); - gui_remove_view_port(gui, view_port); + gui_remove_view_port(app->m_gui, view_port); // Close gui record furi_record_close(RECORD_GUI); diff --git a/applications/external/zombiez/application.fam b/applications/external/zombiez/application.fam index 069e591bcd..69f5a9379c 100644 --- a/applications/external/zombiez/application.fam +++ b/applications/external/zombiez/application.fam @@ -1,5 +1,5 @@ App( - appid="Zombiez", + appid="zombiez", name="Zombiez", apptype=FlipperAppType.EXTERNAL, entry_point="zombiez_game_app", diff --git a/applications/main/bad_usb/helpers/ducky_script.c b/applications/main/bad_usb/helpers/ducky_script.c index 47d8a7e051..5a834ad0af 100644 --- a/applications/main/bad_usb/helpers/ducky_script.c +++ b/applications/main/bad_usb/helpers/ducky_script.c @@ -16,10 +16,11 @@ (((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE) typedef enum { - WorkerEvtToggle = (1 << 0), - WorkerEvtEnd = (1 << 1), - WorkerEvtConnect = (1 << 2), - WorkerEvtDisconnect = (1 << 3), + WorkerEvtStartStop = (1 << 0), + WorkerEvtPauseResume = (1 << 1), + WorkerEvtEnd = (1 << 2), + WorkerEvtConnect = (1 << 3), + WorkerEvtDisconnect = (1 << 4), } WorkerEvtFlags; static const char ducky_cmd_id[] = {"ID"}; @@ -372,6 +373,7 @@ static int32_t bad_usb_worker(void* context) { BadUsbScript* bad_usb = context; BadUsbWorkerState worker_state = BadUsbStateInit; + BadUsbWorkerState pause_state = BadUsbStateRunning; int32_t delay_val = 0; FURI_LOG_I(WORKER_TAG, "Init"); @@ -406,24 +408,24 @@ static int32_t bad_usb_worker(void* context) { } else if(worker_state == BadUsbStateNotConnected) { // State: USB not connected uint32_t flags = bad_usb_flags_get( - WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriWaitForever); + WorkerEvtEnd | WorkerEvtConnect | WorkerEvtStartStop, FuriWaitForever); if(flags & WorkerEvtEnd) { break; } else if(flags & WorkerEvtConnect) { worker_state = BadUsbStateIdle; // Ready to run - } else if(flags & WorkerEvtToggle) { + } else if(flags & WorkerEvtStartStop) { worker_state = BadUsbStateWillRun; // Will run when USB is connected } bad_usb->st.state = worker_state; } else if(worker_state == BadUsbStateIdle) { // State: ready to start uint32_t flags = bad_usb_flags_get( - WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriWaitForever); + WorkerEvtEnd | WorkerEvtStartStop | WorkerEvtDisconnect, FuriWaitForever); if(flags & WorkerEvtEnd) { break; - } else if(flags & WorkerEvtToggle) { // Start executing script + } else if(flags & WorkerEvtStartStop) { // Start executing script DOLPHIN_DEED(DolphinDeedBadUsbPlayScript); delay_val = 0; bad_usb->buf_len = 0; @@ -442,7 +444,7 @@ static int32_t bad_usb_worker(void* context) { } else if(worker_state == BadUsbStateWillRun) { // State: start on connection uint32_t flags = bad_usb_flags_get( - WorkerEvtEnd | WorkerEvtConnect | WorkerEvtToggle, FuriWaitForever); + WorkerEvtEnd | WorkerEvtConnect | WorkerEvtStartStop, FuriWaitForever); if(flags & WorkerEvtEnd) { break; @@ -458,17 +460,17 @@ static int32_t bad_usb_worker(void* context) { storage_file_seek(script_file, 0, true); // extra time for PC to recognize Flipper as keyboard flags = furi_thread_flags_wait( - WorkerEvtEnd | WorkerEvtDisconnect | WorkerEvtToggle, + WorkerEvtEnd | WorkerEvtDisconnect | WorkerEvtStartStop, FuriFlagWaitAny | FuriFlagNoClear, 1500); if(flags == (unsigned)FuriFlagErrorTimeout) { // If nothing happened - start script execution worker_state = BadUsbStateRunning; - } else if(flags & WorkerEvtToggle) { + } else if(flags & WorkerEvtStartStop) { worker_state = BadUsbStateIdle; - furi_thread_flags_clear(WorkerEvtToggle); + furi_thread_flags_clear(WorkerEvtStartStop); } - } else if(flags & WorkerEvtToggle) { // Cancel scheduled execution + } else if(flags & WorkerEvtStartStop) { // Cancel scheduled execution worker_state = BadUsbStateNotConnected; } bad_usb->st.state = worker_state; @@ -476,18 +478,23 @@ static int32_t bad_usb_worker(void* context) { } else if(worker_state == BadUsbStateRunning) { // State: running uint16_t delay_cur = (delay_val > 1000) ? (1000) : (delay_val); uint32_t flags = furi_thread_flags_wait( - WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, delay_cur); + WorkerEvtEnd | WorkerEvtStartStop | WorkerEvtPauseResume | WorkerEvtDisconnect, + FuriFlagWaitAny, + delay_cur); delay_val -= delay_cur; if(!(flags & FuriFlagError)) { if(flags & WorkerEvtEnd) { break; - } else if(flags & WorkerEvtToggle) { + } else if(flags & WorkerEvtStartStop) { worker_state = BadUsbStateIdle; // Stop executing script furi_hal_hid_kb_release_all(); } else if(flags & WorkerEvtDisconnect) { worker_state = BadUsbStateNotConnected; // USB disconnected furi_hal_hid_kb_release_all(); + } else if(flags & WorkerEvtPauseResume) { + pause_state = BadUsbStateRunning; + worker_state = BadUsbStatePaused; // Pause } bad_usb->st.state = worker_state; continue; @@ -526,13 +533,13 @@ static int32_t bad_usb_worker(void* context) { furi_check((flags & FuriFlagError) == 0); } } else if(worker_state == BadUsbStateWaitForBtn) { // State: Wait for button Press - uint16_t delay_cur = (delay_val > 1000) ? (1000) : (delay_val); - uint32_t flags = furi_thread_flags_wait( - WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, delay_cur); + uint32_t flags = bad_usb_flags_get( + WorkerEvtEnd | WorkerEvtStartStop | WorkerEvtPauseResume | WorkerEvtDisconnect, + FuriWaitForever); if(!(flags & FuriFlagError)) { if(flags & WorkerEvtEnd) { break; - } else if(flags & WorkerEvtToggle) { + } else if(flags & WorkerEvtStartStop) { delay_val = 0; worker_state = BadUsbStateRunning; } else if(flags & WorkerEvtDisconnect) { @@ -542,21 +549,55 @@ static int32_t bad_usb_worker(void* context) { bad_usb->st.state = worker_state; continue; } + } else if(worker_state == BadUsbStatePaused) { // State: Paused + uint32_t flags = bad_usb_flags_get( + WorkerEvtEnd | WorkerEvtStartStop | WorkerEvtPauseResume | WorkerEvtDisconnect, + FuriWaitForever); + if(!(flags & FuriFlagError)) { + if(flags & WorkerEvtEnd) { + break; + } else if(flags & WorkerEvtStartStop) { + worker_state = BadUsbStateIdle; // Stop executing script + bad_usb->st.state = worker_state; + furi_hal_hid_kb_release_all(); + } else if(flags & WorkerEvtDisconnect) { + worker_state = BadUsbStateNotConnected; // USB disconnected + bad_usb->st.state = worker_state; + furi_hal_hid_kb_release_all(); + } else if(flags & WorkerEvtPauseResume) { + if(pause_state == BadUsbStateRunning) { + if(delay_val > 0) { + bad_usb->st.state = BadUsbStateDelay; + bad_usb->st.delay_remain = delay_val / 1000; + } else { + bad_usb->st.state = BadUsbStateRunning; + delay_val = 0; + } + worker_state = BadUsbStateRunning; // Resume + } else if(pause_state == BadUsbStateStringDelay) { + bad_usb->st.state = BadUsbStateRunning; + worker_state = BadUsbStateStringDelay; // Resume + } + } + continue; + } } else if(worker_state == BadUsbStateStringDelay) { // State: print string with delays - uint32_t flags = furi_thread_flags_wait( - WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, - FuriFlagWaitAny, + uint32_t flags = bad_usb_flags_get( + WorkerEvtEnd | WorkerEvtStartStop | WorkerEvtPauseResume | WorkerEvtDisconnect, bad_usb->stringdelay); if(!(flags & FuriFlagError)) { if(flags & WorkerEvtEnd) { break; - } else if(flags & WorkerEvtToggle) { + } else if(flags & WorkerEvtStartStop) { worker_state = BadUsbStateIdle; // Stop executing script furi_hal_hid_kb_release_all(); } else if(flags & WorkerEvtDisconnect) { worker_state = BadUsbStateNotConnected; // USB disconnected furi_hal_hid_kb_release_all(); + } else if(flags & WorkerEvtPauseResume) { + pause_state = BadUsbStateStringDelay; + worker_state = BadUsbStatePaused; // Pause } bad_usb->st.state = worker_state; continue; @@ -651,9 +692,14 @@ void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, FuriString* layou storage_file_free(layout_file); } -void bad_usb_script_toggle(BadUsbScript* bad_usb) { +void bad_usb_script_start_stop(BadUsbScript* bad_usb) { + furi_assert(bad_usb); + furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtStartStop); +} + +void bad_usb_script_pause_resume(BadUsbScript* bad_usb) { furi_assert(bad_usb); - furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtToggle); + furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtPauseResume); } BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb) { diff --git a/applications/main/bad_usb/helpers/ducky_script.h b/applications/main/bad_usb/helpers/ducky_script.h index cff7239420..c8705dbdd1 100644 --- a/applications/main/bad_usb/helpers/ducky_script.h +++ b/applications/main/bad_usb/helpers/ducky_script.h @@ -16,6 +16,7 @@ typedef enum { BadUsbStateDelay, BadUsbStateStringDelay, BadUsbStateWaitForBtn, + BadUsbStatePaused, BadUsbStateDone, BadUsbStateScriptError, BadUsbStateFileError, @@ -42,7 +43,9 @@ void bad_usb_script_start(BadUsbScript* bad_usb); void bad_usb_script_stop(BadUsbScript* bad_usb); -void bad_usb_script_toggle(BadUsbScript* bad_usb); +void bad_usb_script_start_stop(BadUsbScript* bad_usb); + +void bad_usb_script_pause_resume(BadUsbScript* bad_usb); BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb); diff --git a/applications/main/bad_usb/scenes/bad_usb_scene_work.c b/applications/main/bad_usb/scenes/bad_usb_scene_work.c index afc2e6f6f1..ad33a124d2 100644 --- a/applications/main/bad_usb/scenes/bad_usb_scene_work.c +++ b/applications/main/bad_usb/scenes/bad_usb_scene_work.c @@ -21,7 +21,10 @@ bool bad_usb_scene_work_on_event(void* context, SceneManagerEvent event) { } consumed = true; } else if(event.event == InputKeyOk) { - bad_usb_script_toggle(app->bad_usb_script); + bad_usb_script_start_stop(app->bad_usb_script); + consumed = true; + } else if(event.event == InputKeyRight) { + bad_usb_script_pause_resume(app->bad_usb_script); consumed = true; } } else if(event.type == SceneManagerEventTypeTick) { diff --git a/applications/main/bad_usb/views/bad_usb_view.c b/applications/main/bad_usb/views/bad_usb_view.c index 0ab4365b7b..fa75b50d03 100644 --- a/applications/main/bad_usb/views/bad_usb_view.c +++ b/applications/main/bad_usb/views/bad_usb_view.c @@ -16,6 +16,7 @@ typedef struct { char file_name[MAX_NAME_LEN]; char layout[MAX_NAME_LEN]; BadUsbState state; + bool pause_wait; uint8_t anim_frame; } BadUsbModel; @@ -31,11 +32,7 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { if(strlen(model->layout) == 0) { furi_string_set(disp_str, "(default)"); } else { - furi_string_reset(disp_str); - furi_string_push_back(disp_str, '('); - for(size_t i = 0; i < strlen(model->layout); i++) - furi_string_push_back(disp_str, model->layout[i]); - furi_string_push_back(disp_str, ')'); + furi_string_printf(disp_str, "(%s)", model->layout); } elements_string_fit_width(canvas, disp_str, 128 - 2); canvas_draw_str( @@ -45,34 +42,42 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_icon(canvas, 22, 24, &I_UsbTree_48x22); - if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone) || - (model->state.state == BadUsbStateNotConnected)) { + BadUsbWorkerState state = model->state.state; + + if((state == BadUsbStateIdle) || (state == BadUsbStateDone) || + (state == BadUsbStateNotConnected)) { elements_button_center(canvas, "Run"); elements_button_left(canvas, "Config"); - } else if((model->state.state == BadUsbStateRunning) || (model->state.state == BadUsbStateDelay)) { + } else if((state == BadUsbStateRunning) || (state == BadUsbStateDelay)) { elements_button_center(canvas, "Stop"); - } else if(model->state.state == BadUsbStateWaitForBtn) { + if(!model->pause_wait) { + elements_button_right(canvas, "Pause"); + } + } else if(state == BadUsbStatePaused) { + elements_button_center(canvas, "End"); + elements_button_right(canvas, "Resume"); + } else if(state == BadUsbStateWaitForBtn) { elements_button_center(canvas, "Press to continue"); - } else if(model->state.state == BadUsbStateWillRun) { + } else if(state == BadUsbStateWillRun) { elements_button_center(canvas, "Cancel"); } - if(model->state.state == BadUsbStateNotConnected) { + if(state == BadUsbStateNotConnected) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Connect"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "to USB"); - } else if(model->state.state == BadUsbStateWillRun) { + } else if(state == BadUsbStateWillRun) { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Will run"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "on connect"); - } else if(model->state.state == BadUsbStateFileError) { + } else if(state == BadUsbStateFileError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "File"); canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR"); - } else if(model->state.state == BadUsbStateScriptError) { + } else if(state == BadUsbStateScriptError) { canvas_draw_icon(canvas, 4, 26, &I_Error_18x18); canvas_set_font(canvas, FontPrimary); canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:"); @@ -87,12 +92,12 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned( canvas, 127, 56, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); - } else if(model->state.state == BadUsbStateIdle) { + } else if(state == BadUsbStateIdle) { canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0"); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateRunning) { + } else if(state == BadUsbStateRunning) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); } else { @@ -105,13 +110,13 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDone) { + } else if(state == BadUsbStateDone) { canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21); canvas_set_font(canvas, FontBigNumbers); canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100"); furi_string_reset(disp_str); canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); - } else if(model->state.state == BadUsbStateDelay) { + } else if(state == BadUsbStateDelay) { if(model->anim_frame == 0) { canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21); } else { @@ -129,6 +134,22 @@ static void bad_usb_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str_aligned( canvas, 127, 50, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); furi_string_reset(disp_str); + } else if((state == BadUsbStatePaused) || (state == BadUsbStateWaitForBtn)) { + if(model->anim_frame == 0) { + canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21); + } else { + canvas_draw_icon(canvas, 4, 23, &I_EviWaiting2_18x21); + } + canvas_set_font(canvas, FontBigNumbers); + furi_string_printf( + disp_str, "%u", ((model->state.line_cur - 1) * 100) / model->state.line_nb); + canvas_draw_str_aligned( + canvas, 114, 40, AlignRight, AlignBottom, furi_string_get_cstr(disp_str)); + furi_string_reset(disp_str); + canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14); + canvas_set_font(canvas, FontSecondary); + canvas_draw_str_aligned(canvas, 127, 50, AlignRight, AlignBottom, "Paused"); + furi_string_reset(disp_str); } else { canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18); } @@ -142,7 +163,27 @@ static bool bad_usb_input_callback(InputEvent* event, void* context) { bool consumed = false; if(event->type == InputTypeShort) { - if((event->key == InputKeyLeft) || (event->key == InputKeyOk)) { + if(event->key == InputKeyLeft) { + consumed = true; + furi_assert(bad_usb->callback); + bad_usb->callback(event->key, bad_usb->context); + } else if(event->key == InputKeyOk) { + with_view_model( + bad_usb->view, BadUsbModel * model, { model->pause_wait = false; }, true); + consumed = true; + furi_assert(bad_usb->callback); + bad_usb->callback(event->key, bad_usb->context); + } else if(event->key == InputKeyRight) { + with_view_model( + bad_usb->view, + BadUsbModel * model, + { + if((model->state.state == BadUsbStateRunning) || + (model->state.state == BadUsbStateDelay)) { + model->pause_wait = true; + } + }, + true); consumed = true; furi_assert(bad_usb->callback); bad_usb->callback(event->key, bad_usb->context); @@ -215,6 +256,9 @@ void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) { { memcpy(&(model->state), st, sizeof(BadUsbState)); model->anim_frame ^= 1; + if(model->state.state == BadUsbStatePaused) { + model->pause_wait = false; + } }, true); } diff --git a/applications/main/infrared/scenes/infrared_scene_universal_ac.c b/applications/main/infrared/scenes/infrared_scene_universal_ac.c index 68a6ea9426..58f067735b 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_ac.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_ac.c @@ -11,7 +11,6 @@ void infrared_scene_universal_ac_on_enter(void* context) { infrared_brute_force_set_db_filename(brute_force, EXT_PATH("infrared/assets/ac.ir")); - //TODO Improve A/C universal remote button_panel_reserve(button_panel, 2, 3); uint32_t i = 0; button_panel_add_item( @@ -20,77 +19,74 @@ void infrared_scene_universal_ac_on_enter(void* context) { 0, 0, 3, - 24, - &I_Power_25x27, - &I_Power_hvr_25x27, + 22, + &I_Off_25x27, + &I_Off_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "POWER"); + infrared_brute_force_add_record(brute_force, i++, "Off"); button_panel_add_item( button_panel, i, 1, 0, 36, - 24, - &I_Mode_25x27, - &I_Mode_hvr_25x27, + 22, + &I_Dehumidify_25x27, + &I_Dehumidify_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "MODE"); + infrared_brute_force_add_record(brute_force, i++, "Dh"); button_panel_add_item( button_panel, i, 0, 1, 3, - 66, - &I_Vol_up_25x27, - &I_Vol_up_hvr_25x27, + 59, + &I_CoolHi_25x27, + &I_CoolHi_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "TEMP+"); + infrared_brute_force_add_record(brute_force, i++, "Cool_hi"); button_panel_add_item( button_panel, i, 1, 1, 36, - 66, - &I_Vol_down_25x27, - &I_Vol_down_hvr_25x27, + 59, + &I_HeatHi_25x27, + &I_HeatHi_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "TEMP-"); + infrared_brute_force_add_record(brute_force, i++, "Heat_hi"); button_panel_add_item( button_panel, i, 0, 2, 3, - 98, - &I_Swing_25x27, - &I_Swing_hvr_25x27, + 91, + &I_CoolLo_25x27, + &I_CoolLo_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "SWING"); + infrared_brute_force_add_record(brute_force, i++, "Cool_lo"); button_panel_add_item( button_panel, i, 1, 2, 36, - 98, - &I_Timer_25x27, - &I_Timer_hvr_25x27, + 91, + &I_HeatLo_25x27, + &I_HeatLo_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "TIMER"); + infrared_brute_force_add_record(brute_force, i++, "Heat_lo"); - button_panel_add_label(button_panel, 6, 11, FontPrimary, "AC remote"); - button_panel_add_label(button_panel, 20, 63, FontSecondary, "Temp"); - button_panel_add_label(button_panel, 8, 23, FontSecondary, "Pwr"); - button_panel_add_label(button_panel, 40, 23, FontSecondary, "Mod"); + button_panel_add_label(button_panel, 6, 10, FontPrimary, "AC remote"); view_set_orientation(view_stack_get_view(infrared->view_stack), ViewOrientationVertical); view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewStack); diff --git a/applications/main/infrared/scenes/infrared_scene_universal_audio.c b/applications/main/infrared/scenes/infrared_scene_universal_audio.c index d3b7e083b0..00c86fff4a 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_audio.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_audio.c @@ -10,8 +10,8 @@ void infrared_scene_universal_audio_on_enter(void* context) { InfraredBruteForce* brute_force = infrared->brute_force; infrared_brute_force_set_db_filename(brute_force, EXT_PATH("infrared/assets/audio.ir")); - //TODO Improve Audio universal remote - button_panel_reserve(button_panel, 2, 2); + + button_panel_reserve(button_panel, 2, 4); uint32_t i = 0; button_panel_add_item( button_panel, @@ -19,51 +19,98 @@ void infrared_scene_universal_audio_on_enter(void* context) { 0, 0, 3, - 19, + 11, &I_Power_25x27, &I_Power_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "POWER"); + infrared_brute_force_add_record(brute_force, i++, "Power"); button_panel_add_item( button_panel, i, 1, 0, 36, - 19, + 11, &I_Mute_25x27, &I_Mute_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "MUTE"); + infrared_brute_force_add_record(brute_force, i++, "Mute"); button_panel_add_item( button_panel, i, 0, 1, 3, - 64, - &I_Vol_up_25x27, - &I_Vol_up_hvr_25x27, + 41, + &I_Play_25x27, + &I_Play_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL+"); + infrared_brute_force_add_record(brute_force, i++, "Play"); button_panel_add_item( button_panel, i, 1, 1, 36, - 64, + 41, + &I_Pause_25x27, + &I_Pause_hvr_25x27, + infrared_scene_universal_common_item_callback, + context); + infrared_brute_force_add_record(brute_force, i++, "Pause"); + button_panel_add_item( + button_panel, + i, + 0, + 2, + 3, + 71, + &I_TrackPrev_25x27, + &I_TrackPrev_hvr_25x27, + infrared_scene_universal_common_item_callback, + context); + infrared_brute_force_add_record(brute_force, i++, "Prev"); + button_panel_add_item( + button_panel, + i, + 1, + 2, + 36, + 71, + &I_TrackNext_25x27, + &I_TrackNext_hvr_25x27, + infrared_scene_universal_common_item_callback, + context); + infrared_brute_force_add_record(brute_force, i++, "Next"); + button_panel_add_item( + button_panel, + i, + 0, + 3, + 3, + 101, &I_Vol_down_25x27, &I_Vol_down_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL-"); + infrared_brute_force_add_record(brute_force, i++, "Vol_dn"); + button_panel_add_item( + button_panel, + i, + 1, + 3, + 36, + 101, + &I_Vol_up_25x27, + &I_Vol_up_hvr_25x27, + infrared_scene_universal_common_item_callback, + context); + infrared_brute_force_add_record(brute_force, i++, "Vol_up"); - button_panel_add_label(button_panel, 5, 11, FontSecondary, "Audio remote"); - button_panel_add_label(button_panel, 17, 60, FontSecondary, "Volume"); + button_panel_add_label(button_panel, 1, 8, FontPrimary, "Mus. remote"); view_set_orientation(view_stack_get_view(infrared->view_stack), ViewOrientationVertical); view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewStack); diff --git a/applications/main/infrared/scenes/infrared_scene_universal_fan.c b/applications/main/infrared/scenes/infrared_scene_universal_fan.c index 37657ac3c7..967e15c240 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_fan.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_fan.c @@ -25,7 +25,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Power_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "POWER"); + infrared_brute_force_add_record(brute_force, i++, "Power"); button_panel_add_item( button_panel, i, @@ -37,7 +37,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Mode_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "MODE"); + infrared_brute_force_add_record(brute_force, i++, "Mode"); button_panel_add_item( button_panel, i, @@ -49,7 +49,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Vol_up_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "SPEED+"); + infrared_brute_force_add_record(brute_force, i++, "Speed_up"); button_panel_add_item( button_panel, i, @@ -61,7 +61,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Vol_down_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "SPEED-"); + infrared_brute_force_add_record(brute_force, i++, "Speed_dn"); button_panel_add_item( button_panel, i, @@ -73,7 +73,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Rotate_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "ROTATE"); + infrared_brute_force_add_record(brute_force, i++, "Rotate"); button_panel_add_item( button_panel, i, @@ -85,7 +85,7 @@ void infrared_scene_universal_fan_on_enter(void* context) { &I_Timer_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "TIMER"); + infrared_brute_force_add_record(brute_force, i++, "Timer"); button_panel_add_label(button_panel, 5, 11, FontPrimary, "Fan remote"); button_panel_add_label(button_panel, 20, 63, FontSecondary, "Speed"); diff --git a/applications/main/infrared/scenes/infrared_scene_universal_projector.c b/applications/main/infrared/scenes/infrared_scene_universal_projector.c index 11a0077f5e..32d84dde62 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_projector.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_projector.c @@ -24,7 +24,7 @@ void infrared_scene_universal_projector_on_enter(void* context) { &I_Power_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "POWER"); + infrared_brute_force_add_record(brute_force, i++, "Power"); button_panel_add_item( button_panel, i, @@ -36,7 +36,7 @@ void infrared_scene_universal_projector_on_enter(void* context) { &I_Mute_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "MUTE"); + infrared_brute_force_add_record(brute_force, i++, "Mute"); button_panel_add_item( button_panel, i, @@ -48,7 +48,7 @@ void infrared_scene_universal_projector_on_enter(void* context) { &I_Vol_up_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL+"); + infrared_brute_force_add_record(brute_force, i++, "Vol_up"); button_panel_add_item( button_panel, i, @@ -60,7 +60,7 @@ void infrared_scene_universal_projector_on_enter(void* context) { &I_Vol_down_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL-"); + infrared_brute_force_add_record(brute_force, i++, "Vol_dn"); button_panel_add_label(button_panel, 10, 11, FontPrimary, "Projector"); button_panel_add_label(button_panel, 17, 60, FontSecondary, "Volume"); diff --git a/applications/main/infrared/scenes/infrared_scene_universal_tv.c b/applications/main/infrared/scenes/infrared_scene_universal_tv.c index 583f21fa34..e21bf8f906 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_tv.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_tv.c @@ -24,7 +24,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Power_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "POWER"); + infrared_brute_force_add_record(brute_force, i++, "Power"); button_panel_add_item( button_panel, i, @@ -36,7 +36,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Mute_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "MUTE"); + infrared_brute_force_add_record(brute_force, i++, "Mute"); button_panel_add_item( button_panel, i, @@ -48,7 +48,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Vol_up_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL+"); + infrared_brute_force_add_record(brute_force, i++, "Vol_up"); button_panel_add_item( button_panel, i, @@ -60,7 +60,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Up_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "CH+"); + infrared_brute_force_add_record(brute_force, i++, "Ch_next"); button_panel_add_item( button_panel, i, @@ -72,7 +72,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Vol_down_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "VOL-"); + infrared_brute_force_add_record(brute_force, i++, "Vol_dn"); button_panel_add_item( button_panel, i, @@ -84,7 +84,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { &I_Down_hvr_25x27, infrared_scene_universal_common_item_callback, context); - infrared_brute_force_add_record(brute_force, i++, "CH-"); + infrared_brute_force_add_record(brute_force, i++, "Ch_prev"); button_panel_add_label(button_panel, 6, 11, FontPrimary, "TV remote"); button_panel_add_label(button_panel, 9, 64, FontSecondary, "Vol"); diff --git a/applications/main/lfrfid/helpers/rfid_writer.c b/applications/main/lfrfid/helpers/rfid_writer.c deleted file mode 100644 index 7cc6326c4c..0000000000 --- a/applications/main/lfrfid/helpers/rfid_writer.c +++ /dev/null @@ -1,96 +0,0 @@ -#include "rfid_writer.h" -#include - -void writer_start() { - furi_hal_rfid_tim_read(125000, 0.5); - furi_hal_rfid_pins_read(); - furi_hal_rfid_tim_read_start(); - - // do not ground the antenna - furi_hal_rfid_pin_pull_release(); -} - -void writer_stop() { - furi_hal_rfid_tim_read_stop(); - furi_hal_rfid_tim_reset(); - furi_hal_rfid_pins_reset(); -} - -void write_gap(uint32_t gap_time) { - furi_hal_rfid_tim_read_stop(); - furi_delay_us(gap_time * 8); - furi_hal_rfid_tim_read_start(); -} - -void write_bit(T55xxTiming* t55xxtiming, bool value) { - if(value) { - furi_delay_us(t55xxtiming->data_1 * 8); - } else { - furi_delay_us(t55xxtiming->data_0 * 8); - } - write_gap(t55xxtiming->write_gap); -} - -void write_block( - T55xxTiming* t55xxtiming, - uint8_t page, - uint8_t block, - bool lock_bit, - uint32_t data, - bool password_enable, - uint32_t password) { - furi_delay_us(t55xxtiming->wait_time * 8); - - //client: https://github.com/Proxmark/proxmark3/blob/6116334485ca77343eda51c557cdc81032afcf38/client/cmdlft55xx.c#L944 - //hardware: https://github.com/Proxmark/proxmark3/blob/555fa197730c061bbf0ab01334e99bc47fb3dc06/armsrc/lfops.c#L1465 - //hardware: https://github.com/Proxmark/proxmark3/blob/555fa197730c061bbf0ab01334e99bc47fb3dc06/armsrc/lfops.c#L1396 - - // start gap - write_gap(t55xxtiming->start_gap); - - // opcode - switch(page) { - case 0: - write_bit(t55xxtiming, 1); - write_bit(t55xxtiming, 0); - break; - case 1: - write_bit(t55xxtiming, 1); - write_bit(t55xxtiming, 1); - break; - default: - furi_check(false); - break; - } - - // password - if(password_enable) { - for(uint8_t i = 0; i < 32; i++) { - write_bit(t55xxtiming, (password >> (31 - i)) & 1); - } - } - - // lock bit - write_bit(t55xxtiming, lock_bit); - - // data - for(uint8_t i = 0; i < 32; i++) { - write_bit(t55xxtiming, (data >> (31 - i)) & 1); - } - - // block address - write_bit(t55xxtiming, (block >> 2) & 1); - write_bit(t55xxtiming, (block >> 1) & 1); - write_bit(t55xxtiming, (block >> 0) & 1); - - furi_delay_us(t55xxtiming->program * 8); - - furi_delay_us(t55xxtiming->wait_time * 8); - write_reset(t55xxtiming); -} - -void write_reset(T55xxTiming* t55xxtiming) { - write_gap(t55xxtiming->start_gap); - write_bit(t55xxtiming, 1); - write_bit(t55xxtiming, 0); -} \ No newline at end of file diff --git a/applications/main/lfrfid/helpers/rfid_writer.h b/applications/main/lfrfid/helpers/rfid_writer.h deleted file mode 100644 index 2b97bd321b..0000000000 --- a/applications/main/lfrfid/helpers/rfid_writer.h +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -typedef struct { - uint16_t wait_time; - uint8_t start_gap; - uint8_t write_gap; - uint8_t data_0; - uint8_t data_1; - uint16_t program; -} T55xxTiming; - -void writer_start(); -void writer_stop(); -void write_gap(uint32_t gap_time); -void write_bit(T55xxTiming* t55xxtiming, bool value); -void write_block( - T55xxTiming* t55xxtiming, - uint8_t page, - uint8_t block, - bool lock_bit, - uint32_t data, - bool password_enable, - uint32_t password); - -void write_reset(T55xxTiming* t55xxtiming); \ No newline at end of file diff --git a/applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c b/applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c index 3b9b419097..08636e0361 100644 --- a/applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c +++ b/applications/main/lfrfid/scenes/lfrfid_scene_clear_t5577.c @@ -1,17 +1,7 @@ #include "../lfrfid_i.h" -#include "../helpers/rfid_writer.h" - -static void writer_initialize(T55xxTiming* t55xxtiming) { - t55xxtiming->wait_time = 400; - t55xxtiming->start_gap = 30; - t55xxtiming->write_gap = 18; - t55xxtiming->data_0 = 24; - t55xxtiming->data_1 = 56; - t55xxtiming->program = 700; -} +#define TAG "Clear T5577" static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) { - T55xxTiming* t55xxtiming = malloc(sizeof(T55xxTiming)); Popup* popup = app->popup; char curr_buf[32] = {}; //TODO: use .txt file in resources for passwords. @@ -35,30 +25,27 @@ static void lfrfid_clear_t5577_password_and_config_to_EM(LfRfid* app) { 0x07d7bb0b, 0x9636ef8f, 0xb5f44686, 0x9E3779B9, 0xC6EF3720, 0x7854794A, 0xF1EA5EED, 0x69314718, 0x57721566, 0x93C467E3, 0x27182818, 0x50415353}; const uint8_t default_passwords_len = sizeof(default_passwords) / sizeof(uint32_t); - const uint32_t em_config_block_data = - 0b00000000000101001000000001000000; //no pwd&aor config block - - writer_initialize(t55xxtiming); popup_set_header(popup, "Removing\npassword", 90, 36, AlignCenter, AlignCenter); popup_set_icon(popup, 0, 3, &I_RFIDDolphinSend_97x61); popup_set_text(popup, curr_buf, 90, 56, AlignCenter, AlignCenter); notification_message(app->notifications, &sequence_blink_start_magenta); + LFRFIDT5577 data = { + .block[0] = 0b00000000000101001000000001000000, + .blocks_to_write = 1, + }; + for(uint8_t i = 0; i < default_passwords_len; i++) { - FURI_CRITICAL_ENTER(); snprintf(curr_buf, sizeof(curr_buf), "Pass %d of %d", i, default_passwords_len); view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidViewPopup); - writer_start(); - write_block(t55xxtiming, 0, 0, false, em_config_block_data, true, default_passwords[i]); - write_reset(t55xxtiming); - writer_stop(); - FURI_CRITICAL_EXIT(); + + t5577_write_with_pass(&data, default_passwords[i]); furi_delay_ms(8); } + notification_message(app->notifications, &sequence_blink_stop); popup_reset(app->popup); - free(t55xxtiming); } void lfrfid_scene_clear_t5577_on_enter(void* context) { diff --git a/applications/main/nfc/scenes/nfc_scene_config.h b/applications/main/nfc/scenes/nfc_scene_config.h index 445c4436a7..aea59957d8 100644 --- a/applications/main/nfc/scenes/nfc_scene_config.h +++ b/applications/main/nfc/scenes/nfc_scene_config.h @@ -20,6 +20,7 @@ ADD_SCENE(nfc, nfcv_key_input, NfcVKeyInput) ADD_SCENE(nfc, nfcv_unlock, NfcVUnlock) ADD_SCENE(nfc, nfcv_emulate, NfcVEmulate) ADD_SCENE(nfc, nfcv_sniff, NfcVSniff) +ADD_SCENE(nfc, nfcv_read_success, NfcVReadSuccess) ADD_SCENE(nfc, mf_ultralight_read_success, MfUltralightReadSuccess) ADD_SCENE(nfc, mf_ultralight_data, MfUltralightData) ADD_SCENE(nfc, mf_ultralight_menu, MfUltralightMenu) diff --git a/applications/main/nfc/scenes/nfc_scene_device_info.c b/applications/main/nfc/scenes/nfc_scene_device_info.c index 9780ffe41d..5d51c0816c 100644 --- a/applications/main/nfc/scenes/nfc_scene_device_info.c +++ b/applications/main/nfc/scenes/nfc_scene_device_info.c @@ -52,6 +52,7 @@ void nfc_scene_device_info_on_enter(void* context) { } } else if( dev_data->protocol == NfcDeviceProtocolMifareClassic || + dev_data->protocol == NfcDeviceProtocolMifareDesfire || dev_data->protocol == NfcDeviceProtocolMifareUl) { furi_string_set(temp_str, nfc->dev->dev_data.parsed_data); } diff --git a/applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c b/applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c index 39030397fc..633549eb5d 100644 --- a/applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c +++ b/applications/main/nfc/scenes/nfc_scene_mf_desfire_read_success.c @@ -20,35 +20,40 @@ void nfc_scene_mf_desfire_read_success_on_enter(void* context) { Widget* widget = nfc->widget; // Prepare string for data display - FuriString* temp_str = furi_string_alloc_printf("\e#MIFARE DESfire\n"); - furi_string_cat_printf(temp_str, "UID:"); - for(size_t i = 0; i < nfc_data->uid_len; i++) { - furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); - } + FuriString* temp_str = NULL; + if(furi_string_size(nfc->dev->dev_data.parsed_data)) { + temp_str = furi_string_alloc_set(nfc->dev->dev_data.parsed_data); + } else { + temp_str = furi_string_alloc_printf("\e#MIFARE DESFire\n"); + furi_string_cat_printf(temp_str, "UID:"); + for(size_t i = 0; i < nfc_data->uid_len; i++) { + furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); + } - uint32_t bytes_total = 1UL << (data->version.sw_storage >> 1); - uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0; - furi_string_cat_printf(temp_str, "\n%lu", bytes_total); - if(data->version.sw_storage & 1) { - furi_string_push_back(temp_str, '+'); - } - furi_string_cat_printf(temp_str, " bytes, %lu bytes free\n", bytes_free); - - uint16_t n_apps = 0; - uint16_t n_files = 0; - for(MifareDesfireApplication* app = data->app_head; app; app = app->next) { - n_apps++; - for(MifareDesfireFile* file = app->file_head; file; file = file->next) { - n_files++; + uint32_t bytes_total = 1UL << (data->version.sw_storage >> 1); + uint32_t bytes_free = data->free_memory ? data->free_memory->bytes : 0; + furi_string_cat_printf(temp_str, "\n%lu", bytes_total); + if(data->version.sw_storage & 1) { + furi_string_push_back(temp_str, '+'); + } + furi_string_cat_printf(temp_str, " bytes, %lu bytes free\n", bytes_free); + + uint16_t n_apps = 0; + uint16_t n_files = 0; + for(MifareDesfireApplication* app = data->app_head; app; app = app->next) { + n_apps++; + for(MifareDesfireFile* file = app->file_head; file; file = file->next) { + n_files++; + } + } + furi_string_cat_printf(temp_str, "%d Application", n_apps); + if(n_apps != 1) { + furi_string_push_back(temp_str, 's'); + } + furi_string_cat_printf(temp_str, ", %d file", n_files); + if(n_files != 1) { + furi_string_push_back(temp_str, 's'); } - } - furi_string_cat_printf(temp_str, "%d Application", n_apps); - if(n_apps != 1) { - furi_string_push_back(temp_str, 's'); - } - furi_string_cat_printf(temp_str, ", %d file", n_files); - if(n_files != 1) { - furi_string_push_back(temp_str, 's'); } notification_message_block(nfc->notifications, &sequence_set_green_255); diff --git a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c index 38f3e75c71..eb2f939c60 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c +++ b/applications/main/nfc/scenes/nfc_scene_nfc_data_info.c @@ -7,17 +7,6 @@ void nfc_scene_nfc_data_info_widget_callback(GuiButtonType result, InputType typ } } -uint32_t nfc_scene_nfc_data_info_get_key(uint8_t* data) { - uint32_t value = 0; - - for(uint32_t pos = 0; pos < 4; pos++) { - value <<= 8; - value |= data[pos]; - } - - return value; -} - void nfc_scene_nfc_data_info_on_enter(void* context) { Nfc* nfc = context; Widget* widget = nfc->widget; @@ -26,7 +15,7 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { NfcProtocol protocol = dev_data->protocol; uint8_t text_scroll_height = 0; if((protocol == NfcDeviceProtocolMifareDesfire) || (protocol == NfcDeviceProtocolMifareUl) || - (protocol == NfcDeviceProtocolMifareClassic) || (protocol == NfcDeviceProtocolNfcV)) { + (protocol == NfcDeviceProtocolMifareClassic)) { widget_add_button_element( widget, GuiButtonTypeRight, "More", nfc_scene_nfc_data_info_widget_callback, nfc); text_scroll_height = 52; @@ -51,7 +40,7 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { furi_string_cat_printf( temp_str, "\e#%s\n", nfc_mf_classic_type(dev_data->mf_classic_data.type)); } else if(protocol == NfcDeviceProtocolMifareDesfire) { - furi_string_cat_printf(temp_str, "\e#MIFARE DESfire\n"); + furi_string_cat_printf(temp_str, "\e#MIFARE DESFire\n"); } else if(protocol == NfcDeviceProtocolNfcV) { switch(dev_data->nfcv_data.sub_type) { case NfcVTypePlain: @@ -101,25 +90,6 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { furi_string_cat_printf(temp_str, "Blocks: %02X\n", nfcv_data->block_num); furi_string_cat_printf(temp_str, "Blocksize: %02X\n", nfcv_data->block_size); - furi_string_cat_printf( - temp_str, "Data (%d byte)\n", nfcv_data->block_num * nfcv_data->block_size); - - int maxBlocks = nfcv_data->block_num; - if(maxBlocks > 32) { - maxBlocks = 32; - furi_string_cat_printf(temp_str, "(truncated to %d blocks)\n", maxBlocks); - } - - for(int block = 0; block < maxBlocks; block++) { - const char* status = (nfcv_data->security_status[block] & 0x01) ? "(lck)" : ""; - for(int pos = 0; pos < nfcv_data->block_size; pos++) { - furi_string_cat_printf( - temp_str, " %02X", nfcv_data->data[block * nfcv_data->block_size + pos]); - } - furi_string_cat_printf(temp_str, " %s\n", status); - } - furi_string_cat_printf(temp_str, "\n"); - switch(dev_data->nfcv_data.sub_type) { case NfcVTypePlain: furi_string_cat_printf(temp_str, "Type: Plain\n"); @@ -129,77 +99,96 @@ void nfc_scene_nfc_data_info_on_enter(void* context) { furi_string_cat_printf(temp_str, "Keys:\n"); furi_string_cat_printf( temp_str, - " EAS %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + " EAS %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_eas, 4)); break; case NfcVTypeSlixS: furi_string_cat_printf(temp_str, "Type: SLIX-S\n"); furi_string_cat_printf(temp_str, "Keys:\n"); furi_string_cat_printf( temp_str, - " Read %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_read)); + " Read %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_read, 4)); furi_string_cat_printf( temp_str, - " Write %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_write)); + " Write %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_write, 4)); furi_string_cat_printf( temp_str, - " Privacy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + " Privacy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_privacy, 4)); furi_string_cat_printf( temp_str, - " Destroy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + " Destroy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_destroy, 4)); furi_string_cat_printf( temp_str, - " EAS %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + " EAS %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_eas, 4)); break; case NfcVTypeSlixL: furi_string_cat_printf(temp_str, "Type: SLIX-L\n"); furi_string_cat_printf(temp_str, "Keys:\n"); furi_string_cat_printf( temp_str, - " Privacy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + " Privacy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_privacy, 4)); furi_string_cat_printf( temp_str, - " Destroy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + " Destroy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_destroy, 4)); furi_string_cat_printf( temp_str, - " EAS %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + " EAS %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_eas, 4)); break; case NfcVTypeSlix2: furi_string_cat_printf(temp_str, "Type: SLIX2\n"); furi_string_cat_printf(temp_str, "Keys:\n"); furi_string_cat_printf( temp_str, - " Read %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_read)); + " Read %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_read, 4)); furi_string_cat_printf( temp_str, - " Write %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_write)); + " Write %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_write, 4)); furi_string_cat_printf( temp_str, - " Privacy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_privacy)); + " Privacy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_privacy, 4)); furi_string_cat_printf( temp_str, - " Destroy %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_destroy)); + " Destroy %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_destroy, 4)); furi_string_cat_printf( temp_str, - " EAS %08lX\n", - nfc_scene_nfc_data_info_get_key(nfcv_data->sub_data.slix.key_eas)); + " EAS %08llX\n", + nfc_util_bytes2num(nfcv_data->sub_data.slix.key_eas, 4)); break; default: furi_string_cat_printf(temp_str, "\e#ISO15693 (unknown)\n"); break; } + + furi_string_cat_printf( + temp_str, "Data (%d byte)\n", nfcv_data->block_num * nfcv_data->block_size); + + int maxBlocks = nfcv_data->block_num; + if(maxBlocks > 32) { + maxBlocks = 32; + furi_string_cat_printf(temp_str, "(truncated to %d blocks)\n", maxBlocks); + } + + for(int block = 0; block < maxBlocks; block++) { + const char* status = (nfcv_data->security_status[block] & 0x01) ? "(lck)" : ""; + for(int pos = 0; pos < nfcv_data->block_size; pos++) { + furi_string_cat_printf( + temp_str, " %02X", nfcv_data->data[block * nfcv_data->block_size + pos]); + } + furi_string_cat_printf(temp_str, " %s\n", status); + } + } else { char iso_type = FURI_BIT(nfc_data->sak, 5) ? '4' : '3'; furi_string_cat_printf(temp_str, "ISO 14443-%c (NFC-A)\n", iso_type); diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c index ca10f5d6e1..3dd7c460b5 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_emulate.c @@ -8,13 +8,14 @@ enum { }; bool nfc_scene_nfcv_emulate_worker_callback(NfcWorkerEvent event, void* context) { - UNUSED(event); furi_assert(context); Nfc* nfc = context; switch(event) { case NfcWorkerEventNfcVCommandExecuted: - view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventUpdateLog); + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventUpdateLog); + } break; case NfcWorkerEventNfcVContentChanged: view_dispatcher_send_custom_event(nfc->view_dispatcher, NfcCustomEventSaveShadow); @@ -46,9 +47,9 @@ static void nfc_scene_nfcv_emulate_widget_config(Nfc* nfc, bool data_received) { FuriString* info_str; info_str = furi_string_alloc(); - widget_add_icon_element(widget, 0, 3, &I_RFIDDolphinSend_97x61); - widget_add_string_element( - widget, 89, 32, AlignCenter, AlignTop, FontPrimary, "Emulating NfcV"); + widget_add_icon_element(widget, 0, 3, &I_NFC_dolphin_emulation_47x61); + widget_add_string_multiline_element( + widget, 87, 13, AlignCenter, AlignTop, FontPrimary, "Emulating\nNFC V"); if(strcmp(nfc->dev->dev_name, "")) { furi_string_printf(info_str, "%s", nfc->dev->dev_name); } else { @@ -58,11 +59,13 @@ static void nfc_scene_nfcv_emulate_widget_config(Nfc* nfc, bool data_received) { } furi_string_trim(info_str); widget_add_text_box_element( - widget, 56, 43, 70, 21, AlignCenter, AlignTop, furi_string_get_cstr(info_str), true); + widget, 52, 40, 70, 21, AlignCenter, AlignTop, furi_string_get_cstr(info_str), true); furi_string_free(info_str); if(data_received) { - widget_add_button_element( - widget, GuiButtonTypeCenter, "Log", nfc_scene_nfcv_emulate_widget_callback, nfc); + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + widget_add_button_element( + widget, GuiButtonTypeCenter, "Log", nfc_scene_nfcv_emulate_widget_callback, nfc); + } } } @@ -127,9 +130,11 @@ bool nfc_scene_nfcv_emulate_on_event(void* context, SceneManagerEvent event) { } consumed = true; } else if(event.event == GuiButtonTypeCenter && state == NfcSceneNfcVEmulateStateWidget) { - view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); - scene_manager_set_scene_state( - nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateTextBox); + if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) { + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewTextBox); + scene_manager_set_scene_state( + nfc->scene_manager, NfcSceneNfcVEmulate, NfcSceneNfcVEmulateStateTextBox); + } consumed = true; } else if(event.event == NfcCustomEventViewExit && state == NfcSceneNfcVEmulateStateTextBox) { view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c index 44d6775132..7c6780b7c7 100644 --- a/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_menu.c @@ -4,6 +4,7 @@ enum SubmenuIndex { SubmenuIndexSave, SubmenuIndexEmulate, + SubmenuIndexInfo, }; void nfc_scene_nfcv_menu_submenu_callback(void* context, uint32_t index) { @@ -19,6 +20,7 @@ void nfc_scene_nfcv_menu_on_enter(void* context) { submenu_add_item( submenu, "Emulate", SubmenuIndexEmulate, nfc_scene_nfcv_menu_submenu_callback, nfc); submenu_add_item(submenu, "Save", SubmenuIndexSave, nfc_scene_nfcv_menu_submenu_callback, nfc); + submenu_add_item(submenu, "Info", SubmenuIndexInfo, nfc_scene_nfcv_menu_submenu_callback, nfc); submenu_set_selected_item( nfc->submenu, scene_manager_get_scene_state(nfc->scene_manager, NfcSceneNfcVMenu)); @@ -45,6 +47,9 @@ bool nfc_scene_nfcv_menu_on_event(void* context, SceneManagerEvent event) { DOLPHIN_DEED(DolphinDeedNfcEmulate); } consumed = true; + } else if(event.event == SubmenuIndexInfo) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo); + consumed = true; } scene_manager_set_scene_state(nfc->scene_manager, NfcSceneNfcVMenu, event.event); diff --git a/applications/main/nfc/scenes/nfc_scene_nfcv_read_success.c b/applications/main/nfc/scenes/nfc_scene_nfcv_read_success.c new file mode 100644 index 0000000000..bdf7692ccb --- /dev/null +++ b/applications/main/nfc/scenes/nfc_scene_nfcv_read_success.c @@ -0,0 +1,94 @@ +#include "../nfc_i.h" + +void nfc_scene_nfcv_read_success_widget_callback( + GuiButtonType result, + InputType type, + void* context) { + furi_assert(context); + Nfc* nfc = context; + + if(type == InputTypeShort) { + view_dispatcher_send_custom_event(nfc->view_dispatcher, result); + } +} + +void nfc_scene_nfcv_read_success_on_enter(void* context) { + Nfc* nfc = context; + NfcDeviceData* dev_data = &nfc->dev->dev_data; + FuriHalNfcDevData* nfc_data = &nfc->dev->dev_data.nfc_data; + NfcVData* nfcv_data = &nfc->dev->dev_data.nfcv_data; + // Setup view + Widget* widget = nfc->widget; + widget_add_button_element( + widget, GuiButtonTypeLeft, "Retry", nfc_scene_nfcv_read_success_widget_callback, nfc); + widget_add_button_element( + widget, GuiButtonTypeRight, "More", nfc_scene_nfcv_read_success_widget_callback, nfc); + + FuriString* temp_str = furi_string_alloc(); + + switch(dev_data->nfcv_data.sub_type) { + case NfcVTypePlain: + furi_string_cat_printf(temp_str, "\e#ISO15693\n"); + break; + case NfcVTypeSlix: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX\n"); + break; + case NfcVTypeSlixS: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX-S\n"); + break; + case NfcVTypeSlixL: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX-L\n"); + break; + case NfcVTypeSlix2: + furi_string_cat_printf(temp_str, "\e#ISO15693 SLIX2\n"); + break; + default: + furi_string_cat_printf(temp_str, "\e#ISO15693 (unknown)\n"); + break; + } + furi_string_cat_printf(temp_str, "UID:"); + for(size_t i = 0; i < nfc_data->uid_len; i++) { + furi_string_cat_printf(temp_str, " %02X", nfc_data->uid[i]); + } + furi_string_cat_printf(temp_str, "\n"); + furi_string_cat_printf(temp_str, "Blocks: %02X\n", nfcv_data->block_num); + furi_string_cat_printf(temp_str, "Blocksize: %02X\n", nfcv_data->block_size); + + widget_add_text_scroll_element(widget, 0, 0, 128, 52, furi_string_get_cstr(temp_str)); + furi_string_free(temp_str); + + notification_message_block(nfc->notifications, &sequence_set_green_255); + + view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); +} + +bool nfc_scene_nfcv_read_success_on_event(void* context, SceneManagerEvent event) { + Nfc* nfc = context; + bool consumed = false; + + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == GuiButtonTypeLeft) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneRetryConfirm); + consumed = true; + } else if(event.event == GuiButtonTypeRight) { + // Clear device name + nfc_device_set_name(nfc->dev, ""); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVMenu); + consumed = true; + } + } else if(event.type == SceneManagerEventTypeBack) { + scene_manager_next_scene(nfc->scene_manager, NfcSceneExitConfirm); + consumed = true; + } + + return consumed; +} + +void nfc_scene_nfcv_read_success_on_exit(void* context) { + Nfc* nfc = context; + + notification_message_block(nfc->notifications, &sequence_reset_green); + + // Clear view + widget_reset(nfc->widget); +} diff --git a/applications/main/nfc/scenes/nfc_scene_read.c b/applications/main/nfc/scenes/nfc_scene_read.c index d30706c5b2..2f2f9ac017 100644 --- a/applications/main/nfc/scenes/nfc_scene_read.c +++ b/applications/main/nfc/scenes/nfc_scene_read.c @@ -70,7 +70,7 @@ bool nfc_scene_read_on_event(void* context, SceneManagerEvent event) { consumed = true; } else if(event.event == NfcWorkerEventReadNfcV) { notification_message(nfc->notifications, &sequence_success); - scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcDataInfo); + scene_manager_next_scene(nfc->scene_manager, NfcSceneNfcVReadSuccess); DOLPHIN_DEED(DolphinDeedNfcReadSuccess); consumed = true; } else if(event.event == NfcWorkerEventReadMfUltralight) { diff --git a/applications/main/nfc/scenes/nfc_scene_saved_menu.c b/applications/main/nfc/scenes/nfc_scene_saved_menu.c index ae2f5ef6b1..4371db48ba 100644 --- a/applications/main/nfc/scenes/nfc_scene_saved_menu.c +++ b/applications/main/nfc/scenes/nfc_scene_saved_menu.c @@ -152,6 +152,7 @@ bool nfc_scene_saved_menu_on_event(void* context, SceneManagerEvent event) { application_info_present = true; } else if( dev_data->protocol == NfcDeviceProtocolMifareClassic || + dev_data->protocol == NfcDeviceProtocolMifareDesfire || dev_data->protocol == NfcDeviceProtocolMifareUl) { application_info_present = nfc_supported_card_verify_and_parse(dev_data); } diff --git a/applications/main/subghz/helpers/subghz_error_type.h b/applications/main/subghz/helpers/subghz_error_type.h index e481aa4be8..0f86d6ea7d 100644 --- a/applications/main/subghz/helpers/subghz_error_type.h +++ b/applications/main/subghz/helpers/subghz_error_type.h @@ -10,4 +10,5 @@ typedef enum { 1, /** File parsing error, or wrong file structure, or missing required parameters. more accurate data can be obtained through the debug port */ SubGhzErrorTypeOnlyRX = 2, /** Transmission on this frequency is blocked by regional settings */ + SubGhzErrorTypeParserOthers = 3, /** Error in protocol parameters description */ } SubGhzErrorType; diff --git a/applications/main/subghz/helpers/subghz_txrx.c b/applications/main/subghz/helpers/subghz_txrx.c index c1f519ba0d..3275b72880 100644 --- a/applications/main/subghz/helpers/subghz_txrx.c +++ b/applications/main/subghz/helpers/subghz_txrx.c @@ -1,5 +1,6 @@ #include "subghz_txrx_i.h" #include +#include #define TAG "SubGhz" @@ -557,6 +558,13 @@ bool subghz_txrx_get_debug_pin_state(SubGhzTxRx* instance) { return instance->debug_pin_state; } +void subghz_txrx_reset_dynamic_and_custom_btns(SubGhzTxRx* instance) { + furi_assert(instance); + subghz_environment_reset_keeloq(instance->environment); + + subghz_custom_btns_reset(); +} + SubGhzReceiver* subghz_txrx_get_receiver(SubGhzTxRx* instance) { furi_assert(instance); return instance->receiver; diff --git a/applications/main/subghz/helpers/subghz_txrx.h b/applications/main/subghz/helpers/subghz_txrx.h index fd7c024b82..6ad5d97bd2 100644 --- a/applications/main/subghz/helpers/subghz_txrx.h +++ b/applications/main/subghz/helpers/subghz_txrx.h @@ -293,4 +293,6 @@ void subghz_txrx_set_raw_file_encoder_worker_callback_end( void subghz_txrx_set_debug_pin_state(SubGhzTxRx* instance, bool state); bool subghz_txrx_get_debug_pin_state(SubGhzTxRx* instance); +void subghz_txrx_reset_dynamic_and_custom_btns(SubGhzTxRx* instance); + SubGhzReceiver* subghz_txrx_get_receiver(SubGhzTxRx* instance); // TODO use only in DecodeRaw diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_info.c b/applications/main/subghz/scenes/subghz_scene_receiver_info.c index 2d89de731e..e3ff485d22 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_info.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_info.c @@ -1,7 +1,5 @@ #include "../subghz_i.h" #include "../helpers/subghz_custom_event.h" -#include -#include #include @@ -108,7 +106,6 @@ void subghz_scene_receiver_info_draw_widget(SubGhz* subghz) { void subghz_scene_receiver_info_on_enter(void* context) { SubGhz* subghz = context; - keeloq_reset_original_btn(); subghz_custom_btns_reset(); subghz_scene_receiver_info_draw_widget(subghz); @@ -191,10 +188,5 @@ void subghz_scene_receiver_info_on_exit(void* context) { SubGhz* subghz = context; widget_reset(subghz->widget); - keeloq_reset_mfname(); - keeloq_reset_kl_type(); - keeloq_reset_original_btn(); - subghz_custom_btns_reset(); - star_line_reset_mfname(); - star_line_reset_kl_type(); + subghz_txrx_reset_dynamic_and_custom_btns(subghz->txrx); } diff --git a/applications/main/subghz/scenes/subghz_scene_rpc.c b/applications/main/subghz/scenes/subghz_scene_rpc.c index ef718c4e12..724abaf3e4 100644 --- a/applications/main/subghz/scenes/subghz_scene_rpc.c +++ b/applications/main/subghz/scenes/subghz_scene_rpc.c @@ -1,6 +1,4 @@ #include "../subghz_i.h" -#include -#include #include @@ -44,15 +42,26 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) { } else if(event.event == SubGhzCustomEventSceneRpcButtonPress) { bool result = false; if((state == SubGhzRpcStateLoaded)) { - result = subghz_tx_start(subghz, subghz_txrx_get_fff_data(subghz->txrx)); - state = SubGhzRpcStateTx; - if(result) subghz_blink_start(subghz); - } - if(!result) { - rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX); - rpc_system_app_set_error_text( - subghz->rpc_ctx, - "Transmission on this frequency is restricted in your settings"); + switch( + subghz_txrx_tx_start(subghz->txrx, subghz_txrx_get_fff_data(subghz->txrx))) { + case SubGhzTxRxStartTxStateErrorOnlyRx: + rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX); + rpc_system_app_set_error_text( + subghz->rpc_ctx, + "Transmission on this frequency is restricted in your settings"); + break; + case SubGhzTxRxStartTxStateErrorParserOthers: + rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeParserOthers); + rpc_system_app_set_error_text( + subghz->rpc_ctx, "Error in protocol parameters description"); + break; + + default: //if(SubGhzTxRxStartTxStateOk) + result = true; + subghz_blink_start(subghz); + state = SubGhzRpcStateTx; + break; + } } rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonPress, result); } else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) { @@ -60,9 +69,9 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) { if(state == SubGhzRpcStateTx) { subghz_txrx_stop(subghz->txrx); subghz_blink_stop(subghz); - state = SubGhzRpcStateIdle; result = true; } + state = SubGhzRpcStateIdle; rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonRelease, result); } else if(event.event == SubGhzCustomEventSceneRpcLoad) { bool result = false; @@ -99,7 +108,7 @@ void subghz_scene_rpc_on_exit(void* context) { SubGhz* subghz = context; SubGhzRpcState state = scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneRpc); - if(state != SubGhzRpcStateIdle) { + if(state == SubGhzRpcStateTx) { subghz_txrx_stop(subghz->txrx); subghz_blink_stop(subghz); } @@ -110,10 +119,5 @@ void subghz_scene_rpc_on_exit(void* context) { popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop); popup_set_icon(popup, 0, 0, NULL); - keeloq_reset_mfname(); - keeloq_reset_kl_type(); - keeloq_reset_original_btn(); - subghz_custom_btns_reset(); - star_line_reset_mfname(); - star_line_reset_kl_type(); + subghz_txrx_reset_dynamic_and_custom_btns(subghz->txrx); } diff --git a/applications/main/subghz/scenes/subghz_scene_transmitter.c b/applications/main/subghz/scenes/subghz_scene_transmitter.c index 15a53603d3..ab5605f952 100644 --- a/applications/main/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/main/subghz/scenes/subghz_scene_transmitter.c @@ -1,8 +1,6 @@ #include "../subghz_i.h" #include "../views/transmitter.h" #include -#include -#include #include @@ -46,7 +44,6 @@ bool subghz_scene_transmitter_update_data_show(void* context) { void subghz_scene_transmitter_on_enter(void* context) { SubGhz* subghz = context; - keeloq_reset_original_btn(); subghz_custom_btns_reset(); if(!subghz_scene_transmitter_update_data_show(subghz)) { @@ -107,10 +104,6 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) { void subghz_scene_transmitter_on_exit(void* context) { SubGhz* subghz = context; subghz->state_notifications = SubGhzNotificationStateIDLE; - keeloq_reset_mfname(); - keeloq_reset_kl_type(); - keeloq_reset_original_btn(); - subghz_custom_btns_reset(); - star_line_reset_mfname(); - star_line_reset_kl_type(); + + subghz_txrx_reset_dynamic_and_custom_btns(subghz->txrx); } diff --git a/applications/main/subghz/subghz_cli.c b/applications/main/subghz/subghz_cli.c index f30578fb28..526567e608 100644 --- a/applications/main/subghz/subghz_cli.c +++ b/applications/main/subghz/subghz_cli.c @@ -172,16 +172,19 @@ void subghz_cli_command_tx(Cli* cli, FuriString* args, void* context) { furi_hal_power_suppress_charge_enter(); - furi_hal_subghz_start_async_tx(subghz_transmitter_yield, transmitter); + if(furi_hal_subghz_start_async_tx(subghz_transmitter_yield, transmitter)) { + while(!(furi_hal_subghz_is_async_tx_complete() || cli_cmd_interrupt_received(cli))) { + printf("."); + fflush(stdout); + furi_delay_ms(333); + } + furi_hal_subghz_stop_async_tx(); - while(!(furi_hal_subghz_is_async_tx_complete() || cli_cmd_interrupt_received(cli))) { - printf("."); - fflush(stdout); - furi_delay_ms(333); + } else { + printf("Transmission on this frequency is restricted in your region\r\n"); } - furi_hal_subghz_stop_async_tx(); - furi_hal_subghz_sleep(); + furi_hal_subghz_sleep(); furi_hal_power_suppress_charge_exit(); flipper_format_free(flipper_format); diff --git a/applications/main/subghz_remote/application.fam b/applications/main/subghz_remote/application.fam index e785043e64..804ac0b7cd 100644 --- a/applications/main/subghz_remote/application.fam +++ b/applications/main/subghz_remote/application.fam @@ -12,6 +12,6 @@ App( "dialogs", ], icon="A_SubGHzRemote_14", - stack_size=4 * 1024, + stack_size=2 * 1024, order=11, ) \ No newline at end of file diff --git a/applications/main/subghz_remote/helpers/subrem_custom_event.h b/applications/main/subghz_remote/helpers/subrem_custom_event.h index 46ab8ad547..8d93ab1fda 100644 --- a/applications/main/subghz_remote/helpers/subrem_custom_event.h +++ b/applications/main/subghz_remote/helpers/subrem_custom_event.h @@ -1,12 +1,14 @@ #pragma once typedef enum { - //SubmenuIndex - SubmenuIndexSubRemOpenMapFile, + // StartSubmenuIndex + SubmenuIndexSubRemOpenMapFile = 0, +#if FURI_DEBUG SubmenuIndexSubRemRemoteView, - SubmenuIndexSubRemAbout, +#endif + // SubmenuIndexSubRemAbout, - //SubRemCustomEvent + // SubRemCustomEvent SubRemCustomEventViewRemoteStartUP = 100, SubRemCustomEventViewRemoteStartDOWN, SubRemCustomEventViewRemoteStartLEFT, diff --git a/applications/main/subghz_remote/helpers/subrem_presets.c b/applications/main/subghz_remote/helpers/subrem_presets.c index 9601aae6ce..e5823b721d 100644 --- a/applications/main/subghz_remote/helpers/subrem_presets.c +++ b/applications/main/subghz_remote/helpers/subrem_presets.c @@ -8,7 +8,7 @@ SubRemSubFilePreset* subrem_sub_file_preset_alloc() { sub_preset->fff_data = flipper_format_string_alloc(); sub_preset->file_path = furi_string_alloc(); sub_preset->protocaol_name = furi_string_alloc(); - sub_preset->label = furi_string_alloc_set_str("N/A"); + sub_preset->label = furi_string_alloc(); sub_preset->freq_preset.name = furi_string_alloc(); @@ -34,7 +34,7 @@ void subrem_sub_file_preset_free(SubRemSubFilePreset* sub_preset) { void subrem_sub_file_preset_reset(SubRemSubFilePreset* sub_preset) { furi_assert(sub_preset); - furi_string_set_str(sub_preset->label, "N/A"); + furi_string_set_str(sub_preset->label, ""); furi_string_reset(sub_preset->protocaol_name); furi_string_reset(sub_preset->file_path); @@ -77,7 +77,7 @@ SubRemLoadSubState subrem_sub_preset_load( break; } - SubGhzSetting* setting = subghz_txrx_get_setting(txrx); // txrx->setting; + SubGhzSetting* setting = subghz_txrx_get_setting(txrx); //Load frequency or using default from settings ret = SubRemLoadSubStateErrorFreq; @@ -147,8 +147,7 @@ SubRemLoadSubState subrem_sub_preset_load( if(protocol->flag & SubGhzProtocolFlag_Send) { if((protocol->type == SubGhzProtocolTypeStatic) || (protocol->type == SubGhzProtocolTypeDynamic) || - // TODO: BINRAW It probably works, but checks are needed. - // (protocol->type == SubGhzProtocolTypeBinRAW) || + (protocol->type == SubGhzProtocolTypeBinRAW) || (protocol->type == SubGhzProtocolTypeRAW)) { sub_preset->type = protocol->type; } else { @@ -175,5 +174,6 @@ SubRemLoadSubState subrem_sub_preset_load( } while(false); furi_string_free(temp_str); + sub_preset->load_state = ret; return ret; } diff --git a/applications/main/subghz_remote/helpers/subrem_presets.h b/applications/main/subghz_remote/helpers/subrem_presets.h index fd4a2d7802..d66181b90d 100644 --- a/applications/main/subghz_remote/helpers/subrem_presets.h +++ b/applications/main/subghz_remote/helpers/subrem_presets.h @@ -1,9 +1,10 @@ #pragma once #include "subrem_types.h" +#include "txrx/subghz_txrx.h" + #include -#include -#include "../../subghz/helpers/subghz_txrx.h" +#include typedef struct { FuriString* name; diff --git a/applications/main/subghz_remote/helpers/subrem_types.h b/applications/main/subghz_remote/helpers/subrem_types.h index def8078988..b392de17e0 100644 --- a/applications/main/subghz_remote/helpers/subrem_types.h +++ b/applications/main/subghz_remote/helpers/subrem_types.h @@ -3,9 +3,8 @@ #include #include -// TODO: File version/type logic -// #define SUBREM_APP_APP_FILE_VERSION 1 -// #define SUBREM_APP_APP_FILE_TYPE "Flipper SubRem Map file" +#define SUBREM_APP_APP_FILE_VERSION 1 +#define SUBREM_APP_APP_FILE_TYPE "Flipper SubRem Map file" #define SUBREM_APP_EXTENSION ".txt" typedef enum { @@ -18,10 +17,7 @@ typedef enum { } SubRemSubKeyName; typedef enum { - SubRemViewSubmenu, - SubRemViewWidget, - SubRemViewPopup, - SubRemViewTextInput, + SubRemViewIDSubmenu, SubRemViewIDRemote, } SubRemViewID; @@ -29,6 +25,7 @@ typedef enum { SubRemLoadSubStateNotSet = 0, SubRemLoadSubStatePreloaded, SubRemLoadSubStateError, + SubRemLoadSubStateErrorIncorectPath, SubRemLoadSubStateErrorNoFile, SubRemLoadSubStateErrorFreq, SubRemLoadSubStateErrorMod, diff --git a/applications/main/subghz_remote/helpers/txrx/Readme.md b/applications/main/subghz_remote/helpers/txrx/Readme.md new file mode 100644 index 0000000000..9181601980 --- /dev/null +++ b/applications/main/subghz_remote/helpers/txrx/Readme.md @@ -0,0 +1,4 @@ +This is part of the official `SubGhz` app from [flipperzero-firmware](https://github.com/flipperdevices/flipperzero-firmware/tree/3217f286f03da119398586daf94c0723d28b872a/applications/main/subghz) + +With changes from [unleashed-firmware +](https://github.com/DarkFlippers/unleashed-firmware/tree/3eac6ccd48a3851cf5d63bf7899b387a293e5319/applications/main/subghz) \ No newline at end of file diff --git a/applications/main/subghz_remote/helpers/txrx/subghz_txrx.h b/applications/main/subghz_remote/helpers/txrx/subghz_txrx.h new file mode 100644 index 0000000000..5241f402f8 --- /dev/null +++ b/applications/main/subghz_remote/helpers/txrx/subghz_txrx.h @@ -0,0 +1,3 @@ +#pragma once + +#include "../../../subghz/helpers/subghz_txrx.h" \ No newline at end of file diff --git a/applications/main/subghz_remote/scenes/subrem_scene_config.h b/applications/main/subghz_remote/scenes/subrem_scene_config.h index 93d4de642e..45e55850a1 100644 --- a/applications/main/subghz_remote/scenes/subrem_scene_config.h +++ b/applications/main/subghz_remote/scenes/subrem_scene_config.h @@ -1,3 +1,5 @@ +#ifndef SUBREM_LIGHT ADD_SCENE(subrem, start, Start) -ADD_SCENE(subrem, openmapfile, OpenMapFile) +#endif +ADD_SCENE(subrem, open_map_file, OpenMapFile) ADD_SCENE(subrem, remote, Remote) \ No newline at end of file diff --git a/applications/main/subghz_remote/scenes/subrem_scene_open_map_file.c b/applications/main/subghz_remote/scenes/subrem_scene_open_map_file.c new file mode 100644 index 0000000000..1e917580cc --- /dev/null +++ b/applications/main/subghz_remote/scenes/subrem_scene_open_map_file.c @@ -0,0 +1,43 @@ +#include "../subghz_remote_app_i.h" + +void subrem_scene_open_map_file_on_enter(void* context) { + furi_assert(context); + SubGhzRemoteApp* app = context; + + SubRemLoadMapState load_state = subrem_load_from_file(app); + + if(load_state == SubRemLoadMapStateOK || load_state == SubRemLoadMapStateNotAllOK) { + scene_manager_next_scene(app->scene_manager, SubRemSceneRemote); + } else { + if(load_state != SubRemLoadMapStateBack) { +#ifdef SUBREM_LIGHT + dialog_message_show_storage_error(app->dialogs, "Can't load\nMap file"); +#else + DialogMessage* message = dialog_message_alloc(); + + dialog_message_set_header(message, "Map File Error", 64, 8, AlignCenter, AlignCenter); + dialog_message_set_text( + message, "Can't load\nMap file", 64, 32, AlignCenter, AlignCenter); + dialog_message_set_buttons(message, "Back", NULL, NULL); + dialog_message_show(app->dialogs, message); + + dialog_message_free(message); +#endif + } + // TODO: Map Preset Reset + if(!scene_manager_previous_scene(app->scene_manager)) { + scene_manager_stop(app->scene_manager); + view_dispatcher_stop(app->view_dispatcher); + } + } +} + +bool subrem_scene_open_map_file_on_event(void* context, SceneManagerEvent event) { + UNUSED(context); + UNUSED(event); + return false; +} + +void subrem_scene_open_map_file_on_exit(void* context) { + UNUSED(context); +} diff --git a/applications/main/subghz_remote/scenes/subrem_scene_openmapfile.c b/applications/main/subghz_remote/scenes/subrem_scene_openmapfile.c deleted file mode 100644 index 796699c831..0000000000 --- a/applications/main/subghz_remote/scenes/subrem_scene_openmapfile.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "../subghz_remote_app_i.h" - -void subrem_scene_openmapfile_on_enter(void* context) { - SubGhzRemoteApp* app = context; - SubRemLoadMapState load_state = subrem_load_from_file(app); - - if(load_state != SubRemLoadMapStateOK && load_state != SubRemLoadMapStateNotAllOK && - load_state != SubRemLoadMapStateBack) { -#ifdef SUBREM_LIGHT - dialog_message_show_storage_error(app->dialogs, "Can't load\nMap file"); -#else - DialogMessage* message = dialog_message_alloc(); - - dialog_message_set_header(message, "Map File Error", 64, 8, AlignCenter, AlignCenter); - dialog_message_set_text(message, "Can't load\nMap file", 64, 32, AlignCenter, AlignCenter); - dialog_message_set_buttons(message, "Back", NULL, NULL); - dialog_message_show(app->dialogs, message); - - dialog_message_free(message); -#endif - } - if(load_state == SubRemLoadMapStateOK || load_state == SubRemLoadMapStateNotAllOK) { - scene_manager_next_scene(app->scene_manager, SubRemSceneRemote); - } else { - // TODO: Map Preset Reset - if(!scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, SubRemSceneStart)) { - scene_manager_stop(app->scene_manager); - view_dispatcher_stop(app->view_dispatcher); - } - } -} - -bool subrem_scene_openmapfile_on_event(void* context, SceneManagerEvent event) { - UNUSED(context); - UNUSED(event); - return false; -} - -void subrem_scene_openmapfile_on_exit(void* context) { - UNUSED(context); -} diff --git a/applications/main/subghz_remote/scenes/subrem_scene_remote.c b/applications/main/subghz_remote/scenes/subrem_scene_remote.c index eaa1c41d94..a2e307fd9c 100644 --- a/applications/main/subghz_remote/scenes/subrem_scene_remote.c +++ b/applications/main/subghz_remote/scenes/subrem_scene_remote.c @@ -35,24 +35,10 @@ static uint8_t subrem_scene_remote_event_to_index(SubRemCustomEvent event_id) { return ret; } -static bool subrem_scene_remote_update_data_show(void* context) { - SubGhzRemoteApp* app = context; - - const char* labels[SubRemSubKeyNameMaxCount]; - - for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { - labels[i] = furi_string_get_cstr(app->map_preset->subs_preset[i]->label); - } - - subrem_view_remote_add_data_to_show(app->subrem_remote_view, labels); - - return true; -} - void subrem_scene_remote_on_enter(void* context) { SubGhzRemoteApp* app = context; - subrem_scene_remote_update_data_show(app); + subrem_view_remote_update_data_labels(app->subrem_remote_view, app->map_preset->subs_preset); subrem_view_remote_set_callback(app->subrem_remote_view, subrem_scene_remote_callback, app); @@ -63,13 +49,9 @@ bool subrem_scene_remote_on_event(void* context, SceneManagerEvent event) { SubGhzRemoteApp* app = context; if(event.type == SceneManagerEventTypeCustom) { if(event.event == SubRemCustomEventViewRemoteBack) { - if(!scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, SubRemSceneOpenMapFile)) { - if(!scene_manager_search_and_switch_to_previous_scene( - app->scene_manager, SubRemSceneStart)) { - scene_manager_stop(app->scene_manager); - view_dispatcher_stop(app->view_dispatcher); - } + if(!scene_manager_previous_scene(app->scene_manager)) { + scene_manager_stop(app->scene_manager); + view_dispatcher_stop(app->view_dispatcher); } return true; } else if( diff --git a/applications/main/subghz_remote/scenes/subrem_scene_start.c b/applications/main/subghz_remote/scenes/subrem_scene_start.c index a4bfa50475..e780b54cea 100644 --- a/applications/main/subghz_remote/scenes/subrem_scene_start.c +++ b/applications/main/subghz_remote/scenes/subrem_scene_start.c @@ -33,13 +33,11 @@ void subrem_scene_start_on_enter(void* context) { // SubmenuIndexSubGhzRemoteAbout, // subrem_scene_start_submenu_callback, // app); - - // TODO: set scene state in subrem alloc - // submenu_set_selected_item( - // submenu, scene_manager_get_scene_state(app->scene_manager, SubRemSceneStart)); - submenu_set_selected_item(submenu, SubmenuIndexSubRemOpenMapFile); - - view_dispatcher_switch_to_view(app->view_dispatcher, SubRemViewSubmenu); +#ifndef SUBREM_LIGHT + submenu_set_selected_item( + submenu, scene_manager_get_scene_state(app->scene_manager, SubRemSceneStart)); +#endif + view_dispatcher_switch_to_view(app->view_dispatcher, SubRemViewIDSubmenu); } bool subrem_scene_start_on_event(void* context, SceneManagerEvent event) { @@ -50,6 +48,10 @@ bool subrem_scene_start_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { if(event.event == SubmenuIndexSubRemOpenMapFile) { +#ifndef SUBREM_LIGHT + scene_manager_set_scene_state( + app->scene_manager, SubRemSceneStart, SubmenuIndexSubRemOpenMapFile); +#endif scene_manager_next_scene(app->scene_manager, SubRemSceneOpenMapFile); consumed = true; } diff --git a/applications/main/subghz_remote/subghz_remote_app.c b/applications/main/subghz_remote/subghz_remote_app.c index e57b1ac2df..624a602ae9 100644 --- a/applications/main/subghz_remote/subghz_remote_app.c +++ b/applications/main/subghz_remote/subghz_remote_app.c @@ -1,7 +1,5 @@ #include "subghz_remote_app_i.h" -#include - static bool subghz_remote_app_custom_event_callback(void* context, uint32_t event) { furi_assert(context); SubGhzRemoteApp* app = context; @@ -70,9 +68,9 @@ SubGhzRemoteApp* subghz_remote_app_alloc() { // SubMenu app->submenu = submenu_alloc(); view_dispatcher_add_view( - app->view_dispatcher, SubRemViewSubmenu, submenu_get_view(app->submenu)); + app->view_dispatcher, SubRemViewIDSubmenu, submenu_get_view(app->submenu)); - //Dialog + // Dialog app->dialogs = furi_record_open(RECORD_DIALOGS); // Remote view @@ -91,12 +89,12 @@ SubGhzRemoteApp* subghz_remote_app_alloc() { subghz_txrx_set_need_save_callback(app->txrx, subrem_save_active_sub, app); - app->tx_running = false; - #ifdef SUBREM_LIGHT scene_manager_next_scene(app->scene_manager, SubRemSceneOpenMapFile); #else scene_manager_next_scene(app->scene_manager, SubRemSceneStart); + scene_manager_set_scene_state( + app->scene_manager, SubRemSceneStart, SubmenuIndexSubRemOpenMapFile); #endif return app; @@ -113,10 +111,10 @@ void subghz_remote_app_free(SubGhzRemoteApp* app) { furi_hal_subghz_init_radio_type(SubGhzRadioInternal); // Submenu - view_dispatcher_remove_view(app->view_dispatcher, SubRemViewSubmenu); + view_dispatcher_remove_view(app->view_dispatcher, SubRemViewIDSubmenu); submenu_free(app->submenu); - //Dialog + // Dialog furi_record_close(RECORD_DIALOGS); // Remote view diff --git a/applications/main/subghz_remote/subghz_remote_app_i.c b/applications/main/subghz_remote/subghz_remote_app_i.c index fb34b59f70..26659ccb1e 100644 --- a/applications/main/subghz_remote/subghz_remote_app_i.c +++ b/applications/main/subghz_remote/subghz_remote_app_i.c @@ -2,23 +2,18 @@ #include #include -#include - -#include "../subghz/helpers/subghz_txrx_i.h" +#include "helpers/txrx/subghz_txrx.h" // #include // #include +#ifdef APP_SUBGHZREMOTE +#include #include +#endif #define TAG "SubGhzRemote" -// XXX Using TxRx -// [x] use TxRx preset subrem_sub_preset_load & subrem_tx_start_sub -// [x] subrem_sub_preset_load & drop subrem_set_preset_data -// [x] subrem_tx_start_sub -// [x] subrem_tx_stop_sub - static const char* map_file_labels[SubRemSubKeyNameMaxCount][2] = { [SubRemSubKeyNameUp] = {"UP", "ULABEL"}, [SubRemSubKeyNameDown] = {"DOWN", "DLABEL"}, @@ -45,30 +40,25 @@ static SubRemLoadMapState subrem_map_preset_check( bool all_loaded = true; SubRemLoadMapState ret = SubRemLoadMapStateErrorBrokenFile; - SubRemLoadSubState sub_preset_loaded; + SubRemLoadSubState sub_loadig_state; SubRemSubFilePreset* sub_preset; for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { sub_preset = map_preset->subs_preset[i]; - sub_preset_loaded = SubRemLoadSubStateErrorNoFile; + sub_loadig_state = SubRemLoadSubStateErrorNoFile; if(furi_string_empty(sub_preset->file_path)) { // FURI_LOG_I(TAG, "Empty file path"); } else if(!flipper_format_file_open_existing( fff_data_file, furi_string_get_cstr(sub_preset->file_path))) { + sub_preset->load_state = SubRemLoadSubStateErrorNoFile; FURI_LOG_W(TAG, "Error open file %s", furi_string_get_cstr(sub_preset->file_path)); } else { - sub_preset_loaded = subrem_sub_preset_load(sub_preset, txrx, fff_data_file); + sub_loadig_state = subrem_sub_preset_load(sub_preset, txrx, fff_data_file); } - // TODO: - // Load file state logic - // Label depending on the state - // Move to remote scene - - if(sub_preset_loaded != SubRemLoadSubStateOK) { - furi_string_set_str(sub_preset->label, "N/A"); + if(sub_loadig_state != SubRemLoadSubStateOK) { all_loaded = false; } else { ret = SubRemLoadMapStateNotAllOK; @@ -96,6 +86,9 @@ static bool subrem_map_preset_load(SubRemMapPreset* map_preset, FlipperFormat* f FURI_LOG_W(TAG, "No file patch for %s", map_file_labels[i][0]); #endif sub_preset->type = SubGhzProtocolTypeUnknown; + } else if(!path_contains_only_ascii(furi_string_get_cstr(sub_preset->file_path))) { + FURI_LOG_E(TAG, "Incorrect characters in [%s] file path", map_file_labels[i][0]); + sub_preset->type = SubGhzProtocolTypeUnknown; } else if(!flipper_format_rewind(fff_data_file)) { // Rewind error } else if(!flipper_format_read_string( @@ -103,8 +96,6 @@ static bool subrem_map_preset_load(SubRemMapPreset* map_preset, FlipperFormat* f #if FURI_DEBUG FURI_LOG_W(TAG, "No Label for %s", map_file_labels[i][0]); #endif - // TODO move to remote scene - path_extract_filename(sub_preset->file_path, sub_preset->label, true); ret = true; } else { ret = true; @@ -237,17 +228,15 @@ bool subrem_tx_start_sub(SubGhzRemoteApp* app, SubRemSubFilePreset* sub_preset) NULL, 0); - subghz_custom_btn_set(SUBGHZ_CUSTOM_BTN_OK); - keeloq_reset_original_btn(); +#ifdef APP_SUBGHZREMOTE subghz_custom_btns_reset(); +#endif if(subghz_txrx_tx_start(app->txrx, sub_preset->fff_data) == SubGhzTxRxStartTxStateOk) { ret = true; } } - app->tx_running = ret; - return ret; } @@ -256,22 +245,14 @@ bool subrem_tx_stop_sub(SubGhzRemoteApp* app, bool forced) { SubRemSubFilePreset* sub_preset = app->map_preset->subs_preset[app->chusen_sub]; if(forced || (sub_preset->type != SubGhzProtocolTypeRAW)) { - // XXX drop app->tx_running - if(app->tx_running) { - subghz_txrx_stop(app->txrx); - - if(sub_preset->type == SubGhzProtocolTypeDynamic) { - keeloq_reset_mfname(); - keeloq_reset_kl_type(); - keeloq_reset_original_btn(); - subghz_custom_btns_reset(); - star_line_reset_mfname(); - star_line_reset_kl_type(); - } - - app->tx_running = false; - return true; + subghz_txrx_stop(app->txrx); +#ifdef APP_SUBGHZREMOTE + if(sub_preset->type == SubGhzProtocolTypeDynamic) { + subghz_txrx_reset_dynamic_and_custom_btns(app->txrx); } + subghz_custom_btns_reset(); +#endif + return true; } return false; @@ -284,7 +265,7 @@ SubRemLoadMapState subrem_load_from_file(SubGhzRemoteApp* app) { SubRemLoadMapState ret = SubRemLoadMapStateBack; DialogsFileBrowserOptions browser_options; - dialog_file_browser_set_basic_options(&browser_options, SUBREM_APP_EXTENSION, &I_sub1_10px); + dialog_file_browser_set_basic_options(&browser_options, SUBREM_APP_EXTENSION, &I_subrem_10px); browser_options.base_path = SUBREM_APP_FOLDER; // Input events and views are managed by file_select diff --git a/applications/main/subghz_remote/subghz_remote_app_i.h b/applications/main/subghz_remote/subghz_remote_app_i.h index 50e2bae9f8..1ced74d114 100644 --- a/applications/main/subghz_remote/subghz_remote_app_i.h +++ b/applications/main/subghz_remote/subghz_remote_app_i.h @@ -2,34 +2,31 @@ #include "helpers/subrem_types.h" #include "helpers/subrem_presets.h" +#include "scenes/subrem_scene.h" -#include "../subghz/helpers/subghz_txrx.h" +#include "helpers/txrx/subghz_txrx.h" +#ifdef APP_SUBGHZREMOTE #include +#else +#include +#endif #include "views/remote.h" -#include "scenes/subrem_scene.h" - #include #include #include #include #include -#include #include +#include #include +#include #include -#include #include -#include - -#include -#include -#include - #define SUBREM_APP_FOLDER EXT_PATH("subghz_remote") #define SUBREM_MAX_LEN_NAME 64 @@ -42,7 +39,6 @@ typedef struct { Submenu* submenu; FuriString* file_path; - // char file_name_tmp[SUBREM_MAX_LEN_NAME]; SubRemViewRemote* subrem_remote_view; @@ -50,8 +46,6 @@ typedef struct { SubGhzTxRx* txrx; - bool tx_running; - uint8_t chusen_sub; } SubGhzRemoteApp; diff --git a/applications/main/subghz_remote/views/remote.c b/applications/main/subghz_remote/views/remote.c index e062f11b1d..c2b41cfd68 100644 --- a/applications/main/subghz_remote/views/remote.c +++ b/applications/main/subghz_remote/views/remote.c @@ -4,7 +4,11 @@ #include #include -#define SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH 12 +#include + +#define SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH 30 +#define SUBREM_VIEW_REMOTE_LEFT_OFFSET 10 +#define SUBREM_VIEW_REMOTE_RIGHT_OFFSET 22 struct SubRemViewRemote { View* view; @@ -12,19 +16,8 @@ struct SubRemViewRemote { void* context; }; -// TODO: model typedef struct { - // FuriString* up_label; - // FuriString* down_label; - // FuriString* left_label; - // FuriString* right_label; - // FuriString* ok_label; - - char* up_label; - char* down_label; - char* left_label; - char* right_label; - char* ok_label; + char* labels[SubRemSubKeyNameMaxCount]; SubRemViewRemoteState state; @@ -41,26 +34,61 @@ void subrem_view_remote_set_callback( subrem_view_remote->context = context; } -void subrem_view_remote_add_data_to_show(SubRemViewRemote* subrem_view_remote, const char** labels) { +void subrem_view_remote_update_data_labels( + SubRemViewRemote* subrem_view_remote, + SubRemSubFilePreset** subs_presets) { furi_assert(subrem_view_remote); + furi_assert(subs_presets); + + FuriString* labels[SubRemSubKeyNameMaxCount]; + SubRemSubFilePreset* sub_preset; + + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + sub_preset = subs_presets[i]; + switch(sub_preset->load_state) { + case SubRemLoadSubStateOK: + if(!furi_string_empty(sub_preset->label)) { + labels[i] = furi_string_alloc_set(sub_preset->label); + } else if(!furi_string_empty(sub_preset->file_path)) { + labels[i] = furi_string_alloc(); + path_extract_filename(sub_preset->file_path, labels[i], true); + } else { + labels[i] = furi_string_alloc_set("Empty Label"); + } + break; + + case SubRemLoadSubStateErrorNoFile: + labels[i] = furi_string_alloc_set("[X] Can't open file"); + break; + + case SubRemLoadSubStateErrorFreq: + case SubRemLoadSubStateErrorMod: + case SubRemLoadSubStateErrorProtocol: + labels[i] = furi_string_alloc_set("[X] Error in .sub file"); + break; + + default: + labels[i] = furi_string_alloc_set(""); + break; + } + } with_view_model( subrem_view_remote->view, SubRemViewRemoteModel * model, { - strncpy(model->up_label, labels[0], SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); - strncpy(model->down_label, labels[1], SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); - strncpy(model->left_label, labels[2], SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); - strncpy(model->right_label, labels[3], SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); - strncpy(model->ok_label, labels[4], SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); - - // furi_string_set(model->up_label, up_label); - // furi_string_set(model->down_label, down_label); - // furi_string_set(model->left_label, left_label); - // furi_string_set(model->right_label, right_label); - // furi_string_set(model->ok_label, ok_label); + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + strncpy( + model->labels[i], + furi_string_get_cstr(labels[i]), + SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH); + } }, true); + + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + furi_string_free(labels[i]); + } } void subrem_view_remote_set_state( @@ -95,24 +123,32 @@ void subrem_view_remote_draw(Canvas* canvas, SubRemViewRemoteModel* model) { //Labels canvas_set_font(canvas, FontSecondary); - canvas_draw_str(canvas, 10, 10, model->up_label); - canvas_draw_str(canvas, 10, 20, model->down_label); - canvas_draw_str(canvas, 10, 30, model->left_label); - canvas_draw_str(canvas, 10, 40, model->right_label); - canvas_draw_str(canvas, 10, 50, model->ok_label); - - // canvas_draw_str(canvas, 10, 10, furi_string_get_cstr(model->up_label)); - // canvas_draw_str(canvas, 10, 10, furi_string_get_cstr(model->up_label)); - // canvas_draw_str(canvas, 10, 10, furi_string_get_cstr(model->up_label)); - // canvas_draw_str(canvas, 10, 10, furi_string_get_cstr(model->up_label)); - // canvas_draw_str(canvas, 10, 10, furi_string_get_cstr(model->up_label)); + uint8_t y = 0; + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + elements_text_box( + canvas, + SUBREM_VIEW_REMOTE_LEFT_OFFSET, + y + 2, + 126 - SUBREM_VIEW_REMOTE_LEFT_OFFSET - SUBREM_VIEW_REMOTE_RIGHT_OFFSET, + 12, + AlignLeft, + AlignBottom, + model->labels[i], + false); + y += 10; + } - canvas_draw_str_aligned(canvas, 11, 62, AlignLeft, AlignBottom, "Hold=Exit."); + if(model->state == SubRemViewRemoteStateOFF) { + elements_button_left(canvas, "Back"); + elements_button_right(canvas, "Save"); + } else { + canvas_draw_str_aligned(canvas, 11, 62, AlignLeft, AlignBottom, "Hold=Exit."); + } //Status text and indicator canvas_draw_icon(canvas, 113, 15, &I_Pin_cell_13x13); - if(model->state == SubRemViewRemoteStateIdle) { + if(model->state == SubRemViewRemoteStateIdle || model->state == SubRemViewRemoteStateOFF) { canvas_draw_str_aligned(canvas, 126, 10, AlignRight, AlignBottom, "Idle"); } else { switch(model->state) { @@ -147,10 +183,6 @@ void subrem_view_remote_draw(Canvas* canvas, SubRemViewRemoteModel* model) { break; } } - //Repeat indicator - //canvas_draw_str_aligned(canvas, 125, 40, AlignRight, AlignBottom, "Repeat:"); - //canvas_draw_icon(canvas, 115, 39, &I_SubGHzRemote_Repeat_12x14); - //canvas_draw_str_aligned(canvas, 125, 62, AlignRight, AlignBottom, int_to_char(app->repeat)); } bool subrem_view_remote_input(InputEvent* event, void* context) { @@ -158,17 +190,6 @@ bool subrem_view_remote_input(InputEvent* event, void* context) { SubRemViewRemote* subrem_view_remote = context; if(event->key == InputKeyBack && event->type == InputTypeLong) { - with_view_model( - subrem_view_remote->view, - SubRemViewRemoteModel * model, - { - strcpy(model->up_label, "N/A"); - strcpy(model->down_label, "N/A"); - strcpy(model->left_label, "N/A"); - strcpy(model->right_label, "N/A"); - strcpy(model->ok_label, "N/A"); - }, - false); subrem_view_remote->callback(SubRemCustomEventViewRemoteBack, subrem_view_remote->context); return true; } else if(event->key == InputKeyBack && event->type == InputTypeShort) { @@ -240,23 +261,10 @@ SubRemViewRemote* subrem_view_remote_alloc() { { model->state = SubRemViewRemoteStateIdle; - model->up_label = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); - model->down_label = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); - model->left_label = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); - model->right_label = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); - model->ok_label = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); - - strcpy(model->up_label, "N/A"); - strcpy(model->down_label, "N/A"); - strcpy(model->left_label, "N/A"); - strcpy(model->right_label, "N/A"); - strcpy(model->ok_label, "N/A"); - - // model->up_label = furi_string_alloc_set_str("N/A"); - // model->down_label = furi_string_alloc_set_str("N/A"); - // model->left_label = furi_string_alloc_set_str("N/A"); - // model->right_label = furi_string_alloc_set_str("N/A"); - // model->ok_label = furi_string_alloc_set_str("N/A"); + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + model->labels[i] = malloc(sizeof(char) * SUBREM_VIEW_REMOTE_MAX_LABEL_LENGTH + 1); + strcpy(model->labels[i], ""); + } model->pressed_btn = 0; }, @@ -271,17 +279,9 @@ void subrem_view_remote_free(SubRemViewRemote* subghz_remote) { subghz_remote->view, SubRemViewRemoteModel * model, { - free(model->up_label); - free(model->down_label); - free(model->left_label); - free(model->right_label); - free(model->ok_label); - - // furi_string_free(model->up_label); - // furi_string_free(model->down_label); - // furi_string_free(model->left_label); - // furi_string_free(model->right_label); - // furi_string_free(model->ok_label); + for(uint8_t i = 0; i < SubRemSubKeyNameMaxCount; i++) { + free(model->labels[i]); + } }, true); view_free(subghz_remote->view); diff --git a/applications/main/subghz_remote/views/remote.h b/applications/main/subghz_remote/views/remote.h index ea274fca4f..5b1e8153ae 100644 --- a/applications/main/subghz_remote/views/remote.h +++ b/applications/main/subghz_remote/views/remote.h @@ -2,11 +2,13 @@ #include #include "../helpers/subrem_custom_event.h" +#include "../helpers/subrem_presets.h" typedef enum { SubRemViewRemoteStateIdle, SubRemViewRemoteStateLoading, SubRemViewRemoteStateSending, + SubRemViewRemoteStateOFF, } SubRemViewRemoteState; typedef struct SubRemViewRemote SubRemViewRemote; @@ -24,7 +26,9 @@ void subrem_view_remote_free(SubRemViewRemote* subrem_view_remote); View* subrem_view_remote_get_view(SubRemViewRemote* subrem_view_remote); -void subrem_view_remote_add_data_to_show(SubRemViewRemote* subrem_view_remote, const char** labels); +void subrem_view_remote_update_data_labels( + SubRemViewRemote* subrem_view_remote, + SubRemSubFilePreset** subs_presets); void subrem_view_remote_set_state( SubRemViewRemote* subrem_view_remote, diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index bad120abc7..88469af0fc 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -49,11 +49,32 @@ static void desktop_dummy_mode_icon_draw_callback(Canvas* canvas, void* context) canvas_draw_icon(canvas, 0, 0, &I_GameMode_11x8); } -static void desktop_toggle_clock_view(Desktop* desktop, bool is_enabled) { +static void desktop_clock_upd_time(Desktop* desktop, bool forced) { furi_assert(desktop); - // clock type upd after 1 minute - desktop->clock_type = (locale_get_time_format() == LocaleTimeFormat24h); + FuriHalRtcDateTime curr_dt; + furi_hal_rtc_get_datetime(&curr_dt); + + if(forced) { + desktop->clock_type = (locale_get_time_format() == LocaleTimeFormat24h); + } + + if(forced || (desktop->minute != curr_dt.minute)) { + if(desktop->clock_type) { + desktop->hour = curr_dt.hour; + } else { + desktop->hour = (curr_dt.hour > 12) ? curr_dt.hour - 12 : + ((curr_dt.hour == 0) ? 12 : curr_dt.hour); + } + desktop->minute = curr_dt.minute; + view_port_update(desktop->clock_viewport); + } +} + +static void desktop_clock_toggle_view(Desktop* desktop, bool is_enabled) { + furi_assert(desktop); + + desktop_clock_upd_time(desktop, true); if(is_enabled) { // && !furi_timer_is_running(desktop->update_clock_timer)) { furi_timer_start(desktop->update_clock_timer, furi_ms_to_ticks(1000)); @@ -141,7 +162,7 @@ static bool desktop_custom_event_callback(void* context, uint32_t event) { // locking and unlocking DESKTOP_SETTINGS_LOAD(&desktop->settings); - desktop_toggle_clock_view(desktop, desktop->settings.display_clock); + desktop_clock_toggle_view(desktop, desktop->settings.display_clock); desktop_auto_lock_arm(desktop); return true; @@ -208,24 +229,12 @@ static void desktop_auto_lock_inhibit(Desktop* desktop) { } } -static void desktop_update_clock_timer_callback(void* context) { +static void desktop_clock_timer_callback(void* context) { furi_assert(context); Desktop* desktop = context; if(gui_get_count_of_enabled_view_port_in_layer(desktop->gui, GuiLayerStatusBarLeft) < 6) { - FuriHalRtcDateTime curr_dt; - furi_hal_rtc_get_datetime(&curr_dt); - - if(desktop->minute != curr_dt.minute) { - if(desktop->clock_type) { - desktop->hour = curr_dt.hour; - } else { - desktop->hour = (curr_dt.hour > 12) ? curr_dt.hour - 12 : - ((curr_dt.hour == 0) ? 12 : curr_dt.hour); - } - desktop->minute = curr_dt.minute; - view_port_update(desktop->clock_viewport); - } + desktop_clock_upd_time(desktop, false); view_port_enabled_set(desktop->clock_viewport, true); } else { @@ -424,18 +433,12 @@ Desktop* desktop_alloc() { desktop->status_pubsub = furi_pubsub_alloc(); desktop->update_clock_timer = - furi_timer_alloc(desktop_update_clock_timer_callback, FuriTimerTypePeriodic, desktop); + furi_timer_alloc(desktop_clock_timer_callback, FuriTimerTypePeriodic, desktop); FuriHalRtcDateTime curr_dt; furi_hal_rtc_get_datetime(&curr_dt); - if(desktop->clock_type) { - desktop->hour = curr_dt.hour; - } else { - desktop->hour = (curr_dt.hour > 12) ? curr_dt.hour - 12 : - ((curr_dt.hour == 0) ? 12 : curr_dt.hour); - } - desktop->minute = curr_dt.minute; + desktop_clock_upd_time(desktop, true); furi_record_create(RECORD_DESKTOP, desktop); @@ -483,7 +486,7 @@ int32_t desktop_srv(void* p) { view_port_enabled_set(desktop->dummy_mode_icon_viewport, desktop->settings.dummy_mode); - desktop_toggle_clock_view(desktop, desktop->settings.display_clock); + desktop_clock_toggle_view(desktop, desktop->settings.display_clock); desktop_main_set_dummy_mode_state(desktop->main_view, desktop->settings.dummy_mode); animation_manager_set_dummy_mode_state( diff --git a/applications/services/desktop/scenes/desktop_scene_main.c b/applications/services/desktop/scenes/desktop_scene_main.c index 3d1b16c57a..ab3422b7f3 100644 --- a/applications/services/desktop/scenes/desktop_scene_main.c +++ b/applications/services/desktop/scenes/desktop_scene_main.c @@ -200,23 +200,23 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { break; } case DesktopMainEventOpenGameMenu: { - desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Snake.fap")); + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/snake.fap")); break; } case DesktopMainEventOpenTetris: { - desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Tetris.fap")); + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/tetris.fap")); break; } case DesktopMainEventOpenArkanoid: { - desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Arkanoid.fap")); + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/arkanoid.fap")); break; } case DesktopMainEventOpenDOOM: { - desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/DOOM.fap")); + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/doom.fap")); break; } case DesktopMainEventOpenZombiez: { - desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/Zombiez.fap")); + desktop_scene_main_open_app_or_profile(desktop, EXT_PATH("/apps/Games/zombiez.fap")); break; } case DesktopMainEventOpenHeap: { diff --git a/applications/services/gui/modules/text_input.c b/applications/services/gui/modules/text_input.c index 3e521c356e..446730e959 100644 --- a/applications/services/gui/modules/text_input.c +++ b/applications/services/gui/modules/text_input.c @@ -175,7 +175,7 @@ static void text_input_view_draw_callback(Canvas* canvas, void* _model) { canvas_draw_str(canvas, 2, 8, model->header); elements_slightly_rounded_frame(canvas, 1, 12, 126, 15); - char buf[model->text_buffer_size + 1]; + char buf[text_length + 1]; if(model->text_buffer) { strlcpy(buf, model->text_buffer, sizeof(buf)); } diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png new file mode 100644 index 0000000000..8b8dc80bce Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_0.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png new file mode 100644 index 0000000000..956de61707 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_1.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png new file mode 100644 index 0000000000..93fdaa0767 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_10.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png new file mode 100644 index 0000000000..a4e194825e Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_11.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png new file mode 100644 index 0000000000..9cbcbd070e Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_12.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png new file mode 100644 index 0000000000..a745cdb03f Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_13.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png new file mode 100644 index 0000000000..768f471ec1 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_14.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png new file mode 100644 index 0000000000..2f50fb8c94 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_15.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png new file mode 100644 index 0000000000..fc7b76696c Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_16.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png new file mode 100644 index 0000000000..013e2008a2 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_17.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png new file mode 100644 index 0000000000..795120e772 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_18.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png new file mode 100644 index 0000000000..52061a5a26 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_19.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png new file mode 100644 index 0000000000..10afed391e Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_2.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_20.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_20.png new file mode 100644 index 0000000000..52f87f3a88 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_20.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png new file mode 100644 index 0000000000..9696e0b5cc Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_21.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_22.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_22.png new file mode 100644 index 0000000000..d23ee492b0 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_22.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_23.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_23.png new file mode 100644 index 0000000000..9d368900c9 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_23.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_24.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_24.png new file mode 100644 index 0000000000..daf0788ad7 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_24.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_25.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_25.png new file mode 100644 index 0000000000..b40333654f Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_25.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_26.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_26.png new file mode 100644 index 0000000000..9d499f23d2 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_26.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_27.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_27.png new file mode 100644 index 0000000000..0291dfb583 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_27.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_28.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_28.png new file mode 100644 index 0000000000..54a889d815 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_28.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_29.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_29.png new file mode 100644 index 0000000000..ba79b3b88f Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_29.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png new file mode 100644 index 0000000000..bedf366c6c Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_3.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_30.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_30.png new file mode 100644 index 0000000000..0731760dff Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_30.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_31.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_31.png new file mode 100644 index 0000000000..898efdc4b8 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_31.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_32.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_32.png new file mode 100644 index 0000000000..39f5db8a01 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_32.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_33.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_33.png new file mode 100644 index 0000000000..bee4cff087 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_33.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_34.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_34.png new file mode 100644 index 0000000000..969b91193d Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_34.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_35.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_35.png new file mode 100644 index 0000000000..a72cf1823e Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_35.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_36.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_36.png new file mode 100644 index 0000000000..9a13e7c67d Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_36.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_37.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_37.png new file mode 100644 index 0000000000..da3ee77f30 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_37.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png new file mode 100644 index 0000000000..93da7f4f94 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_38.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png new file mode 100644 index 0000000000..7510931b44 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_39.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png new file mode 100644 index 0000000000..f99454b164 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_4.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_40.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_40.png new file mode 100644 index 0000000000..a17a14044a Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_40.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png new file mode 100644 index 0000000000..f763540c91 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_41.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_42.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_42.png new file mode 100644 index 0000000000..97a829e9b7 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_42.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_43.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_43.png new file mode 100644 index 0000000000..7eadf75185 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_43.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_44.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_44.png new file mode 100644 index 0000000000..5241195d32 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_44.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png new file mode 100644 index 0000000000..2a3ea8e23a Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_45.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png new file mode 100644 index 0000000000..f4b263b199 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_46.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png new file mode 100644 index 0000000000..1563ff39b2 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_47.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png new file mode 100644 index 0000000000..394bb53df4 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_5.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png new file mode 100644 index 0000000000..3f84ad47e3 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_6.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png new file mode 100644 index 0000000000..8ea650ad07 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_7.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png new file mode 100644 index 0000000000..2c8cf3f5d7 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_8.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png b/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png new file mode 100644 index 0000000000..caf6a90ef6 Binary files /dev/null and b/assets/dolphin/external/L1_Kaiju_128x64/frame_9.png differ diff --git a/assets/dolphin/external/L1_Kaiju_128x64/meta.txt b/assets/dolphin/external/L1_Kaiju_128x64/meta.txt new file mode 100644 index 0000000000..597f4b692a --- /dev/null +++ b/assets/dolphin/external/L1_Kaiju_128x64/meta.txt @@ -0,0 +1,50 @@ +Filetype: Flipper Animation +Version: 1 + +Width: 128 +Height: 64 +Passive frames: 16 +Active frames: 60 +Frames order: 0 1 2 1 0 3 4 5 6 3 7 1 8 1 7 9 0 10 11 12 13 14 15 16 14 12 17 18 19 20 21 22 22 23 22 24 25 26 27 26 25 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 19 18 14 45 14 45 14 45 14 45 14 16 14 14 11 46 47 1 +Active cycles: 1 +Frame rate: 2 +Duration: 3600 +Active cooldown: 7 + +Bubble slots: 1 + +Slot: 0 +X: 83 +Y: 42 +Text: Sup +AlignH: Left +AlignV: Top +StartFrame: 38 +EndFrame: 40 + +Slot: 0 +X: 66 +Y: 35 +Text: What just +AlignH: Left +AlignV: Center +StartFrame: 62 +EndFrame: 65 + +Slot: 0 +X: 66 +Y: 35 +Text: happened? +AlignH: Left +AlignV: Center +StartFrame: 66 +EndFrame: 68 + +Slot: 0 +X: 87 +Y: 38 +Text: Idk +AlignH: Left +AlignV: Top +StartFrame: 70 +EndFrame: 70 diff --git a/assets/dolphin/external/manifest.txt b/assets/dolphin/external/manifest.txt index 7092f05ce1..0c89e3744c 100644 --- a/assets/dolphin/external/manifest.txt +++ b/assets/dolphin/external/manifest.txt @@ -90,6 +90,13 @@ Min butthurt: 0 Max butthurt: 5 Min level: 1 Max level: 3 +Weight: 3 + +Name: L1_Kaiju_128x64 +Min butthurt: 0 +Max butthurt: 10 +Min level: 1 +Max level: 3 Weight: 4 Name: L2_Wake_up_128x64 diff --git a/assets/icons/Archive/subrem_10px.png b/assets/icons/Archive/subrem_10px.png new file mode 100644 index 0000000000..c6b410f4c5 Binary files /dev/null and b/assets/icons/Archive/subrem_10px.png differ diff --git a/assets/icons/Infrared/CoolHi_25x27.png b/assets/icons/Infrared/CoolHi_25x27.png new file mode 100644 index 0000000000..cea29a5b9e Binary files /dev/null and b/assets/icons/Infrared/CoolHi_25x27.png differ diff --git a/assets/icons/Infrared/CoolHi_hvr_25x27.png b/assets/icons/Infrared/CoolHi_hvr_25x27.png new file mode 100644 index 0000000000..692ac7b8be Binary files /dev/null and b/assets/icons/Infrared/CoolHi_hvr_25x27.png differ diff --git a/assets/icons/Infrared/CoolLo_25x27.png b/assets/icons/Infrared/CoolLo_25x27.png new file mode 100644 index 0000000000..23288e44f1 Binary files /dev/null and b/assets/icons/Infrared/CoolLo_25x27.png differ diff --git a/assets/icons/Infrared/CoolLo_hvr_25x27.png b/assets/icons/Infrared/CoolLo_hvr_25x27.png new file mode 100644 index 0000000000..ae5316e4d4 Binary files /dev/null and b/assets/icons/Infrared/CoolLo_hvr_25x27.png differ diff --git a/assets/icons/Infrared/Dehumidify_25x27.png b/assets/icons/Infrared/Dehumidify_25x27.png new file mode 100644 index 0000000000..dca77ae410 Binary files /dev/null and b/assets/icons/Infrared/Dehumidify_25x27.png differ diff --git a/assets/icons/Infrared/Dehumidify_hvr_25x27.png b/assets/icons/Infrared/Dehumidify_hvr_25x27.png new file mode 100644 index 0000000000..2c593ca8dc Binary files /dev/null and b/assets/icons/Infrared/Dehumidify_hvr_25x27.png differ diff --git a/assets/icons/Infrared/HeatHi_25x27.png b/assets/icons/Infrared/HeatHi_25x27.png new file mode 100644 index 0000000000..a1724f9955 Binary files /dev/null and b/assets/icons/Infrared/HeatHi_25x27.png differ diff --git a/assets/icons/Infrared/HeatHi_hvr_25x27.png b/assets/icons/Infrared/HeatHi_hvr_25x27.png new file mode 100644 index 0000000000..b92108d68d Binary files /dev/null and b/assets/icons/Infrared/HeatHi_hvr_25x27.png differ diff --git a/assets/icons/Infrared/HeatLo_25x27.png b/assets/icons/Infrared/HeatLo_25x27.png new file mode 100644 index 0000000000..af2e59d494 Binary files /dev/null and b/assets/icons/Infrared/HeatLo_25x27.png differ diff --git a/assets/icons/Infrared/HeatLo_hvr_25x27.png b/assets/icons/Infrared/HeatLo_hvr_25x27.png new file mode 100644 index 0000000000..6708edb360 Binary files /dev/null and b/assets/icons/Infrared/HeatLo_hvr_25x27.png differ diff --git a/assets/icons/Infrared/Off_25x27.png b/assets/icons/Infrared/Off_25x27.png new file mode 100644 index 0000000000..c15100606a Binary files /dev/null and b/assets/icons/Infrared/Off_25x27.png differ diff --git a/assets/icons/Infrared/Off_hvr_25x27.png b/assets/icons/Infrared/Off_hvr_25x27.png new file mode 100644 index 0000000000..d5e5e6f45d Binary files /dev/null and b/assets/icons/Infrared/Off_hvr_25x27.png differ diff --git a/assets/icons/Infrared/Pause_25x27.png b/assets/icons/Infrared/Pause_25x27.png new file mode 100644 index 0000000000..a371ba8171 Binary files /dev/null and b/assets/icons/Infrared/Pause_25x27.png differ diff --git a/assets/icons/Infrared/Pause_hvr_25x27.png b/assets/icons/Infrared/Pause_hvr_25x27.png new file mode 100644 index 0000000000..472d583db0 Binary files /dev/null and b/assets/icons/Infrared/Pause_hvr_25x27.png differ diff --git a/assets/icons/Infrared/Play_25x27.png b/assets/icons/Infrared/Play_25x27.png new file mode 100644 index 0000000000..fb793c5a9a Binary files /dev/null and b/assets/icons/Infrared/Play_25x27.png differ diff --git a/assets/icons/Infrared/Play_hvr_25x27.png b/assets/icons/Infrared/Play_hvr_25x27.png new file mode 100644 index 0000000000..6708dcdbf2 Binary files /dev/null and b/assets/icons/Infrared/Play_hvr_25x27.png differ diff --git a/assets/icons/Infrared/Swing_25x27.png b/assets/icons/Infrared/Swing_25x27.png deleted file mode 100644 index 38a6c9040e..0000000000 Binary files a/assets/icons/Infrared/Swing_25x27.png and /dev/null differ diff --git a/assets/icons/Infrared/Swing_hvr_25x27.png b/assets/icons/Infrared/Swing_hvr_25x27.png deleted file mode 100644 index 6e65b4e2e4..0000000000 Binary files a/assets/icons/Infrared/Swing_hvr_25x27.png and /dev/null differ diff --git a/assets/icons/Infrared/TrackNext_25x27.png b/assets/icons/Infrared/TrackNext_25x27.png new file mode 100644 index 0000000000..7b8f283915 Binary files /dev/null and b/assets/icons/Infrared/TrackNext_25x27.png differ diff --git a/assets/icons/Infrared/TrackNext_hvr_25x27.png b/assets/icons/Infrared/TrackNext_hvr_25x27.png new file mode 100644 index 0000000000..a4de4fc3cb Binary files /dev/null and b/assets/icons/Infrared/TrackNext_hvr_25x27.png differ diff --git a/assets/icons/Infrared/TrackPrev_25x27.png b/assets/icons/Infrared/TrackPrev_25x27.png new file mode 100644 index 0000000000..3cd2a8da67 Binary files /dev/null and b/assets/icons/Infrared/TrackPrev_25x27.png differ diff --git a/assets/icons/Infrared/TrackPrev_hvr_25x27.png b/assets/icons/Infrared/TrackPrev_hvr_25x27.png new file mode 100644 index 0000000000..838055341e Binary files /dev/null and b/assets/icons/Infrared/TrackPrev_hvr_25x27.png differ diff --git a/assets/resources/infrared/assets/ac.ir b/assets/resources/infrared/assets/ac.ir index 44f685bce2..cfbe0ea028 100644 --- a/assets/resources/infrared/assets/ac.ir +++ b/assets/resources/infrared/assets/ac.ir @@ -1,1820 +1,509 @@ Filetype: IR library file Version: 1 -# Last Updated 17th May, 2023 -# Last Checked 17th May, 2023 # -name: POWER +# Model: Electrolux EACM-16 HP/N3 +name: Off type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 8714 4338 579 538 551 540 549 542 557 1613 555 1615 553 538 551 540 549 1619 549 1620 558 1612 556 1614 554 1617 551 540 559 1611 557 1612 556 531 558 1613 555 536 553 538 551 1620 558 1612 556 535 554 537 552 535 554 537 552 1618 550 1620 558 533 556 536 553 1617 551 1617 551 1608 549 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8710 4341 576 541 558 533 556 535 554 1616 552 1618 550 542 557 533 556 1612 556 1614 554 1616 552 1618 550 1621 557 534 555 1615 553 1616 552 536 553 538 551 541 558 533 556 1613 555 537 552 539 550 541 558 528 550 1619 559 1610 557 1612 556 536 553 1616 552 1618 550 1619 559 1598 559 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8717 4334 583 534 555 537 552 539 550 1620 558 1611 557 535 554 536 553 1615 553 1617 551 1619 559 1611 557 1613 555 537 552 1617 551 1619 559 528 550 541 558 1612 556 535 554 1616 552 1619 549 543 556 534 555 532 557 1614 554 537 552 1619 559 533 556 535 554 1616 552 1617 551 1608 549 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8714 4337 580 538 551 540 559 533 556 1613 555 1615 553 539 550 541 558 1608 560 1611 557 1587 581 1590 578 1593 575 542 557 1613 555 1614 554 534 555 1615 553 539 550 1620 558 534 555 536 553 539 550 541 558 529 549 541 558 1612 556 536 553 1617 551 1619 559 1611 557 1613 555 1603 554 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8711 4341 576 541 558 534 555 536 553 1616 552 1618 549 542 557 533 556 1611 557 1613 555 1614 554 1616 552 1619 559 532 557 1613 555 1614 554 533 556 1614 554 538 551 541 558 1611 557 535 554 537 552 539 550 537 552 540 549 1620 558 1612 556 536 553 1617 550 1619 559 1610 558 1601 556 -# -# POWER_ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3829 1892 465 455 509 1427 437 466 487 1423 431 473 490 1418 436 483 459 1421 433 486 488 1420 434 443 510 1425 429 1436 439 481 483 1407 437 483 491 1392 462 1429 457 1397 489 1421 433 462 459 504 459 1394 491 1416 438 455 488 469 463 482 460 485 458 1422 432 487 456 489 464 440 513 1421 433 1432 432 487 487 1403 430 489 464 455 487 1410 486 1405 459 1421 433 487 456 490 432 499 464 1463 412 455 488 469 463 482 460 470 483 1409 435 484 458 461 481 1442 433 460 483 1415 460 470 462 483 459 470 462 483 459 486 436 501 431 499 464 465 457 488 465 1426 459 1395 490 1417 437 1427 437 481 461 483 438 492 461 484 437 492 461 484 437 492 461 485 437 493 460 485 437 492 461 1430 435 484 458 485 458 472 460 485 457 472 460 485 457 472 460 485 458 472 460 485 458 472 460 486 457 473 490 1418 436 1435 461 1404 460 1419 435 485 457 487 435 495 458 1433 432 487 487 1421 433 471 482 -# POWER_ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3094 3056 3095 4432 577 1651 570 535 575 1652 569 536 574 530 570 1657 575 1652 569 536 574 1652 569 536 574 1652 569 1657 575 530 570 535 575 1651 570 535 575 1650 571 1655 576 1650 571 534 576 529 571 534 576 528 572 533 577 527 573 532 568 536 574 530 570 534 576 528 572 532 578 526 574 531 569 1655 577 529 571 533 577 528 572 533 577 527 573 531 569 1656 576 529 571 1655 577 528 572 532 578 526 574 531 569 536 574 529 571 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 578 526 574 1651 570 534 576 528 572 533 577 527 573 532 568 536 574 530 570 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 568 536 574 530 570 534 576 528 572 532 568 536 574 529 571 534 576 527 573 531 569 536 574 529 571 1653 578 526 574 1652 569 536 574 529 571 1655 576 1649 572 1653 579 1647 574 531 569 1657 574 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5041 2133 360 1770 356 693 364 685 362 689 358 1772 364 686 361 689 358 692 365 684 363 1768 358 692 365 1767 359 1771 355 694 363 1769 357 1773 363 1768 358 1772 364 1767 359 689 358 692 365 1765 361 689 358 692 365 685 362 688 359 691 366 684 363 1767 359 1773 363 1768 358 1772 364 1767 359 689 358 1774 362 1769 357 691 366 684 363 687 360 690 357 693 364 685 362 689 358 691 366 684 363 687 360 690 357 693 364 1766 360 1773 363 1767 359 1771 355 694 363 687 360 690 357 693 364 29443 5038 2134 359 1774 362 686 361 689 358 692 365 1765 361 689 358 692 365 685 362 688 359 1771 365 685 362 1769 357 1775 361 687 360 1772 364 1767 359 1771 355 1776 360 1770 356 693 364 686 361 1799 327 693 364 686 361 689 358 692 365 685 362 688 359 691 356 694 363 686 361 689 358 1773 363 1769 357 691 366 684 363 1798 328 692 365 1767 359 1771 355 694 363 686 361 689 358 692 365 1765 361 1772 364 684 363 687 360 1801 335 684 363 687 360 690 357 693 364 686 361 1769 357 694 363 686 361 689 358 692 365 685 362 688 359 691 356 694 363 687 360 690 357 693 365 685 362 688 359 691 367 684 363 687 360 690 357 693 365 685 362 688 359 1772 364 1768 358 690 357 693 364 686 361 689 358 692 365 1765 361 689 358 692 365 685 362 688 359 691 356 694 363 687 360 689 358 1773 363 687 360 690 357 693 364 685 362 688 359 1772 364 686 361 1769 357 1776 360 1770 356 1775 361 687 360 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5039 2133 360 1773 363 685 362 688 359 691 356 1776 361 688 359 691 356 694 364 687 360 1772 364 684 363 1769 357 1773 363 685 362 1771 355 1775 361 1770 356 1774 362 1769 357 691 366 684 363 1769 357 692 365 684 363 687 360 690 357 693 364 686 361 1771 355 1776 360 1770 356 1775 361 1769 357 692 366 1766 360 1771 355 693 365 686 361 689 358 692 365 685 362 688 359 691 356 694 363 686 361 689 358 692 365 685 362 1770 356 1774 362 1769 357 1773 363 685 362 688 359 691 366 684 363 29445 5038 2134 359 1773 363 685 362 689 358 692 365 1766 360 689 358 692 365 684 363 687 360 1772 364 684 363 1770 356 1774 363 686 361 1772 354 1776 360 1770 356 1775 361 1769 357 692 365 685 362 1770 356 692 365 685 362 688 359 691 356 694 363 687 360 690 357 693 364 685 362 688 359 1773 363 1767 359 690 357 693 365 1768 358 690 357 1775 361 1769 357 692 365 685 362 688 359 691 356 694 364 1768 358 1773 363 685 362 1770 356 693 364 686 361 689 358 691 366 684 363 1769 357 692 365 684 363 687 360 690 357 693 364 686 361 689 358 692 365 684 363 687 360 690 357 693 364 686 361 689 358 692 365 685 362 688 359 691 356 694 363 686 361 1771 355 1776 360 688 359 691 367 684 363 687 360 690 357 1775 362 687 360 690 357 693 365 686 361 689 358 691 367 684 363 687 360 1772 364 684 363 687 360 690 357 693 365 686 361 1771 355 693 365 1768 358 690 357 1776 361 688 359 1773 363 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5035 2166 327 1776 360 688 359 691 356 694 364 1769 357 691 367 684 363 687 360 690 357 1775 362 687 360 1772 364 1766 360 689 358 1774 362 1768 358 1773 363 1767 359 1772 364 684 363 687 360 1772 364 684 363 687 360 690 357 693 365 686 361 689 358 1774 363 1768 358 1772 364 1767 359 1771 355 694 364 1769 357 1773 363 685 362 688 359 691 366 684 363 687 360 690 357 693 364 685 362 688 359 691 366 684 363 687 360 1772 364 1766 360 1771 355 1775 361 687 360 690 357 693 365 686 361 29447 5037 2136 357 1774 362 686 361 689 358 692 365 1767 359 689 358 692 366 685 362 687 360 1773 363 685 362 1770 356 1775 362 686 361 1772 364 1766 360 1771 355 1775 361 1770 356 692 365 685 362 1770 356 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 685 362 687 360 1773 363 1767 359 689 358 692 366 1767 359 690 357 1775 361 1769 357 1774 363 686 361 688 359 691 367 684 363 1769 357 1774 363 686 361 1771 355 693 365 686 361 689 358 1774 363 1768 358 1773 363 1767 359 689 358 692 365 685 362 688 359 691 356 694 363 686 361 689 358 692 365 685 362 688 359 691 356 694 364 686 361 689 358 693 364 685 362 688 359 691 356 1776 360 1770 356 693 365 685 362 688 359 691 367 684 363 1769 357 692 366 684 363 687 360 690 357 693 364 686 361 689 358 692 366 1766 360 689 358 692 365 685 362 688 359 1772 365 1767 359 689 358 1774 362 1768 358 691 356 1776 361 688 359 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5044 2130 363 1768 358 690 357 693 364 686 361 1771 355 694 363 686 361 689 358 692 366 1767 359 689 358 1774 363 1768 358 691 356 1776 361 1770 356 1775 362 1769 357 1773 363 685 362 719 328 1774 362 686 361 689 358 692 365 684 363 687 360 690 357 1775 362 1769 357 1774 362 1768 358 1773 363 685 362 1770 356 1775 361 687 360 690 357 693 365 685 362 688 359 691 367 684 363 687 360 690 357 693 365 685 362 688 359 1773 363 1767 359 1772 364 1766 360 688 359 691 366 684 363 687 360 29448 5036 2135 358 1775 362 686 361 689 358 692 366 1767 359 689 358 692 366 685 362 688 359 1773 364 685 362 1770 356 1774 363 686 361 1772 354 1776 361 1770 356 1775 362 1769 357 692 366 684 363 1769 357 692 365 684 363 687 360 690 357 693 365 686 361 689 358 692 366 684 363 687 360 1772 365 1766 360 689 358 692 365 1766 360 689 358 1774 363 1768 358 1773 363 685 362 688 359 691 356 1776 361 1770 356 692 366 685 362 1770 356 692 365 685 362 688 359 1773 364 1767 359 1771 355 1776 361 688 359 691 356 694 364 686 361 689 358 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 684 363 687 360 690 357 693 365 1768 358 1772 365 684 363 1769 357 692 366 684 363 687 360 690 357 693 365 1768 358 690 357 693 365 686 361 689 358 691 367 684 363 687 360 690 357 1775 362 687 360 689 358 692 366 685 362 1770 356 692 366 685 362 1770 356 692 366 1767 359 690 357 693 365 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5038 2134 359 1773 363 685 362 688 359 691 367 1766 360 688 359 691 356 694 364 686 361 1771 355 694 364 1768 358 1773 364 685 362 1770 356 1774 363 1768 358 1773 364 1767 359 689 358 692 366 1767 359 689 358 692 366 685 362 688 359 690 357 693 365 1768 358 1772 365 1767 359 1771 355 1775 362 687 360 1772 365 1767 359 689 358 692 366 684 363 687 360 690 357 693 365 686 361 689 358 691 367 684 363 687 360 690 357 1775 362 1769 357 1773 364 1767 359 690 357 693 365 685 362 688 359 29449 5037 2134 359 1773 364 685 362 688 359 691 356 1776 361 688 359 691 356 694 364 686 361 1771 355 693 365 1768 358 1773 364 685 362 1770 356 1774 363 1768 358 1773 364 1767 359 689 358 692 366 1767 359 689 358 692 366 685 362 688 359 690 357 693 365 686 361 689 358 692 366 684 363 1769 357 1774 363 685 362 689 358 1774 363 685 362 1770 356 1775 362 1769 357 691 367 684 363 687 360 1772 365 1766 360 688 359 691 367 1766 360 688 359 691 367 684 363 1769 357 1773 364 1767 359 1772 365 684 363 687 360 690 357 693 365 685 362 688 359 691 367 684 363 687 360 689 358 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 684 363 1769 357 1774 363 686 361 688 359 691 367 684 363 687 360 1772 354 694 364 686 361 689 358 692 366 685 362 688 359 691 356 694 364 1768 358 691 356 694 364 686 361 689 358 1774 363 1768 358 690 357 1775 362 687 360 1772 365 684 363 687 360 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3480 1701 468 1248 467 1250 465 407 460 411 467 405 462 1255 460 412 466 405 462 1255 460 1257 468 404 463 1253 462 410 468 404 463 1253 462 1255 470 402 465 1252 463 1254 461 411 467 405 462 1254 461 411 467 405 462 1254 461 411 467 405 462 409 469 403 464 407 460 411 467 405 462 409 469 403 464 407 461 411 467 405 462 409 469 403 464 407 460 411 467 404 463 1254 461 410 468 404 463 1254 461 410 468 404 463 408 460 412 466 406 462 1255 460 412 466 406 461 410 468 404 463 1253 462 1255 470 1247 468 404 463 409 469 402 465 406 461 411 467 1250 465 407 460 1256 469 1248 467 1250 465 1252 463 410 468 403 464 408 460 412 466 406 461 410 468 404 463 408 460 412 466 406 461 410 468 404 463 408 459 412 466 405 462 409 469 403 464 407 460 411 467 405 462 409 469 403 464 407 460 411 467 405 462 409 469 402 465 407 460 411 467 404 463 1253 462 1255 470 402 465 406 461 1256 469 402 465 1252 463 408 470 1248 467 1250 465 407 460 1256 469 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3477 1704 465 1251 463 1254 460 411 467 405 462 410 468 1249 465 406 461 410 468 1249 465 1252 462 409 469 1248 466 406 461 410 468 1249 465 1252 462 409 469 1248 466 1251 463 408 470 402 465 1252 462 409 469 403 464 1253 461 410 468 404 463 408 470 402 465 407 460 411 467 405 462 409 469 403 464 407 460 412 466 405 462 410 468 404 463 408 459 412 465 406 461 1255 470 402 465 407 460 1256 469 403 464 407 460 411 467 405 462 410 468 1249 465 406 461 410 468 404 463 408 470 1248 466 1250 464 1252 462 410 468 1249 465 407 460 411 467 405 462 1255 459 412 466 1251 463 1254 460 1256 469 1248 466 406 461 410 468 404 463 409 469 403 464 407 460 411 467 405 462 409 469 403 464 407 460 412 466 405 462 410 468 404 463 408 459 412 466 406 461 410 468 404 463 408 470 402 465 406 461 411 467 404 463 409 469 402 465 407 460 411 467 405 462 1254 460 1256 469 403 464 407 460 1257 468 404 463 1254 460 411 467 405 462 409 469 1249 465 1251 463 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3477 1703 466 1251 463 1253 461 411 467 404 463 409 469 1248 466 405 462 409 469 1249 465 1251 463 408 470 1248 466 405 462 409 469 1248 466 1251 463 408 459 1258 467 1250 464 407 460 411 467 1251 463 408 459 412 466 1251 463 408 470 402 465 406 461 411 467 405 462 409 469 403 464 407 460 411 467 405 462 409 469 403 464 407 460 411 467 405 462 409 469 403 464 1252 462 409 469 403 464 1253 461 410 468 404 463 408 470 402 465 407 460 1256 469 402 465 407 460 411 467 405 462 1254 460 1257 468 1249 465 406 461 411 467 1250 464 407 460 412 466 1251 463 408 470 1247 467 1250 464 1252 462 1255 470 402 465 406 461 411 467 405 462 409 469 403 464 407 460 411 467 405 462 409 469 403 464 408 459 412 466 406 461 410 468 404 463 408 459 412 466 406 461 410 468 404 463 408 470 402 465 406 461 410 468 404 463 409 469 402 465 407 460 411 467 1250 464 1252 462 409 469 403 464 1253 461 410 468 1250 464 407 460 1256 469 403 464 1253 461 1256 469 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3484 1696 462 1254 460 1257 468 404 463 408 470 402 465 1252 462 410 468 404 463 1253 461 1256 469 403 464 1253 461 410 468 404 463 1254 460 1257 468 403 464 1253 461 1256 469 403 464 407 460 1257 468 404 463 408 470 1248 466 405 462 409 469 403 464 408 459 412 466 406 461 410 468 404 463 409 469 403 464 407 460 411 467 405 462 410 468 404 463 408 459 412 465 1251 463 408 470 402 465 1252 462 409 469 403 464 1253 461 1256 469 403 464 407 460 411 466 406 461 410 468 404 463 409 469 1248 466 405 462 1254 460 412 465 406 461 410 468 404 463 1254 460 411 467 1250 464 1253 461 1256 469 1248 466 405 462 410 468 404 463 409 469 403 464 407 460 411 467 405 462 410 468 403 464 408 459 412 466 406 461 410 468 404 463 408 459 412 466 406 461 411 467 405 462 409 469 403 464 407 460 411 466 405 462 410 468 404 463 408 459 412 466 406 461 1255 470 1247 467 405 462 409 469 1249 465 1251 463 409 469 402 465 1252 462 1255 470 402 465 1252 462 -# -# POWER_ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9048 4430 705 501 705 501 704 1603 729 1579 728 479 726 480 726 505 701 506 701 505 700 505 701 505 701 1606 701 505 701 505 701 506 700 505 701 505 701 506 700 506 700 505 701 506 700 1607 701 1607 701 505 701 505 701 505 700 506 700 506 700 1608 700 505 701 1607 700 505 701 506 701 1607 700 505 700 19917 724 505 701 1607 700 505 701 505 700 1607 700 506 700 1607 701 505 700 506 700 1607 701 506 700 506 700 506 700 506 700 1607 700 505 701 505 701 506 700 505 702 506 700 505 700 506 700 506 700 505 701 505 700 506 700 506 700 505 701 1608 700 1607 700 1608 700 506 700 39927 9074 4408 726 481 725 505 700 1606 700 1607 701 505 701 505 701 505 700 506 700 506 700 505 701 505 701 1607 700 506 700 505 701 506 701 505 701 505 701 505 701 505 701 505 701 505 700 1607 701 1607 701 505 701 505 701 505 701 505 701 505 701 1608 700 1607 701 1607 700 506 700 506 700 1607 700 506 701 19938 700 505 701 505 700 505 701 505 700 505 701 505 701 505 701 506 700 506 700 505 701 506 700 505 701 505 701 505 700 506 699 506 700 505 700 505 700 506 700 506 700 506 699 504 701 506 700 505 701 506 700 505 701 505 701 506 700 506 699 1607 700 1607 700 1608 700 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9105 4400 730 500 731 1552 755 1576 730 1577 729 477 728 478 727 479 727 479 727 479 727 479 727 479 728 1581 726 479 727 479 726 479 727 479 727 479 727 479 727 479 726 479 727 479 728 1580 728 1581 726 479 727 479 727 480 726 479 727 480 727 1580 727 479 727 1581 726 479 727 479 727 1581 727 479 727 19915 727 479 727 479 727 479 727 479 727 479 727 479 727 479 727 479 726 479 727 1581 726 480 726 480 726 480 726 480 726 1582 726 480 726 480 726 480 726 481 725 481 724 481 725 481 725 481 725 481 725 481 725 481 725 481 725 481 725 482 724 482 724 1583 724 482 724 39924 9074 4407 727 478 728 1580 728 1580 727 1580 728 477 728 478 728 478 728 479 728 478 728 479 727 479 727 1580 727 479 727 479 727 479 727 479 727 479 728 478 728 478 727 479 727 478 728 1581 727 1580 727 479 727 479 726 479 727 479 727 478 727 1581 726 1581 727 1580 727 479 727 479 727 1581 726 479 728 19915 727 479 727 480 726 480 726 481 725 505 700 481 725 480 725 504 701 505 701 480 726 505 702 482 724 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 700 505 700 505 701 506 700 506 701 505 701 505 701 506 701 505 701 505 701 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9049 4430 705 501 705 1602 705 1602 730 1578 728 1580 727 479 726 1583 724 505 701 1607 700 506 700 505 700 1607 700 506 700 506 700 506 700 506 700 506 700 505 701 506 700 505 701 506 701 1607 702 1607 700 506 700 505 701 506 700 505 700 506 700 1607 700 506 701 1607 700 506 700 506 700 1607 700 506 700 19940 700 1607 701 505 700 505 700 505 700 1607 700 505 700 506 700 506 700 506 701 1606 701 506 700 506 700 506 700 506 700 1608 699 506 699 506 700 506 700 506 700 505 701 505 701 506 700 506 699 506 700 506 700 506 700 506 700 505 700 506 700 1608 700 1608 700 506 700 39927 9072 4409 727 479 726 1606 701 1607 701 1607 700 1606 701 505 701 1606 701 505 700 1608 700 505 700 505 701 1607 701 505 701 506 700 505 700 506 700 506 700 505 701 505 700 505 700 506 701 1607 700 1607 700 506 700 506 700 505 701 505 701 506 700 1607 701 1608 700 1608 699 505 700 506 700 1607 700 506 700 19940 700 505 701 506 700 505 701 506 700 505 701 505 700 505 701 505 701 505 701 505 701 505 701 506 700 505 701 506 699 506 700 506 700 506 700 506 700 505 701 506 700 1607 700 506 700 506 700 506 700 506 700 506 701 506 700 506 700 506 700 1606 700 506 701 506 700 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9052 4428 705 500 706 1601 705 1602 730 1579 729 1579 729 478 727 1580 727 479 727 479 727 479 727 479 727 1581 726 480 726 479 727 480 726 480 726 479 727 479 727 480 726 480 726 479 727 1581 726 1581 726 480 726 480 726 480 726 480 726 480 725 1581 726 480 726 1583 725 480 726 480 726 1582 725 481 725 19911 727 1581 727 479 727 479 727 479 727 1581 726 480 727 479 727 479 727 479 727 1581 726 480 726 480 725 480 726 479 727 1581 726 479 726 480 726 480 726 480 725 480 726 480 726 480 725 480 726 480 726 481 725 481 725 482 724 481 725 1607 700 505 701 1582 725 505 701 39925 9075 4405 728 477 729 1579 728 1579 728 1579 728 1579 728 478 728 1579 728 478 728 478 728 478 727 478 728 1579 728 478 728 478 728 478 727 478 728 478 728 478 728 478 728 478 728 478 728 1579 728 1580 727 478 728 478 728 479 728 479 728 478 727 1580 727 1580 727 1580 727 479 727 478 729 1580 727 478 728 19913 728 478 728 477 729 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 477 729 478 728 478 728 478 728 478 727 478 728 478 728 477 728 478 728 478 728 1579 728 478 728 478 728 478 728 478 728 478 728 478 728 478 727 1580 727 478 728 478 728 479 727 -# LEFT-RIGHT -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9080 4428 704 501 704 1602 705 1602 705 1602 705 1602 705 501 705 1602 705 501 704 501 705 501 705 502 704 1604 728 478 728 478 728 478 728 504 728 478 728 478 728 478 727 479 727 478 728 1580 728 1580 728 478 728 478 727 478 728 478 728 478 728 1580 728 478 728 1579 729 478 728 479 727 1580 727 478 728 19913 727 478 728 478 727 478 727 478 728 1580 728 478 728 478 728 479 727 479 727 1580 727 479 727 479 727 479 727 479 727 1580 727 478 727 478 728 479 727 479 726 478 727 479 727 479 727 479 727 479 727 479 727 479 727 479 727 479 727 1581 727 479 727 1581 726 479 727 39924 9050 4430 704 502 729 1579 729 1579 729 1579 728 1579 728 478 727 1580 728 478 727 478 728 478 728 478 727 1580 727 478 728 478 728 478 728 478 728 478 728 478 728 478 727 479 727 479 727 1581 727 1580 727 478 728 478 728 478 728 478 728 478 727 1580 728 1581 727 1581 727 479 727 479 727 1579 728 479 727 19912 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 728 478 727 478 728 478 728 478 728 478 728 479 727 479 727 1580 728 479 727 479 727 479 727 479 727 479 727 479 727 479 726 1581 726 479 727 480 727 479 727 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 190 26844 503 368 475 395 475 395 475 367 476 395 475 25347 3527 1695 451 1290 451 420 476 394 476 394 475 1264 475 370 471 399 470 400 470 400 443 1298 443 400 470 1270 471 1270 471 400 470 1270 471 1271 470 1270 471 1270 471 1271 470 400 470 373 470 1271 470 400 470 400 470 400 443 400 470 400 470 400 443 400 470 400 470 400 470 374 469 1271 470 400 470 1271 470 400 470 401 442 401 469 1272 469 1272 469 401 469 401 469 374 469 401 469 401 469 401 442 401 469 401 469 401 469 374 469 401 469 401 469 374 469 401 469 401 469 401 442 1300 441 1299 442 1300 441 402 468 1272 469 402 468 1272 469 1273 468 34903 3522 1703 471 1270 471 400 470 373 470 400 470 1270 471 400 470 400 443 400 470 400 470 1270 471 400 443 1298 443 1297 444 400 470 1270 471 1270 471 1270 471 1270 471 1270 471 400 470 400 470 1270 471 373 470 400 470 400 470 400 443 400 470 400 470 400 470 373 470 400 470 400 470 400 443 1298 443 400 470 400 470 400 443 400 470 1271 470 400 470 1271 470 1271 470 400 470 1271 470 1271 470 1271 470 373 470 400 470 1271 470 1271 470 400 470 1271 470 1271 470 400 443 400 470 400 470 400 470 1271 470 373 470 1271 470 401 469 1271 470 400 470 1271 470 34903 3522 1702 471 1269 472 373 470 399 471 399 471 1270 471 399 444 399 471 399 471 399 471 1270 471 372 471 1270 471 1270 471 399 471 1270 471 1270 471 1270 471 1270 471 1270 471 399 471 399 444 1297 444 399 471 399 471 399 471 372 471 399 471 399 471 373 470 399 471 399 471 399 444 400 470 399 471 399 471 373 470 400 470 400 470 399 444 400 470 1270 471 400 470 400 470 1270 471 1271 470 1271 470 372 471 400 470 400 470 400 443 1298 443 400 470 1271 470 1271 470 400 470 400 443 401 469 400 470 401 469 373 470 401 469 401 469 401 442 401 469 401 469 401 469 375 468 402 468 401 469 1273 468 1296 445 426 416 426 445 426 444 426 417 426 444 426 444 426 444 399 444 426 444 426 444 426 417 426 444 426 444 426 444 399 444 426 444 426 444 426 417 1324 417 1325 416 426 444 426 444 427 416 427 444 426 444 426 444 399 444 427 443 427 443 426 417 1325 416 1325 416 427 443 427 443 426 444 399 444 427 443 427 444 427 416 427 444 427 443 427 443 400 443 427 443 427 443 400 443 427 443 427 443 427 416 1325 416 427 443 427 443 427 443 400 443 427 443 1298 443 1298 443 427 443 427 416 427 443 427 443 427 443 400 443 427 443 1298 443 427 443 400 443 428 442 427 443 427 416 428 443 427 443 427 443 400 443 1298 443 1298 443 428 442 428 442 428 415 428 442 1299 442 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 473 397 473 397 473 397 472 371 472 397 473 25350 3523 1697 449 1292 449 422 474 397 473 397 473 1267 473 372 470 401 468 402 468 402 441 1300 441 402 468 1272 469 1272 469 402 468 1273 468 1273 468 1272 469 1273 468 1273 468 403 440 402 468 1273 468 402 468 402 468 375 468 402 468 402 468 402 441 402 468 402 468 402 468 376 467 1273 468 402 468 1273 468 402 468 402 441 402 468 1273 468 1273 468 402 468 403 467 376 467 403 467 403 467 376 467 403 467 403 467 403 440 403 467 403 467 403 467 376 467 403 467 403 467 403 440 1302 439 1302 439 1302 439 404 466 1274 467 403 467 1274 467 1275 466 34905 3520 1705 469 1273 468 402 441 402 468 402 468 1273 468 402 468 376 467 402 468 402 468 1273 468 402 441 1300 441 1300 441 403 467 1273 468 1273 468 1273 468 1273 468 1273 468 403 467 402 468 1273 468 376 467 402 468 402 468 402 441 403 467 403 468 402 441 403 467 403 467 403 467 376 467 1274 467 403 467 403 467 403 440 403 467 1274 467 403 467 403 467 376 467 1274 467 1274 467 1274 467 1274 467 403 467 404 466 1274 467 1274 467 404 439 1302 439 1302 439 404 466 404 466 404 439 1302 439 1302 439 404 466 1275 466 404 466 1275 466 404 466 1275 466 34906 3519 1705 468 1273 468 376 467 402 468 402 468 1273 468 402 441 402 468 402 468 402 468 1273 468 376 467 1273 468 1273 468 402 468 1273 468 1273 468 1273 468 1273 468 1273 468 402 468 376 467 1273 468 402 468 402 468 403 440 403 467 403 467 403 467 376 467 403 467 403 467 403 440 403 467 403 468 402 468 376 467 403 467 403 467 403 440 403 467 403 467 403 440 403 467 1274 467 1274 467 1274 467 403 467 404 466 376 467 1274 467 1275 466 404 466 1275 466 1275 466 404 466 404 439 404 466 404 467 404 466 377 466 404 466 404 466 404 439 404 466 404 466 405 438 405 465 404 466 405 465 1276 465 1299 442 378 465 406 464 405 465 406 437 405 465 428 442 428 442 401 442 428 442 428 442 428 415 429 441 428 442 429 414 429 441 429 441 428 442 401 442 1300 441 1299 442 429 441 429 441 429 414 429 441 429 441 429 441 402 441 429 441 429 441 429 414 1327 414 1327 414 429 441 429 441 429 441 402 441 429 441 429 441 402 441 429 441 429 441 429 414 429 441 429 441 429 441 402 441 429 441 429 441 429 414 1328 413 430 441 429 441 429 441 402 441 429 441 1300 441 1301 440 429 441 402 441 430 440 430 440 430 413 430 441 429 441 1301 440 430 440 403 440 430 440 430 440 430 413 430 440 430 440 430 440 1301 440 1301 440 1301 440 403 440 430 440 430 440 403 440 1301 440 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 504 342 501 394 476 394 475 367 476 394 476 25347 3528 1694 451 1290 451 420 476 393 477 394 475 1264 476 369 472 398 471 399 471 399 444 1297 444 399 471 1269 472 1269 472 399 471 1269 472 1270 471 1270 471 1269 472 1270 471 399 471 372 471 1270 471 399 471 399 471 399 444 399 471 399 471 399 444 399 471 399 471 399 471 372 471 1270 471 399 471 1270 471 399 471 399 444 399 471 1270 471 1270 471 399 471 399 471 372 471 399 471 399 471 399 444 400 470 399 471 400 443 400 471 399 471 400 471 372 471 400 470 399 471 400 443 1298 443 1298 443 1298 443 400 470 1271 470 400 470 1271 470 1271 470 34902 3523 1702 471 1269 472 399 471 372 471 399 471 1270 471 399 471 372 471 399 471 399 471 1269 472 399 444 1297 444 1297 444 399 471 1270 471 1270 471 1270 471 1269 472 1270 471 399 471 399 471 1270 471 372 471 399 471 399 471 399 444 399 471 399 471 399 471 373 470 399 471 399 471 399 444 1297 444 399 471 400 470 400 443 400 470 1270 471 399 471 399 471 373 470 1270 471 1271 470 1270 471 1270 471 400 470 400 470 1271 470 1271 470 400 443 1298 443 1298 443 400 470 400 470 400 470 1271 470 1271 470 373 470 1271 470 400 470 1271 470 400 470 1271 470 34902 3523 1702 471 1270 471 373 470 399 471 399 471 1270 471 399 444 400 470 399 471 399 471 1270 471 373 470 1270 471 1270 471 399 471 1270 471 1270 471 1270 471 1270 471 1270 471 399 471 400 443 1298 443 400 470 400 470 400 470 373 470 400 470 399 471 373 470 400 470 400 470 400 443 400 470 400 470 400 470 373 470 400 470 400 470 400 443 400 470 400 470 400 470 373 470 1271 470 1271 470 1271 470 400 470 400 470 373 470 400 470 1271 470 401 469 1272 469 1271 470 401 442 401 469 401 469 401 469 374 469 401 469 401 469 401 442 401 469 401 469 401 469 374 469 401 469 401 469 401 442 1300 441 1300 441 401 469 401 469 402 441 402 468 402 468 402 468 375 468 402 468 402 468 402 441 402 468 402 468 402 468 375 468 403 467 403 467 403 440 403 467 1274 467 1273 468 404 466 427 416 403 467 404 466 427 443 400 443 427 443 427 443 427 416 427 444 1298 443 1298 443 427 443 427 443 400 443 427 443 427 443 427 416 427 443 427 443 427 416 427 443 427 443 427 443 400 443 427 443 427 443 427 416 428 442 1298 443 427 443 428 442 400 443 427 443 427 443 1298 443 1298 443 427 416 428 442 427 443 428 442 400 443 428 442 428 442 1299 442 400 443 428 442 428 442 428 415 428 442 428 442 428 442 401 442 1299 442 428 442 1299 442 428 442 428 415 428 442 428 442 1299 442 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1286 428 1251 408 442 1241 1289 399 1280 431 408 1247 1283 431 408 1248 442 1242 437 1246 443 1240 439 8135 1279 434 1256 430 409 1246 1284 430 1260 426 413 1242 1287 426 413 1243 436 1247 443 1241 438 1245 445 8130 1284 428 1262 424 415 1240 1279 435 1255 430 409 1247 1283 430 409 1247 443 1241 438 1245 434 1249 441 8133 1281 432 1258 428 411 1244 1286 428 1251 407 443 1240 1279 434 416 1240 439 1244 435 1249 441 1243 436 8137 1287 400 1279 433 417 1239 1280 433 1257 430 409 1246 1284 429 410 1246 444 1240 439 1245 445 1239 440 8133 1281 405 1285 428 411 1245 1285 429 1261 425 414 1241 1289 425 414 1242 437 1246 444 1240 439 1245 434 8139 1285 428 1251 435 415 1240 1279 434 1256 430 409 1246 1283 430 409 1247 443 1241 438 1245 445 1239 440 8133 1281 432 1258 428 411 1244 1286 428 1251 407 443 1240 1279 434 416 1240 439 1244 435 1249 441 1243 436 8137 1287 426 1253 432 407 1248 1281 432 1258 401 438 1244 1285 427 412 1244 435 1248 442 1242 437 1247 442 8131 1283 403 1287 426 413 1242 1287 426 1253 433 417 1239 1280 432 418 1238 441 1243 436 1247 442 1241 438 8136 1288 398 1281 404 435 1248 1281 404 1286 400 439 1244 1285 400 439 1244 435 1249 441 1243 436 1247 442 8131 1283 404 1285 400 439 1243 1286 401 1278 407 443 1240 1289 397 442 1240 439 1245 434 1249 441 1243 436 8138 1286 401 1278 407 443 1240 1279 407 1283 403 436 1246 1283 403 436 1246 444 1240 439 1245 434 1249 441 8134 1280 406 1284 402 437 1246 1283 402 1288 398 441 1242 1288 399 440 1242 437 1247 443 1241 438 1245 434 8140 1284 402 1288 398 441 1242 1287 425 1254 432 407 1249 1281 432 407 1249 441 1243 436 1247 443 1241 438 8136 1288 425 1254 405 434 1248 1281 406 1284 401 438 1245 1285 402 437 1246 433 1250 440 1244 435 1248 442 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1281 406 1284 403 436 1246 1284 403 1276 409 441 1242 437 1246 433 1250 440 1244 1286 401 438 1244 435 8137 1287 400 1279 407 432 1250 1280 407 1283 403 436 1246 433 1250 440 1244 435 1248 1282 405 434 1248 442 8131 1283 404 1286 401 438 1244 1285 401 1278 408 442 1240 439 1244 435 1248 442 1242 1287 400 439 1243 436 8137 1287 399 1280 406 433 1250 1280 407 1283 403 436 1246 433 1250 440 1244 435 1248 1282 406 433 1249 441 8132 1282 404 1286 402 437 1244 1285 402 1277 408 442 1240 439 1244 435 1249 441 1243 1286 401 438 1243 436 8136 1277 409 1281 407 432 1249 1280 406 1284 402 437 1244 435 1249 441 1242 437 1247 1282 405 434 1248 442 8130 1283 403 1287 401 438 1243 1286 400 1279 407 432 1249 441 1243 436 1247 443 1241 1278 409 441 1241 438 8134 1279 407 1283 431 408 1247 1282 404 1286 427 412 1243 436 1247 442 1241 438 1245 1284 403 436 1245 434 8139 1285 401 1278 435 415 1240 1279 408 1282 404 435 1246 433 1250 440 1244 435 1249 1280 407 432 1249 441 8132 1281 405 1285 402 437 1244 1285 401 1278 407 432 1250 440 1243 436 1247 443 1241 1278 409 441 1241 438 8135 1279 407 1283 431 408 1246 1283 404 1275 436 414 1242 437 1246 433 1250 440 1244 1285 401 438 1244 435 8137 1277 409 1281 433 406 1249 1281 405 1285 401 438 1243 436 1247 442 1241 438 1245 1284 402 437 1246 433 8138 1286 401 1278 408 442 1241 1278 408 1281 404 435 1246 433 1249 440 1243 436 1247 1282 405 434 1247 442 8130 1283 404 1285 401 438 1243 1286 400 1279 406 433 1248 442 1242 437 1246 433 1250 1279 408 442 1240 439 8133 1280 407 1282 403 436 1245 1284 403 1276 409 441 1240 439 1244 435 1249 440 1243 1286 400 439 1243 436 8136 1287 400 1279 406 433 1248 1281 406 1284 401 438 1243 436 1247 442 1241 438 1245 1284 402 437 1245 434 8138 1286 401 1278 407 432 1250 1279 406 1284 402 437 1245 434 1249 441 1242 437 1246 1283 403 436 1247 432 8139 1285 401 1278 435 415 1241 1278 407 1283 404 435 1246 433 1250 440 1243 436 1247 1282 404 435 1247 443 8130 1283 402 1277 436 414 1241 1278 408 1282 404 435 1247 432 1251 439 1244 435 1249 1280 406 433 1249 441 8131 1283 403 1276 411 439 1242 1277 410 1280 405 434 1248 442 1241 438 1245 434 1249 1280 407 432 1249 441 8132 1282 404 1286 428 411 1243 1286 400 1279 406 433 1248 442 1242 437 1246 433 1250 1279 408 431 1250 440 8132 1281 405 1285 429 410 1244 1285 401 1278 407 432 1250 439 1243 436 1247 443 1241 1278 409 441 1241 438 8134 1280 406 1284 404 435 1245 1284 403 1276 435 415 1241 438 1244 435 1249 440 1242 1287 400 439 1242 437 8135 1279 407 1283 431 408 1246 1283 403 1276 409 441 1241 438 1245 434 1249 441 1243 1286 400 439 1243 436 8136 1278 408 1313 401 407 1248 1281 404 1286 400 439 1243 436 1247 443 1240 439 1245 1284 402 437 1245 434 8138 1286 400 1310 403 405 1250 1279 406 1304 382 437 1245 434 1249 441 1243 436 1247 1282 404 435 1248 442 8130 1283 403 1287 401 438 1244 1285 401 1309 377 442 1240 439 1244 435 1248 441 1242 1287 401 438 1244 435 8137 1287 402 1308 405 414 1241 1309 405 1284 402 406 1249 440 1242 437 1247 442 1241 1309 406 412 1242 437 8137 1307 407 1251 434 416 1240 1289 424 1255 431 408 1247 442 1241 438 1245 444 1240 1289 424 415 1240 439 8134 1310 404 1254 432 407 1248 1281 432 1257 428 411 1244 435 1249 440 1243 436 1247 1313 401 407 1248 442 8131 1313 401 1257 428 411 1244 1285 429 1261 425 414 1241 438 1245 434 1250 440 1244 1285 428 411 1245 434 8139 1316 399 1259 426 413 1242 1287 426 1253 433 406 1249 440 1243 436 1247 443 1241 1288 399 440 1242 437 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1280 406 1283 431 408 1246 1283 403 1276 437 413 1243 436 1247 1282 404 435 1248 441 1242 437 1246 433 8140 1283 404 1285 428 411 1244 1285 400 1279 408 431 1250 439 1244 1285 401 438 1245 434 1249 440 1243 436 8137 1286 401 1278 409 441 1241 1278 407 1282 404 435 1247 442 1241 1278 408 442 1241 438 1245 434 1250 440 8134 1279 407 1282 405 434 1247 1282 404 1285 401 438 1244 435 1248 1281 405 434 1249 440 1242 437 1247 442 8131 1282 405 1284 402 437 1245 1284 401 1278 409 441 1241 438 1245 1284 402 437 1246 433 1250 439 1244 435 8139 1284 402 1277 410 440 1242 1277 409 1280 432 407 1248 441 1242 1277 410 440 1243 436 1247 442 1241 438 8135 1278 409 1280 433 406 1249 1280 406 1283 403 436 1246 433 1250 1279 408 442 1241 438 1246 433 1250 439 8134 1279 408 1281 407 432 1249 1280 406 1283 404 435 1247 442 1241 1278 409 441 1242 437 1247 442 1241 438 8136 1287 400 1279 408 442 1240 1279 407 1282 431 408 1248 441 1241 1278 409 441 1243 436 1247 442 1241 438 8136 1287 400 1279 408 442 1241 1278 408 1281 405 434 1249 440 1242 1287 400 439 1244 435 1248 442 1242 437 8137 1286 401 1278 409 441 1242 1277 409 1281 406 433 1249 440 1243 1286 400 439 1244 435 1248 441 1243 436 8137 1286 402 1277 409 441 1242 1277 409 1280 406 433 1249 440 1242 1287 400 439 1243 436 1247 442 1241 438 8136 1287 400 1279 407 432 1250 1279 408 1281 404 435 1246 443 1240 1279 409 441 1241 438 1245 434 1249 440 8134 1279 409 1280 405 434 1247 1282 405 1284 402 437 1243 436 1248 1281 406 433 1248 441 1242 437 1247 442 8132 1280 407 1282 430 409 1245 1284 404 1275 410 440 1242 437 1246 1283 405 434 1247 442 1241 438 1272 407 8141 1282 405 1284 402 437 1243 1286 402 1277 408 442 1240 439 1244 1285 403 436 1245 434 1249 440 1244 435 8138 1285 403 1276 410 440 1242 1287 400 1279 407 432 1248 441 1242 1287 401 438 1243 436 1247 442 1242 437 8136 1287 401 1278 408 431 1249 1280 408 1281 404 435 1245 434 1250 1279 408 442 1240 439 1244 435 1249 440 8133 1279 408 1281 404 435 1246 1283 404 1285 400 439 1242 437 1247 1282 405 434 1247 442 1241 438 1246 433 8140 1283 405 1284 401 438 1243 1286 401 1278 408 431 1249 440 1243 1286 402 437 1244 435 1248 441 1242 437 8137 1286 401 1278 408 442 1240 1279 408 1281 404 435 1246 433 1250 1279 408 442 1240 439 1244 435 1249 440 8133 1280 408 1282 404 435 1246 1283 431 1259 401 438 1242 437 1247 1282 405 434 1247 442 1241 438 1246 443 8130 1283 405 1284 401 438 1269 1260 427 1252 433 406 1276 413 1243 1286 401 438 1270 409 1248 441 1242 437 8136 1287 401 1278 407 432 1249 1280 434 1255 403 436 1245 444 1240 1279 408 442 1240 439 1245 434 1249 440 8134 1278 435 1254 405 434 1247 1282 405 1284 401 438 1243 436 1248 1281 406 433 1249 440 1243 436 1247 442 8131 1281 406 1283 401 438 1244 1285 401 1288 397 442 1241 438 1245 1284 402 437 1246 443 1240 439 1244 435 8139 1284 402 1287 398 441 1241 1288 398 1281 404 435 1248 441 1242 1287 398 441 1242 437 1246 443 1240 439 8134 1289 397 1282 403 436 1246 1283 403 1286 398 441 1242 437 1246 1283 403 436 1247 442 1241 438 1245 434 -# -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3305 1598 432 411 413 404 410 1198 440 403 411 1197 441 402 412 405 409 408 406 1202 436 1198 440 403 411 406 408 409 405 1229 409 1199 439 404 410 407 407 410 414 403 411 406 408 409 405 412 412 405 409 408 406 411 413 404 410 407 407 410 414 1219 409 409 405 412 412 405 409 408 406 411 413 404 410 407 407 1226 412 405 409 409 405 412 412 405 409 1224 414 1194 434 1201 437 1196 432 1203 435 1198 440 1194 434 1200 438 378 436 408 406 1228 410 381 433 410 414 403 411 406 408 409 405 412 412 405 409 408 406 1228 410 1198 440 403 411 406 408 1199 439 405 409 408 406 411 413 1221 407 410 414 1219 409 409 405 1202 436 1199 439 403 411 406 408 410 414 402 412 405 409 408 406 411 413 404 410 407 407 410 414 403 411 406 408 409 405 412 412 405 409 408 406 411 413 404 410 407 407 410 414 403 411 406 408 409 405 412 412 404 410 408 406 411 413 403 411 407 407 410 414 402 412 405 409 408 406 411 413 404 410 407 407 410 414 403 411 406 408 409 405 412 412 405 409 408 406 1202 436 407 407 410 414 403 411 406 408 1200 438 1195 433 1202 436 406 408 1201 437 405 409 -# SWING ON -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3158 1552 601 1065 575 1093 596 328 560 330 555 329 556 1068 573 338 545 341 544 1095 571 1096 571 341 543 1101 566 342 543 342 542 1125 543 1125 542 343 542 1124 542 1125 542 344 542 343 542 1126 542 344 541 345 541 1124 542 344 542 345 541 344 541 345 540 345 541 343 541 345 540 345 541 345 541 345 541 345 541 345 541 343 541 345 541 345 541 344 542 344 541 1127 541 345 541 344 542 1126 541 345 541 345 541 1126 541 1127 541 345 541 343 541 345 541 345 541 345 541 344 541 1127 541 346 541 1127 540 1127 541 345 541 344 541 345 541 346 540 1127 541 1127 540 344 541 1128 541 1126 541 1127 541 345 541 345 541 344 540 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 345 541 345 541 345 540 1127 541 345 541 345 541 344 541 346 541 1127 542 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3126 1586 542 1123 544 1124 543 346 540 344 542 344 541 1124 543 345 541 343 541 1124 543 1125 542 346 540 1124 542 346 540 346 516 1149 518 1150 517 369 516 1151 517 1148 518 369 517 370 516 1148 518 369 516 369 541 1125 543 342 542 344 542 345 541 346 540 371 515 371 515 371 514 370 514 371 515 371 515 371 515 371 515 371 515 370 515 371 514 371 515 372 515 1151 515 371 515 372 515 1151 515 372 514 372 515 1153 514 1153 515 371 515 372 514 370 514 372 514 372 514 372 514 1153 514 1153 514 1131 538 1127 539 347 539 346 540 346 540 345 540 1128 540 347 540 1126 540 346 540 345 541 345 541 345 541 345 541 345 541 343 541 345 541 345 541 345 541 345 541 345 541 344 541 343 541 344 542 344 542 345 541 345 541 344 542 343 541 344 542 345 541 344 542 345 541 345 541 345 541 344 540 345 541 345 541 345 541 345 541 345 541 345 541 343 541 345 541 345 541 345 541 345 541 345 541 345 541 344 541 1127 541 344 541 1127 541 345 541 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3034 3976 1907 1980 1914 2004 1880 1006 941 1032 915 999 937 1008 939 1982 933 1008 1907 2008 939 978 1916 998 970 980 936 976 971 1034 913 1000 936 1984 942 997 1939 975 941 1003 944 1004 943 999 937 1037 941 971 965 984 942 999 969 1919 975 1025 3890 3957 1936 1982 1912 1940 1944 1038 909 1033 914 996 940 1009 938 1948 967 1009 1917 1970 945 994 1942 979 937 1034 913 1003 944 1000 936 1012 935 1981 934 1008 1907 1036 932 982 944 1036 911 1027 910 1004 964 984 942 1033 914 999 937 1976 939 1008 3917 3982 1932 1922 1941 1945 1970 981 945 997 940 1008 939 1004 943 1979 936 998 1917 1943 972 1002 1913 1032 904 1013 944 1000 936 1041 906 1001 967 1923 972 1003 1912 1030 906 1009 969 975 941 1004 943 1002 945 996 940 975 972 1005 942 1944 971 968 4915 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3129 1587 494 1175 494 1176 493 369 465 370 464 370 464 1178 491 371 463 370 464 1179 490 1179 490 371 463 1180 489 373 461 346 488 1180 489 1180 489 374 460 1181 488 1182 487 348 496 337 487 1182 497 338 496 338 486 1183 496 339 495 339 495 338 486 348 496 338 496 339 495 339 495 339 495 339 495 338 496 339 495 339 495 339 495 339 495 339 495 340 494 340 494 1174 495 340 494 340 494 1175 494 341 493 341 493 1174 495 1175 494 342 492 342 492 342 492 343 491 341 493 342 492 1177 492 343 491 343 491 1177 492 343 491 342 492 342 492 342 492 342 492 343 491 343 491 343 491 342 492 342 492 342 492 342 492 342 492 343 491 343 491 342 492 342 492 342 492 342 492 342 492 342 492 343 491 342 492 342 492 342 492 342 492 342 492 342 492 343 491 341 493 342 492 342 492 342 492 342 492 342 492 342 492 341 493 341 493 342 492 1175 494 341 493 342 492 1176 493 1176 493 1176 493 343 491 1177 492 1177 492 343 491 342 492 342 492 342 492 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3130 1588 493 1178 491 1178 491 345 489 346 488 373 461 1180 489 348 486 349 485 1182 487 1183 496 340 494 1174 495 341 493 342 492 1175 494 1176 493 344 490 1177 492 1179 490 373 461 373 461 1180 489 374 460 374 460 1181 488 349 485 376 458 377 457 376 458 376 458 350 484 377 467 367 467 368 466 368 466 367 467 368 466 342 492 342 492 343 491 343 491 343 491 1177 492 371 463 371 463 1178 491 346 488 372 462 1180 489 1179 490 347 487 374 460 375 459 375 459 376 458 376 458 349 485 376 458 377 467 1172 486 377 467 367 467 368 466 368 466 342 492 369 465 368 466 342 492 342 492 369 465 344 490 370 464 344 490 370 464 344 490 344 490 345 489 372 462 346 488 346 488 345 489 345 489 372 462 346 488 347 487 374 460 373 461 373 461 373 461 374 460 375 459 375 459 375 459 348 486 348 486 376 458 1183 486 348 486 377 457 1184 495 339 485 351 493 1174 495 1175 494 1175 494 343 491 1176 493 1177 492 344 490 345 489 344 490 345 489 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3121 1597 494 1177 492 1178 491 343 491 343 491 344 490 1179 490 345 489 346 488 1181 488 1182 487 348 486 1183 486 349 485 349 485 1186 493 1177 491 342 492 1177 491 1179 490 345 489 345 489 1180 489 346 488 346 488 1182 487 348 486 349 485 349 485 350 494 339 485 350 484 350 494 340 494 341 493 341 493 342 492 341 493 341 493 342 492 342 492 343 491 343 491 1179 490 345 489 344 490 1180 489 346 488 346 488 1182 487 1184 485 348 486 349 485 349 485 350 494 340 494 340 494 1176 492 342 492 342 492 1177 491 343 491 344 490 344 490 344 490 343 491 344 490 344 490 345 489 345 489 346 488 345 489 345 489 346 488 346 488 347 487 347 487 348 486 346 488 347 487 347 487 347 487 348 486 348 486 349 485 348 486 348 486 348 486 349 485 349 485 350 494 340 494 339 485 350 494 340 494 341 493 341 493 342 492 342 492 342 492 1178 490 344 490 343 491 1178 491 1180 489 1181 488 346 488 1181 487 1182 487 347 487 348 486 349 485 349 485 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3120 1599 492 1177 491 1179 490 345 489 344 490 345 489 1180 488 345 489 346 488 1181 487 1182 487 347 487 1182 487 348 486 348 486 1184 495 1175 493 340 494 1175 494 1176 493 342 492 341 493 1177 492 343 491 343 491 1177 491 343 491 344 490 344 490 345 489 345 489 344 490 344 490 345 489 345 489 345 489 346 488 346 488 345 489 345 489 346 488 346 488 346 488 1181 488 347 487 347 487 1182 487 348 486 349 485 1183 486 1184 484 350 494 339 485 350 484 350 484 350 494 340 484 1185 494 341 493 341 493 1176 493 342 492 342 492 343 491 343 491 344 490 342 492 343 491 1178 491 1178 491 1179 490 344 490 344 490 345 489 345 489 345 489 344 490 344 490 345 489 345 489 345 489 345 489 346 488 345 489 345 489 345 489 345 489 346 488 346 488 346 488 345 489 345 489 345 489 346 488 346 488 346 488 346 488 345 489 345 489 346 488 1180 489 345 489 346 488 1180 489 1180 489 1181 488 347 487 1181 488 347 487 347 487 346 488 1182 487 347 487 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3130 1587 494 1177 492 1178 491 370 464 370 464 371 463 1179 490 371 463 373 461 1180 489 1181 488 374 460 1182 487 375 469 365 469 1174 494 1175 494 367 467 1175 493 1176 493 369 465 369 465 1178 491 371 463 370 464 1179 490 372 462 372 462 373 461 373 461 372 462 373 461 374 460 374 460 375 469 365 469 364 460 375 469 365 469 365 469 366 468 366 468 339 495 1174 495 367 467 367 467 1175 493 368 466 342 492 368 466 1177 492 370 464 344 490 343 491 343 491 344 490 344 490 371 463 344 490 344 490 1179 490 372 462 373 461 372 462 372 462 373 461 347 487 346 488 1182 487 1182 487 1183 496 366 468 339 495 366 468 339 495 339 495 340 494 367 467 341 493 368 466 368 466 341 493 368 466 368 466 369 465 370 464 344 490 343 491 370 464 370 464 371 463 371 463 372 462 372 462 371 463 372 462 373 461 1181 488 373 461 375 459 1183 496 365 469 366 468 1174 495 1174 495 367 467 367 467 1176 492 369 465 369 465 369 465 1178 491 370 464 -# POWER ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3218 1528 453 354 439 1134 453 366 427 354 439 1133 454 354 439 1158 429 365 428 365 428 1159 428 1159 428 1159 428 365 428 1158 429 365 428 1158 429 1158 429 1158 429 365 458 354 495 353 385 354 465 1102 486 1100 487 353 438 1102 459 1128 459 354 439 354 439 1128 458 354 439 353 440 1129 457 353 440 354 439 1132 455 1132 455 354 439 1132 455 1133 454 1133 454 1133 454 354 439 1133 454 1133 454 1133 454 1133 454 354 439 354 439 354 439 1133 454 353 440 354 439 354 439 354 439 1134 453 1133 454 1133 454 1134 453 354 439 353 440 1134 453 1134 453 353 440 354 439 354 439 354 439 1134 453 1134 453 353 440 354 439 1134 453 353 440 1134 453 1135 452 354 440 354 439 354 439 354 439 1136 451 1135 452 354 440 354 439 1135 452 1135 452 1136 451 1136 451 353 440 -# TIMER ON -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4476 4310 604 1513 632 468 604 1513 632 468 604 468 603 468 604 468 603 1541 603 1515 630 1540 604 1541 604 468 604 468 603 468 603 468 604 468 603 468 603 1541 603 468 604 468 628 444 628 1517 627 1518 626 1518 626 1519 625 1519 625 1519 626 1519 626 1519 626 1519 626 1519 625 1519 626 1519 626 446 626 446 626 446 626 446 625 446 626 446 625 1519 626 446 626 1519 625 446 626 446 626 1519 625 446 626 446 625 447 625 5105 4471 4290 625 447 625 1520 625 447 625 1519 625 1520 625 1520 625 1520 625 447 625 447 625 447 625 447 624 1520 624 1520 625 1520 625 1520 625 1520 625 1520 625 447 625 1520 625 1520 625 1520 624 448 624 448 624 448 624 447 625 447 625 448 624 448 623 448 623 448 624 448 623 448 624 448 624 1521 623 1521 624 1521 624 1521 624 1521 623 1521 624 448 624 1521 623 448 624 1521 623 1522 623 448 623 1521 623 1521 623 1521 623 -# TIMER ON -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4421 4371 559 1622 564 530 563 1622 564 1617 559 562 541 553 540 1615 561 561 542 528 565 1646 540 528 565 555 538 1643 543 1622 530 563 1650 536 560 533 562 541 527 566 1641 535 1620 566 1614 562 559 534 1627 559 1627 559 1621 565 1642 534 534 559 562 541 527 566 1619 567 529 564 532 561 1650 536 532 561 1623 563 1618 558 536 567 554 539 531 562 560 533 561 532 1623 563 557 536 1623 563 1617 559 1649 537 1618 558 5224 4420 4368 562 1618 568 552 541 1618 558 1649 537 531 562 532 561 1620 566 530 563 533 560 1625 561 533 560 560 533 1622 564 1617 559 535 558 1629 568 528 565 556 537 557 536 1619 567 1613 563 1618 558 536 567 1619 567 1620 566 1615 561 1620 566 528 565 555 538 530 563 1622 564 558 535 536 567 1617 559 535 568 1643 533 1622 564 531 562 533 560 536 567 555 538 557 536 1619 567 527 566 1645 541 1614 562 1619 567 1617 559 -# TIMER ON -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4407 4355 571 1574 563 509 564 1581 566 506 567 505 568 530 543 528 545 1574 563 1583 564 508 565 506 567 505 568 503 570 502 571 1573 564 509 564 507 566 1579 568 1603 544 1575 572 500 563 536 537 1581 566 506 567 1578 569 1576 571 1574 563 1583 564 1581 566 1580 567 1578 569 1576 571 1575 572 526 537 509 564 507 566 532 541 504 569 503 570 1574 563 510 563 508 565 1580 567 1578 569 503 570 1575 572 1573 564 509 564 5168 4411 4351 565 507 566 1579 568 504 569 1576 571 1574 573 1573 564 1581 566 507 566 505 568 1577 570 1575 572 1574 563 1582 565 1581 566 506 567 1578 569 1576 571 501 572 500 563 509 564 1580 567 1578 569 504 569 1576 571 501 562 510 563 508 565 507 566 531 542 530 543 502 571 527 536 510 563 1581 566 1579 568 1578 569 1576 571 1575 572 1573 564 509 564 1581 566 1579 568 504 569 503 570 1574 563 510 563 508 565 1580 567 -# SWING ON -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9811 9792 9816 9789 4617 2485 383 345 387 925 385 931 379 357 386 926 384 351 381 351 381 363 380 348 384 928 382 353 379 353 379 933 387 348 384 348 384 940 380 351 381 931 379 357 386 346 386 349 383 353 379 353 379 364 378 349 383 352 380 356 387 922 388 924 386 349 383 349 383 361 381 346 386 349 383 352 380 352 380 932 388 347 385 347 385 358 385 344 388 347 385 350 382 350 382 930 380 355 388 345 387 356 386 342 380 355 388 348 384 925 385 926 384 352 380 352 380 363 379 925 385 350 382 933 387 349 383 928 382 354 388 921 379 941 379 20334 4618 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4415 4353 570 1577 565 507 569 1577 565 508 568 504 572 501 565 508 568 1578 564 1583 570 503 563 510 566 1580 573 1574 568 504 572 501 565 508 568 505 571 1576 566 506 570 503 563 510 566 506 570 503 573 499 567 1581 572 1575 567 1580 573 1574 568 1579 563 1583 570 1577 565 1581 572 1576 566 1580 573 1575 567 1579 563 1584 569 1578 564 1583 570 1577 565 508 568 1578 564 509 567 506 570 502 564 1583 570 1577 565 508 568 5166 4419 4352 571 501 565 1583 570 502 574 1573 569 1578 564 1582 571 1576 566 506 570 502 574 1573 569 1577 565 507 569 504 572 1574 568 1579 574 1572 570 1576 566 532 544 1576 566 1580 573 1574 568 1577 565 1581 572 1574 568 531 545 527 539 534 542 530 546 526 540 533 543 529 547 525 541 505 571 501 565 508 568 504 572 500 566 506 570 503 573 499 567 1578 564 508 568 1577 565 1580 573 1572 570 502 564 508 568 1577 565 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3202 1591 383 411 383 1206 382 413 381 413 381 1207 381 412 382 1207 381 414 380 413 381 1209 379 1209 389 1199 389 406 387 1200 388 406 388 1201 387 1201 387 1202 386 409 385 409 385 411 383 409 385 1204 384 1205 383 411 383 1206 382 413 381 1206 382 1208 380 414 380 414 380 415 389 1198 379 416 388 1201 387 405 389 406 388 1201 387 1202 386 1202 386 408 386 1204 384 1206 382 410 384 1205 383 1207 381 1206 382 1207 381 1207 381 415 389 403 380 1208 380 415 389 405 389 405 389 406 388 1200 388 1201 387 1203 385 407 386 1202 386 1205 383 1203 385 1204 384 412 382 412 382 412 382 1206 382 413 381 413 381 414 380 413 381 1208 380 1208 380 415 389 1199 389 1200 388 1200 388 1201 387 1202 386 410 384 408 386 1202 386 409 385 410 384 411 383 410 384 411 383 1206 382 1206 382 1206 382 1208 380 1210 388 403 380 1210 388 1200 388 405 389 406 388 406 388 406 388 407 387 1203 385 408 386 409 385 1203 385 1203 385 410 384 1205 383 1207 381 411 383 1206 382 1206 382 413 381 414 380 1210 388 404 379 415 379 1209 389 405 389 406 388 1201 387 1201 387 1201 387 1202 386 1204 384 1203 385 1204 384 1205 383 412 382 412 382 413 381 412 382 412 382 414 380 414 380 413 381 414 380 1209 389 1199 389 1199 389 1200 388 1201 387 1201 387 408 386 1201 387 408 385 409 385 410 384 410 384 410 384 411 383 1205 383 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4463 4417 539 1598 546 495 546 1591 543 1592 542 501 540 502 539 1597 547 496 545 496 545 1591 543 499 542 500 541 1594 540 1597 547 494 547 1590 544 497 544 499 542 1593 541 1596 538 1597 547 1589 545 1590 544 1593 541 1594 540 1597 547 494 547 496 545 496 545 497 544 497 544 499 542 500 541 500 541 1596 538 503 538 504 547 494 547 495 546 495 546 1590 544 1591 543 499 542 1593 541 1595 539 1596 538 1599 545 1589 545 5190 4441 4412 544 1591 543 500 541 1594 540 1596 538 503 538 505 546 1588 546 497 544 499 542 1592 542 500 541 500 541 1595 539 1595 539 504 547 1586 548 494 547 495 546 1589 545 1590 544 1592 542 1594 540 1597 547 1587 547 1589 545 1589 545 498 543 498 543 499 542 499 542 501 540 502 539 501 540 503 538 1596 538 504 547 493 537 505 546 495 546 494 547 1589 545 1590 544 497 544 1591 543 1593 541 1594 540 1597 547 1589 545 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 447 442 417 417 442 446 413 449 421 414 445 25361 3456 1743 422 1275 444 418 441 447 412 449 421 1303 416 445 414 448 411 450 420 415 444 1306 413 449 421 1302 417 1307 412 422 448 1276 443 1281 438 1285 444 1306 413 1311 418 416 443 418 441 1310 419 442 417 417 442 419 440 421 449 440 419 443 416 445 414 420 439 422 448 441 418 1305 414 421 438 1312 418 444 415 446 413 448 422 1302 417 1280 439 422 448 441 418 416 443 446 413 421 438 450 420 442 417 444 415 419 440 449 421 441 418 416 443 445 414 447 412 450 420 415 444 1306 413 1310 419 1304 415 447 412 1311 418 444 415 1308 421 1302 417 34793 3458 1713 441 1310 419 415 444 417 442 447 412 1311 418 443 416 445 414 448 411 423 447 1304 415 446 413 1311 418 1305 414 421 438 1312 417 1279 440 1310 419 1305 414 1282 447 441 418 417 442 1308 422 440 419 442 417 444 415 447 412 449 421 441 418 443 416 445 414 447 412 423 447 415 444 1306 413 448 422 440 419 442 417 418 441 1309 421 441 418 443 416 445 414 448 411 450 420 415 444 444 415 419 440 448 422 440 419 443 416 445 414 447 412 449 421 441 418 443 416 445 414 421 438 450 420 1277 442 446 413 1310 419 416 443 1307 412 422 448 34789 3464 1735 419 1277 442 447 412 449 421 414 445 1278 441 448 411 450 420 442 417 444 415 1308 421 414 445 1305 414 1309 420 415 444 1306 413 1283 446 1304 415 1309 421 1303 416 446 413 421 438 1312 417 417 442 447 412 449 421 414 445 443 416 445 414 448 411 450 420 442 417 444 415 446 413 422 448 440 419 443 416 445 414 447 412 449 421 414 445 1305 414 421 438 450 420 1277 442 1309 420 1303 416 418 441 420 439 450 420 1304 415 446 413 1310 419 442 417 1307 412 449 421 414 445 444 415 419 440 448 411 450 420 442 417 444 415 447 412 449 421 1303 416 1280 439 1312 417 1306 413 1310 419 1305 414 1309 420 441 418 444 415 446 413 448 422 440 419 442 417 445 414 447 412 449 421 441 418 416 443 446 413 448 411 450 420 442 417 444 415 446 413 449 421 1303 416 1307 412 450 420 415 444 444 415 419 440 449 421 440 419 443 416 445 414 447 412 449 421 1303 416 1308 421 440 419 415 444 445 414 447 412 449 421 441 418 443 416 446 413 448 411 450 420 442 417 444 415 447 412 449 421 441 418 443 416 445 414 448 411 450 420 442 417 444 415 446 413 449 421 1302 417 1307 412 449 421 441 418 444 415 446 413 448 422 413 446 443 416 445 414 447 412 449 421 441 418 443 416 446 413 448 411 450 420 442 417 444 415 1309 420 441 418 1305 414 1309 420 442 417 417 442 446 413 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 439 422 448 441 418 443 416 419 440 421 438 25369 3459 1739 415 1281 449 413 446 443 416 445 414 1309 421 441 418 443 416 419 440 448 411 1312 418 417 442 1308 421 1302 417 418 441 1309 421 1303 416 1307 412 1312 418 1306 413 421 449 440 419 1277 442 447 412 449 421 441 418 443 416 445 414 447 412 450 420 441 418 444 415 446 413 1283 447 415 444 1306 413 449 421 414 445 443 416 1307 412 1312 417 417 442 419 440 421 438 450 420 442 417 444 415 446 413 449 421 440 419 443 416 445 414 447 412 449 421 441 418 443 416 418 441 1309 420 1303 416 1281 438 450 420 1304 415 447 412 1311 419 1278 441 34795 3459 1740 414 1283 447 415 444 444 415 419 440 1310 420 442 417 417 442 420 439 449 421 1276 443 445 414 1309 421 1276 443 446 413 1310 420 1304 415 1308 421 1302 417 1280 439 449 421 414 445 1305 414 421 438 450 420 415 444 417 442 446 413 421 438 450 420 442 417 444 415 420 439 449 421 1303 416 418 441 420 439 422 448 441 418 1305 414 421 438 450 420 442 417 444 415 446 413 448 411 450 420 442 417 444 415 446 413 449 421 441 418 443 416 445 414 447 412 422 448 441 418 443 416 445 414 1310 420 441 418 1306 413 421 438 1312 418 417 442 34795 3459 1712 442 1308 422 413 446 443 416 418 441 1309 421 441 418 416 443 445 414 448 411 1312 418 444 415 1308 421 1302 417 418 441 1309 421 1276 443 1307 412 1312 418 1306 413 449 421 414 445 1305 414 447 412 450 420 441 418 444 415 446 413 421 438 450 420 442 417 444 415 446 413 449 421 440 419 443 416 445 414 447 412 449 421 441 418 443 416 1307 412 423 447 415 444 1279 440 1310 419 1304 415 447 412 422 448 441 418 443 416 418 441 1309 421 414 445 1306 413 421 438 423 447 442 417 417 442 446 413 449 421 441 418 443 416 445 414 447 412 1311 419 1305 414 1283 446 1277 442 1281 449 1303 416 1280 439 422 448 414 445 417 442 446 413 448 411 450 420 442 417 444 415 420 439 449 421 441 418 443 416 418 441 447 412 449 421 441 418 416 443 418 441 1310 419 1304 415 419 440 421 449 440 419 442 417 418 441 420 439 422 448 441 418 443 416 445 414 1309 421 1303 416 446 413 448 411 423 447 442 417 417 442 446 413 422 448 440 419 442 417 444 415 447 412 449 421 414 445 443 416 445 414 447 412 449 421 441 418 443 416 445 414 448 411 450 420 442 417 1306 413 1310 420 415 444 444 415 420 439 422 448 414 445 443 416 445 414 447 412 450 420 441 418 417 442 446 413 448 411 450 420 442 417 444 415 446 413 449 421 441 418 1305 414 1309 421 414 445 444 415 446 413 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 447 415 444 417 442 419 440 421 438 423 447 25361 3456 1742 412 1312 418 417 442 446 413 448 411 1286 443 445 414 420 439 449 421 414 445 1278 441 447 412 1285 444 1279 440 448 411 1286 443 1280 439 1311 418 1305 414 1310 419 415 444 417 442 1282 448 414 445 443 416 445 414 420 439 449 421 414 445 443 416 446 413 448 411 423 447 1304 415 446 413 1284 445 443 416 418 441 420 439 1311 419 1306 413 421 438 450 420 415 444 417 442 446 413 448 422 413 446 416 443 445 414 447 412 449 421 441 418 443 416 445 414 448 411 450 420 1304 415 1281 449 1302 417 418 441 1282 447 414 445 1305 414 1310 419 34790 3463 1709 445 1305 414 421 438 423 447 442 417 1306 413 448 422 413 446 443 416 418 441 1309 421 441 418 1278 441 1283 446 415 444 1306 413 1311 419 1305 414 1282 447 1303 416 446 413 421 449 1275 444 418 441 420 439 449 421 441 418 443 416 445 414 421 438 423 447 442 417 444 415 446 413 1283 446 442 417 418 441 447 412 422 448 1303 416 446 413 448 411 450 420 442 417 444 415 446 413 449 421 441 418 443 416 445 414 447 412 450 420 441 418 444 415 446 413 448 411 451 419 442 417 445 414 1309 420 414 445 1278 441 421 438 1312 417 444 415 34795 3457 1741 413 1311 419 416 443 445 414 420 439 1285 444 444 415 419 440 448 422 440 419 1304 415 420 439 1311 419 1305 414 448 411 1312 417 1279 440 1284 445 1278 441 1282 447 415 444 444 415 1308 421 414 445 443 416 418 441 420 439 449 421 414 445 444 415 446 413 448 422 440 419 416 443 445 414 420 439 449 421 441 418 443 416 446 413 421 438 1312 417 444 415 419 440 1311 419 1305 414 1309 420 414 445 417 442 419 440 448 411 450 420 1304 415 447 412 1311 419 443 416 445 414 421 438 450 420 442 417 444 415 446 413 448 422 440 419 442 417 1307 412 1284 445 1305 414 1283 446 1304 415 1308 421 1302 417 418 441 447 412 449 421 441 418 444 415 446 413 448 411 450 420 442 417 444 415 447 412 449 421 414 445 443 416 445 414 447 412 450 420 442 417 1306 413 1310 420 442 417 417 442 447 412 449 421 441 418 443 416 445 414 447 412 450 420 442 417 1306 413 1310 419 415 444 445 414 447 412 449 421 441 418 443 416 446 413 448 411 450 420 442 417 444 415 447 412 449 421 441 418 443 416 445 414 447 412 450 420 442 417 444 415 446 413 448 411 451 419 1304 415 1309 421 441 418 416 443 445 414 447 412 450 420 442 417 444 415 446 413 448 422 440 419 442 417 445 414 447 412 449 421 441 418 443 416 446 413 448 411 450 420 1304 415 1281 449 413 446 416 443 418 441 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3027 9039 538 1530 514 558 490 557 491 582 486 560 488 559 488 584 464 583 464 582 486 1554 490 583 485 562 486 1554 490 584 484 1556 488 1554 510 562 485 1555 509 1531 533 1535 509 1558 569 1473 591 1475 517 1550 566 1475 517 556 492 581 487 559 488 558 490 557 491 582 486 560 487 559 488 558 489 583 464 582 486 560 508 565 482 1584 460 1556 508 1558 517 1524 572 1495 518 1551 513 1527 517 555 493 581 487 559 488 558 510 562 485 561 486 560 487 1579 485 1557 518 1523 541 1526 466 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 6239 515 2191 4487 590 562 536 589 540 559 560 1665 563 563 566 560 538 587 532 567 562 1663 565 561 558 567 542 1658 590 561 537 1662 586 1665 563 1663 565 586 533 566 563 1663 565 1661 618 507 561 565 564 561 538 588 541 1658 560 592 537 563 566 559 540 586 533 567 562 563 535 590 539 561 558 568 541 1657 591 1662 566 1659 559 1667 591 1660 558 1668 560 591 538 561 568 558 540 585 534 565 564 562 536 1688 560 1665 563 1663 565 1661 587 1664 564 1661 567 584 535 565 564 561 538 588 541 559 560 565 534 592 537 562 567 559 539 1685 563 563 536 1663 585 1667 561 537 592 1660 568 558 561 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8916 4491 586 1666 562 589 540 559 560 1692 536 563 566 560 538 587 532 567 562 1663 565 561 558 567 542 1684 564 1661 567 1658 560 592 537 562 567 559 540 1659 589 1663 565 1660 558 593 536 564 565 560 538 587 532 1667 561 591 538 561 568 558 540 585 534 565 564 562 536 589 540 559 560 566 533 1666 593 1659 559 1667 561 1664 584 1667 561 1664 564 588 541 558 561 565 534 591 538 562 567 558 540 1685 564 1662 566 1659 559 1667 592 1659 559 1667 561 590 539 560 559 567 542 584 535 564 565 561 538 588 541 558 561 564 535 1664 595 558 540 1659 589 1662 566 559 560 1666 562 562 567 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8913 4494 593 1658 560 566 563 562 536 1689 559 566 533 593 536 563 566 560 539 587 532 567 562 563 536 1663 585 1667 561 564 565 561 538 1661 587 538 561 1665 594 1658 560 1666 562 589 540 559 560 566 533 593 536 1663 565 560 559 541 588 564 535 591 538 561 568 558 541 585 534 565 564 561 538 1661 587 1665 563 1663 565 1660 588 1663 565 1660 558 594 535 564 565 560 539 587 542 557 562 564 535 1664 595 1658 560 1665 563 1662 586 1666 562 1663 565 586 533 566 563 563 536 590 539 560 559 567 532 594 535 564 565 560 539 1687 562 564 535 1665 594 1658 560 565 564 1662 566 559 560 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8943 4491 586 565 534 1692 567 559 539 1660 588 1663 565 561 568 557 542 584 535 1664 564 588 541 558 561 1664 564 562 567 559 540 1659 589 563 535 1664 584 1667 561 1664 564 1661 587 564 535 591 538 562 567 558 540 1659 589 562 537 589 540 560 559 566 533 593 536 564 565 560 538 587 532 567 562 1663 565 1661 567 1658 590 1662 566 1659 559 1666 593 559 540 586 533 567 562 563 536 590 539 560 559 1692 536 1664 564 1661 587 1664 564 1662 566 1659 589 562 536 589 540 560 559 566 533 593 536 564 565 560 538 587 532 567 562 1663 565 561 568 1657 561 1665 563 588 541 1658 560 592 537 -# -name: TEMP+ -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 94 00 00 00 -# -name: TEMP- -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 95 00 00 00 -# -name: TIMER -type: parsed -protocol: NEC -address: 20 00 00 00 -command: 19 00 00 00 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8918 4489 568 584 535 1664 564 588 541 1658 560 1666 593 558 540 1659 589 562 537 1663 585 566 533 593 536 1664 564 1661 587 564 535 591 538 1661 567 1658 590 1662 566 1659 559 1667 592 559 539 586 533 567 562 563 536 1664 584 567 542 584 535 564 565 560 539 587 542 558 561 564 535 591 538 561 568 1658 560 1666 562 1663 586 1666 562 1663 565 1660 588 563 536 590 539 560 559 567 542 584 535 564 565 1660 568 1658 560 1665 594 1658 560 1666 562 1663 585 566 533 593 536 563 566 559 540 586 533 567 562 563 536 590 539 560 559 1667 561 564 565 1661 567 1658 560 591 538 1662 566 585 534 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4482 4413 596 1596 594 527 562 1602 588 1603 587 535 565 530 570 1595 595 526 563 532 568 1597 593 528 561 534 566 1599 591 1599 591 531 569 1596 594 1597 593 528 561 1603 587 1604 596 1595 595 1596 594 1597 593 1598 592 529 560 1604 596 525 564 531 569 526 563 532 568 527 562 533 567 1598 592 1599 591 530 570 1595 595 526 563 532 568 527 562 506 594 528 561 507 593 1598 592 529 571 1595 595 1596 594 1597 593 1598 592 5251 4505 4417 592 1599 591 530 570 1595 595 1596 594 527 562 533 567 1598 592 529 561 535 565 1600 590 531 569 526 563 1602 588 1603 587 534 566 1599 591 1600 590 531 569 1596 594 1597 593 1598 592 1599 591 1600 590 1601 589 532 568 1597 593 529 561 534 566 503 597 499 590 504 596 500 589 1601 589 1602 588 533 567 1599 591 530 570 499 591 504 596 526 563 505 595 501 589 1602 588 533 567 1598 592 1599 591 1600 590 1601 589 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1305 435 1280 432 415 1255 1307 432 1272 439 418 1252 442 1255 1307 431 416 1255 439 1258 447 1251 443 8174 1302 437 1278 433 414 1255 1307 432 1273 438 419 1250 444 1254 1298 440 417 1253 441 1256 438 1259 445 8170 1306 433 1271 439 418 1251 1301 438 1277 434 413 1256 449 1249 1303 435 412 1258 446 1251 443 1254 440 8176 1300 438 1277 434 413 1283 1279 433 1271 440 417 1278 416 1255 1307 431 416 1253 441 1257 447 1250 444 8171 1305 433 1272 439 418 1278 1274 438 1277 433 414 1282 412 1259 1303 434 413 1256 448 1249 445 1252 442 8173 1303 435 1270 440 417 1279 1273 438 1277 433 414 1282 412 1258 1304 433 414 1282 412 1258 446 1250 444 8171 1305 433 1272 438 419 1276 1276 435 1270 441 416 1252 442 1255 1297 440 417 1279 415 1255 439 1257 447 8168 1297 439 1276 434 413 1256 1306 431 1273 436 411 1258 446 1250 1302 409 438 1284 421 1249 445 1252 442 -# -name: POWER -type: parsed -protocol: NEC -address: 81 00 00 00 -command: 6B 00 00 00 -# -name: TEMP+ -type: parsed -protocol: NEC -address: 81 00 00 00 -command: 65 00 00 00 -# -name: TEMP- -type: parsed -protocol: NEC -address: 81 00 00 00 -command: 68 00 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 198 131341 3063 3026 3054 4297 600 1676 575 560 571 1691 571 697 568 568 573 1688 574 562 569 1824 573 563 599 1676 575 1686 576 1817 569 567 574 562 569 567 574 1819 567 569 572 563 599 1676 575 692 574 562 569 1693 569 567 574 1819 567 568 573 563 567 1694 599 682 573 563 568 568 573 1688 574 694 571 564 567 569 572 564 567 701 596 1679 572 1688 574 563 567 700 576 560 570 1690 572 565 576 691 574 561 601 549 571 565 576 691 574 561 569 567 574 1686 576 692 573 562 569 568 594 1681 570 697 568 567 574 562 568 567 574 694 571 564 567 569 572 564 598 707 569 1692 570 1691 571 566 575 716 570 1691 571 565 576 1686 576 1685 597 -# -name: MODE -type: parsed -protocol: NEC -address: 81 00 00 00 -command: 66 00 00 00 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9013 4502 575 560 574 562 572 1671 565 569 565 570 543 592 542 540 594 567 546 1697 571 1672 575 560 574 1695 541 1702 545 1671 597 1673 574 563 1670 1703 575 560 542 592 542 540 593 568 545 590 544 564 569 565 548 587 547 1670 566 1702 566 1677 570 1674 573 1670 598 1698 538 1704 543 39972 9017 2251 568 96272 9021 2249 570 96268 9013 2256 574 96264 9015 2254 56 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5050 2165 361 1803 367 716 363 718 361 721 358 1806 364 718 362 720 359 723 367 715 364 1800 359 722 368 1797 362 1802 368 714 365 1799 360 1803 367 1798 361 1803 367 1797 362 720 359 1805 365 717 363 719 360 722 368 714 365 717 362 719 360 1804 366 1798 361 721 358 723 367 715 364 718 361 720 359 1805 365 717 362 720 359 722 368 714 365 717 362 719 361 722 368 714 365 716 363 719 360 721 358 724 366 716 363 718 361 1803 367 1797 362 1802 368 1797 362 719 360 722 368 714 365 29579 5061 2156 360 1804 366 717 362 719 360 722 357 1806 364 719 360 721 358 724 366 716 363 1801 358 723 367 1798 361 1802 368 715 364 1800 359 1804 366 1799 360 1804 366 1798 361 721 359 1806 364 718 362 721 359 723 367 715 364 718 362 720 359 1805 365 1799 360 722 368 714 365 717 362 719 361 721 358 724 366 716 363 719 361 721 358 724 366 716 363 1801 358 1806 364 718 361 721 358 1805 365 1800 359 1805 365 717 362 720 359 722 368 714 365 717 362 719 360 722 368 714 365 717 362 1802 368 714 365 717 362 719 361 722 368 1796 363 719 360 721 358 724 366 716 363 719 360 721 358 724 366 716 363 718 362 721 359 723 367 715 364 718 361 720 360 723 367 715 364 718 362 720 359 722 368 715 364 1799 360 1805 365 1799 360 722 368 714 365 716 363 1801 358 724 366 1799 360 721 358 1806 364 718 361 721 358 723 367 716 363 718 362 721 359 723 367 715 364 718 362 720 359 723 367 715 364 718 362 720 359 723 367 715 364 1800 359 722 368 714 365 1799 360 1804 366 1799 360 1804 366 1799 360 1804 366 1798 361 1803 367 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9823 9795 9821 9799 4615 2493 385 343 389 924 386 931 389 348 384 929 381 355 387 345 387 357 386 343 379 934 386 350 382 350 382 354 388 929 381 355 387 357 386 343 379 357 386 350 382 928 382 931 379 938 382 355 388 356 387 919 381 355 387 349 383 927 383 930 380 356 386 346 386 358 384 344 388 348 384 352 380 352 380 933 387 348 384 351 381 363 379 349 383 353 379 357 386 347 385 927 383 354 388 344 388 356 386 919 381 355 388 349 383 350 382 353 379 938 382 354 389 356 386 919 381 355 387 930 380 934 386 349 383 934 386 350 382 358 385 20350 4620 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 48 12 00 00 -command: 88 09 00 00 -# -name: MODE -type: parsed -protocol: NECext -address: 48 44 00 00 -command: 88 08 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5618 5586 563 557 564 554 567 553 568 552 569 550 571 548 563 1675 568 1674 569 549 562 556 565 1674 569 1670 563 1679 564 1676 567 552 569 555 566 1669 564 554 567 1672 571 1668 565 556 565 554 567 1672 571 551 570 1665 568 1672 571 1668 565 1673 570 550 571 547 564 1675 568 557 564 1671 562 555 566 1672 571 576 535 557 564 1675 568 552 569 580 541 548 563 555 566 553 568 551 570 1668 565 1675 568 1671 562 1681 562 1673 570 550 561 1677 566 1701 542 551 570 1668 565 555 566 1674 569 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5617 5586 563 558 563 555 566 554 567 551 570 550 571 574 537 1676 567 1676 567 1667 566 555 566 1673 570 1668 565 1675 568 1671 562 558 563 586 535 1673 570 550 571 1667 566 1673 570 575 536 558 563 1675 568 556 565 1668 565 1676 567 1672 571 1667 566 553 568 553 568 1670 563 562 570 1664 569 552 569 1669 564 557 564 555 566 1672 571 549 562 560 561 554 567 1673 570 1669 564 555 566 1672 561 559 562 556 565 1678 565 552 569 549 562 1704 539 581 540 1672 571 547 564 1676 567 553 568 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5626 5579 569 549 562 582 539 581 540 578 543 577 544 575 536 1702 541 1703 540 549 562 557 564 1700 543 1670 563 1677 566 1698 545 547 564 586 535 1674 569 550 571 1668 565 1674 569 578 543 550 571 1670 563 587 545 1665 568 1671 562 1677 566 1700 543 577 544 548 563 1704 539 557 564 1698 545 574 537 1677 566 552 569 577 544 1668 565 554 567 583 538 1670 563 1702 541 1671 572 547 564 583 538 553 568 552 569 1700 543 545 566 582 539 1698 535 558 563 557 564 554 567 1671 562 585 536 -# ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3302 1644 408 419 410 416 413 1233 405 423 406 1239 409 419 410 417 412 415 414 1232 406 1241 407 419 410 417 412 416 413 1233 405 1241 407 394 435 419 410 417 412 416 413 387 432 422 407 420 409 418 411 416 413 415 404 423 406 421 408 420 409 1237 411 416 413 413 406 422 407 420 409 418 411 417 412 415 414 1232 406 421 408 420 409 418 411 416 413 1232 406 1240 408 1238 410 1236 412 1234 414 1232 406 1240 408 1238 410 417 412 416 413 1233 405 422 407 421 408 419 410 417 412 414 404 397 432 421 408 420 409 1237 411 1234 414 387 432 422 407 1239 409 418 411 416 413 414 405 423 406 1240 408 1237 411 417 412 415 414 414 405 422 407 421 408 418 411 416 413 414 405 423 406 421 408 419 410 417 412 416 413 414 405 422 407 421 408 419 410 416 413 414 405 423 406 421 408 419 410 417 412 416 413 414 404 423 406 421 408 419 410 417 412 414 405 423 406 421 408 419 410 417 412 416 413 414 404 423 406 421 408 419 410 417 412 416 413 413 406 422 407 420 409 418 411 416 413 1233 405 422 407 421 408 1237 411 1235 413 1206 432 1240 408 420 409 418 411 1235 413 415 414 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8523 4238 543 1597 536 1578 544 1595 538 571 511 1576 546 563 519 1594 518 1596 537 4245 515 1598 545 1594 539 544 517 1596 547 563 488 568 514 570 512 571 593 19276 8526 4262 540 1600 512 1601 542 1598 535 548 513 1600 543 567 514 1598 514 1601 542 4214 546 1594 539 1575 537 572 520 1619 514 543 518 565 516 567 515 542 622 19299 8524 4239 542 1598 545 1595 517 1598 545 564 518 1596 516 567 515 1625 518 1570 542 4239 542 1572 540 1600 543 565 485 1602 541 568 513 544 517 566 516 568 596 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8523 4266 545 1595 537 1576 546 1593 539 544 517 1596 547 536 545 1568 544 1595 537 4217 542 1597 546 537 513 543 538 1601 542 541 520 536 545 538 543 539 625 19293 8525 4234 546 1594 548 1591 520 1593 539 543 538 1575 547 535 546 1594 538 1574 548 4234 515 1599 544 539 542 540 521 1592 540 542 539 543 518 539 542 540 624 19297 8521 4241 539 1601 542 1572 540 1600 543 540 541 1572 540 544 548 1592 520 1593 539 4243 516 1597 545 538 543 512 549 1591 541 541 540 516 545 538 543 539 625 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8521 4271 540 1600 512 1602 540 1599 512 570 511 1603 539 569 492 1596 546 1593 539 4217 542 566 515 568 493 564 517 1622 510 546 515 569 512 571 510 546 618 19303 8523 4238 542 1598 544 1569 542 1597 545 563 508 1579 543 566 515 1598 514 1600 542 4240 519 563 518 564 517 566 484 1602 540 568 513 543 518 566 515 567 597 19272 8523 4264 547 1593 539 1574 538 1603 540 569 492 1596 546 562 519 1569 542 1597 545 4211 538 571 521 562 509 547 514 1600 542 566 515 541 520 563 518 564 600 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8523 4266 544 1595 516 1597 545 1594 538 544 516 1597 545 564 486 1601 541 1599 543 4213 545 1594 538 1576 545 563 518 565 516 540 521 563 518 565 516 540 624 19269 8522 4265 545 1595 537 1576 546 1594 538 571 489 1623 519 564 517 1595 516 1597 545 4209 539 1600 542 1597 514 568 513 569 512 571 490 567 514 568 513 570 594 19272 8519 4266 544 1595 516 1597 545 1593 539 543 518 1621 521 562 488 1598 544 1595 537 4217 541 1598 544 1569 542 566 515 568 513 543 518 565 516 567 514 542 622 -# -name: POWER -type: parsed -protocol: NECext -address: 98 6F 00 00 -command: 19 E6 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 98 6F 00 00 -command: 05 FA 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 98 6F 00 00 -command: 09 F6 00 00 -# -name: MODE -type: parsed -protocol: NECext -address: 98 6F 00 00 -command: 08 F7 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8963 4401 561 543 558 545 566 537 564 540 561 542 559 1652 561 1650 563 540 561 543 558 545 567 537 564 1647 566 1645 558 1654 559 544 567 536 565 1646 567 1644 559 545 567 537 564 1647 566 537 564 540 561 542 559 545 567 537 564 539 562 541 560 544 567 536 565 538 563 541 560 543 558 545 567 538 563 540 561 542 559 545 567 537 564 539 562 542 559 544 568 536 565 539 562 541 560 543 569 536 565 538 563 541 560 543 558 545 566 538 563 540 561 542 559 545 566 537 564 539 562 542 559 544 567 536 565 539 562 541 560 544 568 536 565 538 563 541 560 543 558 545 567 538 563 540 561 543 558 545 567 537 564 540 561 542 559 544 568 536 565 539 562 541 560 570 542 536 565 538 563 541 560 543 558 546 565 538 563 540 561 543 558 571 541 537 564 540 561 542 559 545 567 537 564 539 562 542 559 544 568 536 565 539 562 541 560 544 568 536 565 538 563 541 560 543 569 535 566 538 563 541 560 543 569 535 566 538 563 541 560 543 569 536 565 538 563 541 560 544 567 536 565 539 562 542 559 544 567 537 564 539 562 542 559 544 568 537 564 539 562 542 559 544 568 537 564 539 562 542 559 545 567 537 564 540 561 542 559 545 566 537 564 540 561 543 558 545 567 538 563 541 560 543 569 536 565 538 563 541 560 544 568 536 565 539 562 542 559 544 568 1645 558 546 566 1646 567 537 564 540 561 1651 562 541 560 544 568 563 538 539 562 541 560 544 567 536 565 539 562 541 560 544 567 537 564 539 562 542 559 544 568 537 564 540 561 542 559 545 566 1645 558 546 566 1646 567 537 564 540 561 1651 562 541 560 544 588 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8955 4430 563 541 560 543 558 545 567 537 564 539 562 1649 564 1648 565 537 564 540 561 542 559 544 568 1644 559 1653 560 1651 562 541 560 543 558 1653 560 1652 561 542 559 544 568 1644 559 545 567 537 564 539 562 541 560 543 558 545 567 537 564 539 562 541 560 543 558 546 566 538 563 540 561 542 559 544 568 536 565 539 562 541 560 543 558 546 566 538 563 540 561 542 559 545 567 536 565 539 562 541 560 543 558 545 567 537 564 540 561 542 559 544 568 536 565 538 563 541 560 543 558 545 567 537 564 539 562 541 560 543 569 535 566 538 563 540 561 542 559 544 568 536 565 539 562 541 560 543 558 545 567 537 564 539 562 542 559 544 568 536 565 538 563 541 560 543 558 545 567 537 564 540 561 542 559 544 568 537 564 539 562 541 560 544 568 536 565 538 563 541 560 543 558 546 566 538 563 540 561 542 559 545 567 537 564 539 562 541 560 544 568 536 565 538 563 540 561 543 558 545 567 538 563 540 561 543 558 545 567 537 564 540 561 542 559 544 568 537 564 539 562 542 559 544 568 536 565 539 562 541 560 544 568 536 565 539 562 541 560 544 568 536 565 538 563 541 560 543 569 536 565 538 563 541 560 543 569 536 565 538 563 541 560 543 558 546 566 538 563 541 560 543 558 546 566 538 563 541 560 543 569 536 565 538 563 541 560 543 558 546 566 1646 567 1645 568 536 565 539 562 542 559 544 568 536 565 539 562 541 560 544 568 536 565 539 562 541 560 544 568 536 565 539 562 541 560 544 568 536 565 539 562 541 560 544 568 536 565 539 562 1649 564 1649 564 539 562 542 559 545 567 537 564 540 592 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8952 4436 568 536 565 538 563 540 561 542 559 544 568 1645 558 1654 559 544 568 536 565 539 562 541 560 1652 561 1651 562 1650 563 540 561 542 559 1654 559 1653 560 543 558 545 567 1646 567 537 564 539 562 541 560 544 568 536 565 538 563 540 561 543 558 545 567 537 564 540 561 543 558 545 567 537 564 540 561 542 559 544 568 563 538 539 562 541 560 544 557 546 566 564 537 540 561 543 558 545 567 537 564 540 561 542 559 545 567 537 564 539 562 542 559 544 568 536 565 538 563 541 560 543 558 546 566 538 563 541 560 543 558 546 566 538 563 541 560 543 558 546 566 538 563 541 560 543 558 546 566 538 563 541 560 543 558 546 566 538 563 567 534 544 568 536 565 538 563 541 560 544 568 536 565 538 563 541 560 544 568 536 565 539 562 541 560 544 568 562 539 539 562 542 559 570 542 537 564 539 562 542 559 545 566 537 564 540 561 543 558 545 567 538 563 540 561 569 532 572 540 538 563 540 561 543 558 546 566 538 563 541 560 543 569 536 565 539 562 541 560 544 568 536 565 539 562 542 559 544 568 537 564 540 561 543 558 571 541 538 563 541 560 543 558 546 566 538 563 541 560 570 542 536 565 565 536 541 560 544 568 536 565 539 562 542 559 544 568 537 564 540 561 543 558 545 567 538 563 541 560 543 558 546 566 538 563 541 560 544 568 1645 568 536 565 539 562 541 560 544 568 536 565 539 562 542 559 545 567 538 563 540 561 543 558 546 566 538 563 541 560 544 568 536 565 539 562 542 559 545 567 537 564 540 562 543 558 545 567 1647 566 538 563 541 560 544 568 536 565 539 562 541 560 544 588 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8954 4428 565 539 562 542 559 544 567 537 564 540 561 1650 563 1650 563 540 561 543 558 546 566 538 563 1649 564 1649 564 1648 565 539 562 542 559 1653 560 1652 561 543 558 546 565 1647 566 537 564 540 561 543 558 545 566 537 564 540 561 542 559 545 567 537 564 539 562 542 559 544 568 537 564 539 562 542 559 544 567 537 564 539 562 542 559 544 568 537 564 539 562 542 559 544 568 536 565 539 562 542 559 544 568 537 564 539 562 542 559 544 568 537 564 539 562 542 559 545 567 537 564 540 561 542 559 545 567 537 564 540 561 543 558 546 565 538 563 541 560 544 568 536 565 539 562 542 559 544 568 537 564 540 561 542 559 545 567 538 563 540 561 543 558 546 566 538 563 541 560 544 568 536 565 539 562 542 559 545 567 537 564 540 561 543 558 546 566 538 563 541 560 544 567 537 564 539 562 542 559 545 566 538 563 541 560 543 558 546 566 565 536 542 559 544 568 537 564 540 561 543 558 545 567 538 563 541 560 544 568 537 564 539 562 542 559 545 567 538 563 541 560 544 568 536 565 539 562 542 559 545 566 538 563 541 560 544 568 536 565 539 562 542 559 545 567 538 563 541 560 544 568 537 564 540 561 543 558 545 567 538 563 541 560 544 568 536 565 539 562 542 559 545 566 538 563 541 560 544 568 537 564 540 561 543 558 545 566 538 563 541 560 1653 560 543 558 547 565 539 562 542 559 545 567 537 564 540 561 543 569 536 565 539 562 542 559 544 568 537 564 540 561 543 558 546 566 538 563 541 560 544 568 537 564 540 561 543 558 546 566 1647 566 538 563 541 560 544 568 537 564 540 561 542 590 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4421 4375 565 1616 560 560 533 1626 560 1621 565 554 539 556 537 1617 559 564 539 557 536 1622 564 556 537 558 535 1619 567 1614 562 558 535 1625 561 561 542 1613 563 1618 620 1560 564 1616 560 560 533 1625 561 1622 564 1622 564 555 538 556 537 558 535 559 534 1619 567 553 540 557 536 1623 563 1618 558 1622 564 556 537 557 536 558 535 559 534 562 541 554 539 555 538 556 537 1621 565 1616 560 1620 566 1614 562 1619 557 5232 4422 4363 567 1614 562 557 536 1648 538 1616 560 560 533 561 532 1622 564 558 535 561 532 1626 560 560 533 561 532 1622 564 1616 560 560 533 1653 533 563 540 1639 537 1618 568 1613 563 1617 559 561 532 1652 534 1623 563 1622 564 556 537 557 536 558 535 559 534 1645 541 553 540 556 537 1622 564 1617 559 1621 565 554 539 555 538 556 537 557 536 560 533 563 540 553 540 554 539 1645 541 1612 564 1617 559 1622 564 1618 558 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4420 4379 561 1618 558 536 567 1617 559 1621 565 529 564 530 563 1617 559 537 566 556 537 1621 565 529 564 530 563 1617 559 1621 565 529 564 1649 537 532 561 560 533 561 532 1622 564 1616 560 1620 566 1614 562 1646 540 1620 566 1614 562 1619 567 553 540 528 565 529 564 530 563 533 560 562 541 1617 559 535 558 536 567 1612 564 556 537 531 562 560 533 1623 563 556 537 1621 565 1614 562 558 535 1623 563 1643 533 1622 564 5224 4420 4364 566 1613 563 531 562 1622 564 1616 560 533 560 534 559 1622 564 531 562 534 559 1625 561 532 561 533 560 1620 566 1614 562 532 561 1651 535 561 532 535 568 526 567 1614 562 1618 558 1622 564 1616 560 1622 564 1622 564 1616 560 1620 566 527 566 528 565 529 564 556 537 533 560 536 567 1617 559 560 533 535 558 1622 564 530 563 530 563 533 560 1622 564 530 563 1620 566 1614 562 558 535 1624 562 1643 533 1624 562 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4424 4381 559 1621 565 529 564 1647 539 1615 561 533 560 534 559 1648 538 532 561 535 1627 559 560 533 535 568 1639 537 1617 559 535 568 1618 568 554 539 556 537 531 562 1618 558 1649 537 1617 559 1621 565 1644 532 1628 558 1622 564 1616 560 534 559 562 541 552 541 527 566 557 536 560 533 1625 561 559 534 1625 561 1619 567 553 540 528 565 532 561 1621 565 529 564 1647 539 528 565 556 537 1617 559 1621 565 1616 560 5229 4425 4363 567 1613 563 557 536 1622 564 1617 559 561 532 562 541 1613 563 559 534 562 541 1617 559 535 568 552 541 1613 563 1617 559 562 541 1618 568 528 565 529 564 556 537 1618 558 1622 564 1616 560 1646 540 1642 534 1627 559 1647 539 1615 561 533 560 561 532 562 541 527 566 556 537 559 534 1624 562 558 535 1623 563 1643 533 561 542 526 567 555 538 1619 567 527 566 1618 558 536 567 527 566 1641 535 1619 567 1617 559 -# -name: POWER -type: parsed -protocol: NECext -address: 08 F5 00 00 -command: 11 EE 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 08 F5 00 00 -command: 0E F1 00 00 -# -name: MODE -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 02 FD 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8445 4206 542 1566 541 539 519 534 514 541 517 1564 543 537 521 533 515 539 519 534 514 540 518 536 512 542 516 537 521 532 516 538 520 534 514 1568 539 541 517 536 522 1560 547 533 515 1567 540 540 518 536 512 1570 547 1561 546 534 514 1568 539 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8976 4374 594 1635 593 1638 590 533 591 536 599 531 593 539 596 541 594 1642 597 517 597 1632 597 1634 594 531 593 537 598 535 600 535 590 534 590 1635 593 526 598 523 591 535 600 529 596 537 598 538 597 529 595 521 593 527 597 1635 593 534 601 528 596 536 599 537 598 529 595 521 593 528 597 527 597 528 596 533 591 542 593 546 599 528 596 521 593 526 598 525 599 526 598 531 593 539 596 541 594 514 590 7877 600 516 598 521 593 529 595 531 593 537 598 534 591 1654 595 1641 598 517 597 521 593 530 594 533 591 538 597 536 599 539 596 531 593 523 601 519 595 528 596 529 596 532 592 539 596 538 597 525 589 523 591 525 599 520 594 530 594 533 591 540 595 541 594 531 593 520 594 524 590 531 593 530 594 531 593 537 598 536 599 525 599 516 598 522 592 530 594 532 592 537 598 536 599 538 597 529 595 519 595 524 600 522 592 532 592 537 598 534 590 544 591 536 599 1626 592 526 598 1633 595 529 595 534 601 533 591 1655 594 1625 593 7883 595 522 592 530 594 529 595 532 592 537 598 536 599 537 598 528 596 518 596 1634 594 1642 597 528 597 533 591 541 594 543 592 535 600 516 598 521 593 528 596 528 597 531 593 538 597 538 597 528 597 519 595 523 591 529 595 529 595 532 592 538 597 538 597 1641 598 518 596 524 590 532 592 1642 597 1644 595 1652 597 540 595 532 592 525 599 521 593 530 594 532 592 537 598 536 599 538 597 530 594 521 593 1641 598 1638 590 1647 592 1650 599 1647 592 545 600 1622 596 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8971 4413 598 1634 595 1641 599 526 599 529 596 533 592 541 594 541 594 1646 594 525 600 1633 596 1645 595 533 592 540 595 538 597 539 596 528 597 1629 600 520 594 526 599 526 599 530 595 537 598 538 597 530 595 523 591 1639 601 524 601 527 598 1643 597 537 598 539 596 531 594 522 592 528 597 527 598 530 595 536 599 534 591 546 600 526 599 517 597 521 593 528 597 528 597 532 593 541 594 544 591 519 595 7883 598 520 594 525 600 524 590 535 600 529 596 539 596 1651 599 1639 601 515 599 522 592 531 594 532 593 538 597 536 599 538 597 528 597 518 596 525 600 523 591 534 591 537 598 533 592 546 600 527 598 518 596 523 591 531 594 531 594 536 599 534 591 545 601 526 599 517 597 521 593 529 596 530 595 536 599 532 593 542 593 532 593 522 592 526 599 522 592 535 600 532 593 540 595 541 594 533 592 524 601 519 595 528 597 529 596 535 600 534 601 537 598 527 598 1627 592 1637 592 531 594 533 592 1652 598 537 598 1652 598 1623 596 7882 599 519 595 525 600 522 592 534 591 538 597 535 590 547 599 528 597 518 596 1634 595 1639 601 525 600 530 595 539 596 541 594 532 593 523 591 529 596 527 598 528 597 533 592 541 594 542 593 532 593 525 600 522 592 531 594 533 592 538 597 535 600 537 598 527 598 518 596 522 592 530 595 1646 594 1652 598 1650 600 538 597 530 595 521 593 527 598 526 599 529 596 534 591 543 592 546 600 527 598 519 595 1636 593 1640 600 1639 601 1644 596 1651 599 539 596 514 590 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8916 4470 593 1635 594 1638 591 530 595 531 594 536 599 534 591 544 591 1644 596 519 595 1638 591 1643 597 530 595 534 601 533 592 544 591 534 591 1635 594 526 599 525 600 528 597 532 593 540 595 541 594 533 592 524 590 1639 590 533 592 534 591 539 596 1648 592 545 590 536 599 516 599 521 593 529 596 529 596 533 592 541 594 541 594 532 593 524 591 529 596 527 598 528 597 531 594 538 597 538 597 509 595 7878 592 525 600 520 594 528 597 531 594 534 591 541 594 1653 597 1643 597 521 593 528 597 527 598 529 596 534 591 543 592 545 590 536 599 517 597 521 593 529 596 531 594 536 599 535 600 537 598 528 597 518 596 522 592 530 595 532 593 537 598 535 590 546 589 536 599 517 597 523 591 533 592 534 601 529 596 538 597 540 595 533 592 524 590 528 597 525 600 526 599 531 594 538 597 540 595 530 595 520 594 524 590 530 595 531 594 536 599 533 592 543 592 534 591 1638 591 1642 598 526 599 529 596 535 600 1644 596 1655 595 1624 595 7885 596 520 594 524 591 532 593 534 591 539 596 536 599 536 599 526 599 516 598 1631 598 525 600 528 597 533 592 543 592 544 591 536 599 516 598 521 593 529 596 530 595 535 600 532 593 544 591 534 591 525 600 519 595 526 599 527 598 532 593 541 594 542 593 532 593 522 592 526 599 525 600 1638 591 1648 592 1654 596 541 594 534 591 525 590 528 597 527 598 529 596 534 591 543 592 545 601 526 599 517 597 1632 597 526 599 1642 598 1647 593 1653 597 540 595 513 591 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9007 4379 601 1628 591 1643 597 526 599 529 596 537 598 535 600 538 597 1641 599 517 597 1632 597 1639 590 535 600 529 596 537 598 536 599 526 599 1630 599 521 593 533 592 535 600 531 594 541 594 543 592 534 591 525 600 1630 599 525 600 530 595 1647 593 540 595 543 592 533 592 524 590 528 597 526 599 528 597 533 592 540 595 543 592 535 600 517 597 522 592 530 595 532 593 535 590 542 593 543 592 516 598 7876 594 523 591 528 597 528 597 531 594 538 597 537 598 1651 599 1639 590 525 600 520 594 529 596 531 594 535 590 543 592 544 591 534 591 524 590 529 596 526 599 527 598 531 594 539 596 540 595 529 596 520 594 525 600 522 592 533 592 538 597 536 599 538 597 529 596 519 595 525 600 523 591 535 600 531 594 539 596 541 594 533 592 524 590 528 597 524 590 536 599 531 594 538 597 540 595 531 594 523 591 530 595 529 596 530 595 536 599 534 591 547 599 528 597 1632 597 1637 592 532 593 536 599 1641 599 535 600 1651 599 1623 596 7879 591 526 599 520 594 527 598 528 597 532 593 538 597 538 597 528 597 519 595 1636 593 529 596 533 592 538 597 537 598 541 594 534 591 527 598 523 591 532 593 533 592 540 595 538 597 540 595 532 593 524 601 519 595 528 597 529 596 534 591 544 591 547 599 529 596 520 594 526 599 524 590 1645 595 1646 594 1653 597 541 594 534 591 525 600 519 595 528 597 529 596 535 600 533 592 546 600 528 597 520 594 1637 592 532 593 1647 593 1649 591 1656 594 543 592 518 596 -# -name: POWER -type: parsed -protocol: NECext -address: 81 66 00 00 -command: 81 7E 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 81 66 00 00 -command: 8A 75 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 81 66 00 00 -command: 85 7A 00 00 -# -name: POWER -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 00 FF 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 15 EA 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 0D F2 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4459 4369 593 1562 590 487 599 1555 597 481 595 482 594 483 593 485 591 1563 599 1555 596 481 595 482 594 484 592 485 591 486 590 1565 597 479 596 481 594 1559 593 1562 590 1565 597 1557 595 482 594 484 592 485 591 1564 598 1556 596 1559 593 1561 591 1564 598 1556 596 1558 594 1561 591 1564 598 1556 595 1559 593 1561 591 1564 598 1556 596 1559 593 1561 591 486 590 1565 597 1557 595 1559 593 1562 590 488 598 478 598 479 597 5158 4453 4375 597 480 595 1558 594 484 592 1563 589 1565 597 1558 594 1560 592 485 591 487 589 1565 597 1557 594 1560 592 1562 590 1565 597 479 596 1558 594 1561 591 486 590 488 598 478 598 480 596 1558 594 1561 591 1563 599 478 598 479 596 481 595 482 594 484 592 485 591 486 600 478 598 479 597 480 595 481 595 483 593 484 592 485 591 487 589 488 598 1555 596 481 594 483 593 484 592 485 591 1564 598 1556 596 1559 593 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4428 4402 570 1584 568 510 566 1588 564 513 563 514 562 542 544 507 569 1586 566 1588 564 513 563 541 535 542 544 533 543 535 541 1588 564 513 563 541 545 1583 569 1586 565 1589 563 514 562 542 544 1584 568 536 540 1589 563 1592 570 1584 568 1587 564 1591 561 1594 568 1586 566 1590 572 1582 570 1585 567 1588 564 1591 561 1594 568 1586 566 1589 573 1592 533 543 1586 566 1589 562 1592 570 533 543 1586 565 1589 563 1592 570 5186 4456 4374 567 510 566 1589 563 541 535 1593 569 1586 565 1589 563 1592 570 533 542 535 541 1587 565 1591 560 1594 568 1586 566 1589 563 541 535 1594 568 1586 566 538 538 539 537 541 535 1593 569 1586 566 537 539 1589 562 515 560 543 543 534 541 536 540 537 539 539 537 514 562 542 544 533 542 534 541 536 540 537 539 539 537 540 546 531 545 533 542 1586 566 537 539 512 564 540 536 1593 569 534 541 536 540 537 539 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4426 4404 568 1587 564 538 538 1591 561 543 543 534 542 536 539 537 539 1589 563 1618 544 533 543 535 541 536 540 538 538 539 537 1591 561 543 543 534 542 1586 565 1616 536 1593 569 534 542 536 540 1614 538 1617 545 1583 569 1587 564 1616 536 1593 569 1585 567 1588 564 1591 561 1594 568 1586 566 1588 564 1591 561 1594 568 1587 565 1589 563 1592 570 1585 567 536 540 1589 562 1592 570 1584 568 536 540 1589 563 1591 571 533 542 5187 4424 4405 567 536 540 1588 563 541 535 1593 569 1585 567 1588 574 1581 571 533 542 535 541 1587 565 1616 536 1592 570 1585 567 1588 564 539 537 1592 570 1584 568 536 540 538 538 539 537 1618 544 1610 542 536 540 538 538 539 537 541 545 532 544 533 543 535 541 536 540 537 539 539 537 540 536 542 534 543 543 534 542 536 540 537 539 539 537 540 546 1608 544 534 542 535 541 537 539 1615 537 541 535 543 543 1584 568 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4408 4423 570 1585 567 537 539 1590 561 542 544 533 542 535 541 537 539 1589 563 1593 569 534 541 1588 563 539 537 541 545 532 543 534 541 536 539 537 539 1590 562 1593 569 1586 566 538 538 539 537 1592 570 1585 567 1587 565 1590 561 1594 568 1586 565 1590 561 1593 569 1586 566 1589 562 1592 570 1584 568 1587 564 1590 561 1594 568 1586 565 1590 572 1583 568 534 541 1588 564 540 536 1593 569 534 541 1587 564 539 537 1592 570 5186 4455 4374 567 537 539 1590 561 542 544 1584 567 1588 563 1591 560 1594 568 535 541 537 539 1590 561 541 545 1584 568 1587 564 1590 561 1593 569 1586 565 1589 562 540 536 542 544 533 542 1586 566 1588 563 540 536 542 544 533 542 535 540 537 539 538 538 539 537 541 535 542 544 534 541 535 540 537 539 538 537 540 536 541 545 532 543 534 541 536 539 1589 562 540 536 1593 569 534 541 1588 563 540 535 1593 569 534 541 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3472 1691 441 1285 464 1265 443 451 408 459 410 456 434 1266 462 404 434 431 459 1271 437 1317 432 410 459 1293 435 407 431 436 433 1321 428 1273 435 432 458 1270 438 1314 414 426 433 432 458 1296 412 427 463 408 441 1312 406 432 437 432 437 456 434 411 438 425 465 404 434 433 457 414 455 414 455 414 434 430 460 410 439 423 436 432 458 411 438 425 434 459 410 430 439 428 462 405 433 1317 411 427 463 430 408 432 468 439 441 406 432 1318 431 1268 440 425 454 416 463 404 434 1291 437 1284 455 443 437 1265 432 434 456 413 435 436 433 432 437 456 434 1296 432 1266 462 409 460 1265 463 1309 409 429 461 410 439 1287 441 1284 434 433 436 429 440 424 435 1317 411 1312 406 459 431 414 435 1286 463 1265 463 408 441 1280 459 1269 439 1311 407 434 435 460 430 413 435 434 435 427 463 411 438 427 442 423 436 431 438 428 441 450 409 434 435 456 434 413 456 411 437 428 431 460 409 433 436 431 438 429 440 427 442 422 437 426 433 445 435 457 412 432 437 428 441 452 407 436 464 403 456 413 466 407 441 428 441 428 462 411 437 426 464 405 433 434 435 429 440 427 442 425 434 429 440 426 433 434 435 432 437 434 456 416 432 432 458 409 440 1288 440 1283 435 1288 441 429 440 453 406 1295 433 1290 439 426 443 17056 3607 1696 457 1271 437 1291 438 429 461 411 469 407 462 1292 405 461 408 433 436 1287 462 1265 432 435 434 1289 460 411 458 409 439 1286 463 1267 441 426 433 1319 409 1314 414 455 414 453 406 1295 433 431 459 435 434 1269 460 410 459 410 439 452 438 405 433 430 439 427 463 407 441 421 438 429 440 426 433 435 455 412 436 428 462 409 460 409 440 425 434 460 409 457 412 431 438 427 432 1293 435 429 440 425 434 429 440 426 433 430 439 1284 434 1315 413 425 465 405 433 434 435 1286 463 1264 464 407 462 1266 442 425 465 405 464 409 440 425 434 458 432 1271 457 1270 438 429 461 1298 410 1318 410 454 436 410 438 1282 457 1271 437 430 439 430 439 430 460 1270 438 1288 440 426 433 463 437 1266 442 1282 457 415 433 1290 439 1282 436 1290 438 452 407 430 439 428 441 421 438 429 440 427 463 406 442 421 459 410 459 408 461 408 440 426 433 456 413 430 470 408 440 450 430 422 457 414 434 431 438 428 441 424 455 413 435 432 437 430 439 425 465 407 441 449 410 431 459 408 461 417 463 409 439 425 434 433 436 431 438 427 463 406 463 410 439 431 438 424 435 432 437 452 438 405 433 460 409 454 436 409 439 427 442 449 431 417 442 429 440 1281 437 1286 432 1291 458 413 435 432 468 1277 431 1295 464 402 457 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3469 1701 462 1263 434 1289 439 428 441 426 464 407 441 1311 428 441 407 431 438 1287 462 1290 407 457 433 1267 441 424 455 414 455 1274 465 1290 407 435 455 1297 431 1299 429 416 463 432 406 1317 411 429 461 406 442 1281 437 430 460 409 460 407 441 450 429 417 462 405 464 407 441 426 433 432 437 427 442 425 434 460 409 431 438 427 432 437 463 404 465 402 436 431 438 427 442 425 465 1306 433 437 411 455 435 406 442 425 434 435 455 1275 443 1307 442 405 433 461 429 422 457 412 457 410 438 1313 436 1268 440 438 462 436 412 425 465 403 435 458 442 1294 434 1268 440 451 439 1269 459 1292 436 431 407 438 462 1270 438 1288 461 432 437 430 408 443 457 1295 433 1293 435 431 438 1287 431 1295 433 1297 431 411 458 1270 438 1317 411 1312 437 405 433 436 433 458 432 409 440 428 441 423 436 429 440 436 464 403 435 434 456 437 411 427 432 438 462 407 431 438 462 409 439 430 439 432 458 413 435 430 460 433 415 425 434 431 438 455 414 427 442 423 436 429 461 408 440 451 408 439 461 410 438 426 433 435 434 432 437 428 462 407 462 409 460 407 462 405 433 434 435 434 435 434 456 411 437 454 415 423 456 413 435 429 440 429 440 425 434 1318 431 438 410 432 458 1273 434 443 457 1268 460 1266 462 406 463 17223 3603 1724 408 1318 410 1287 441 449 410 455 414 425 434 1316 412 426 464 429 409 1290 438 1285 433 432 437 1313 436 407 441 423 436 1316 412 1314 414 428 441 1285 464 1263 465 428 410 431 459 1269 439 452 407 434 466 1273 455 413 456 416 463 403 435 456 434 407 462 412 457 412 436 432 437 432 437 432 437 428 441 452 407 434 435 432 458 411 437 454 436 409 439 428 462 414 455 411 458 1268 440 427 442 451 408 433 457 410 459 412 457 1295 413 1311 407 462 438 405 433 434 456 411 437 429 440 1314 435 1265 432 458 442 436 412 455 435 417 462 433 436 1265 463 1291 437 403 435 1315 434 1300 408 433 457 410 438 1314 414 1283 435 458 411 432 437 430 460 1294 414 1310 439 403 435 1289 439 1310 439 1267 461 419 440 1310 408 1289 439 1286 442 427 463 408 461 410 438 427 463 404 434 433 436 429 461 406 432 435 434 430 439 426 464 405 433 432 437 436 464 408 440 450 409 432 437 430 470 410 459 412 457 410 438 428 431 441 438 428 441 428 441 426 433 432 437 428 441 425 465 403 435 434 435 432 458 411 437 427 442 449 410 433 457 413 456 413 435 432 437 429 440 451 408 437 442 425 465 409 439 436 464 405 433 432 437 427 442 425 434 1316 412 433 457 410 459 1269 459 407 462 1292 415 1284 434 433 436 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3467 1703 460 1266 441 1281 437 430 439 455 435 410 438 1287 462 407 441 450 409 1290 459 1266 442 450 430 1269 439 453 406 437 463 1267 461 1266 442 454 436 1266 441 1310 429 412 457 436 433 1295 433 409 439 428 431 1321 428 414 465 402 436 436 433 445 455 416 432 432 437 430 439 428 462 418 461 410 459 434 414 426 433 439 440 453 406 437 432 435 434 430 439 426 433 434 456 437 411 1290 438 453 437 404 434 435 434 435 434 435 465 1262 456 1296 411 453 406 438 441 423 436 1316 433 1293 435 409 439 1289 439 428 462 409 439 454 415 426 433 434 435 1290 438 1287 441 424 435 1288 440 1283 435 468 432 408 440 1283 456 1272 436 458 432 418 461 408 440 1308 431 1269 459 407 462 1303 415 1285 433 1292 436 429 440 1283 435 1293 456 1270 438 455 414 425 434 457 412 431 438 429 440 429 440 425 434 431 438 428 462 445 434 406 463 409 439 425 434 431 459 408 440 427 432 437 442 425 434 431 438 426 433 461 429 412 436 432 437 430 460 409 439 452 407 432 437 432 458 411 458 411 437 429 440 427 442 423 436 435 434 433 457 417 431 444 456 414 434 430 439 452 407 434 435 458 411 429 440 454 405 438 431 438 441 423 456 411 437 429 461 413 435 434 435 434 435 1287 462 432 406 1293 456 1271 457 412 436 17062 3577 1724 460 1266 442 1308 410 457 433 408 440 425 434 1293 456 416 432 459 431 1268 440 1284 455 412 436 1289 439 430 439 430 439 1310 408 1289 439 428 462 1268 440 1286 442 422 457 412 457 1297 411 428 441 426 433 1293 456 411 437 430 439 428 462 409 439 428 441 423 436 429 461 409 439 429 440 429 440 451 408 435 455 415 433 433 436 431 459 408 440 425 454 414 465 406 463 404 465 1260 437 430 439 428 441 426 464 403 466 406 432 1292 457 1269 459 408 440 451 408 435 455 1272 456 1278 461 407 462 1265 442 451 408 459 410 431 438 431 438 429 440 1309 409 1288 440 425 454 1271 457 1268 460 411 437 430 439 1295 454 1271 437 431 438 429 440 427 442 1283 455 1272 436 434 456 1296 412 1285 464 1262 435 431 459 1267 461 1264 433 1291 458 413 435 429 461 409 439 430 439 452 407 434 435 456 413 454 415 423 456 411 458 408 440 429 461 406 442 449 410 457 433 415 433 436 433 436 433 436 433 436 433 458 411 429 440 427 432 435 465 404 434 431 459 412 436 431 469 407 462 405 464 402 436 431 438 431 438 458 432 408 440 425 434 457 433 410 438 453 406 437 432 433 436 455 414 426 433 432 458 409 439 454 436 407 462 407 441 428 431 436 433 434 435 458 432 1269 439 431 438 1287 462 1266 442 425 434 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3467 1697 456 1270 458 1306 412 424 456 440 408 432 437 1315 413 427 442 451 408 1321 438 1293 435 405 433 1319 430 411 437 455 414 1312 416 1307 432 435 413 1286 463 1291 417 422 437 457 412 1313 436 438 410 454 405 1292 436 431 438 424 435 432 458 438 410 432 437 454 436 410 438 452 407 430 439 430 460 409 460 411 437 427 442 425 434 431 459 415 433 458 432 417 442 432 458 414 434 1315 413 423 436 458 411 434 456 417 442 432 437 456 413 1308 431 412 436 427 463 406 463 404 465 404 434 433 436 1314 435 410 438 426 464 432 406 434 435 432 437 1287 462 405 433 462 407 1318 410 1316 433 438 410 430 439 1285 433 1292 436 431 459 412 436 431 459 1269 439 1316 412 428 431 1321 407 1318 410 1316 433 409 440 1308 431 1298 430 1297 431 436 412 428 462 436 412 428 431 436 464 405 433 432 437 432 437 429 461 448 411 428 462 412 436 428 441 448 431 411 437 456 413 454 405 436 433 460 409 427 432 436 464 405 433 436 433 458 432 413 435 429 440 423 436 433 457 413 456 415 433 431 438 429 440 425 454 419 440 425 465 411 437 436 464 407 441 424 435 428 441 452 407 436 433 432 437 432 437 456 434 411 437 425 465 404 434 433 457 1276 463 409 439 429 461 1294 434 1293 414 450 409 1317 411 456 413 17057 3603 1727 415 1310 408 1318 431 436 433 407 462 412 436 1287 431 462 438 405 433 1319 440 1290 407 461 429 1299 408 432 458 411 437 1289 439 1310 429 443 416 1305 434 1297 431 435 413 452 438 1292 436 411 437 453 416 1293 456 444 415 432 437 456 413 425 434 458 411 456 413 427 442 449 430 415 433 431 459 415 433 442 458 414 434 430 460 433 405 436 464 416 463 410 438 429 440 451 428 1301 438 436 412 426 433 437 432 432 437 432 437 430 439 1313 405 434 435 434 435 460 409 432 437 430 439 423 456 1298 430 410 438 429 440 427 432 433 436 431 438 1314 414 448 431 409 460 1294 413 1284 434 459 431 438 410 1289 460 1270 437 458 432 413 435 434 435 1315 434 1268 460 406 463 1291 416 1307 411 1313 436 409 439 1312 406 1318 410 1317 432 409 439 427 432 462 407 436 464 405 464 402 457 413 435 456 413 429 440 431 438 427 432 435 434 431 459 408 440 427 442 425 434 431 438 428 441 424 435 432 437 430 439 454 436 407 462 405 433 436 464 406 432 432 437 432 458 410 459 412 436 428 441 422 437 430 439 430 439 452 407 436 433 434 456 415 433 430 460 409 439 428 462 409 460 409 460 409 439 425 465 405 433 429 440 454 436 407 441 1308 410 457 412 429 440 1312 406 1319 409 429 440 1288 461 408 461 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9026 4518 591 1706 564 1709 561 581 564 579 566 579 566 580 565 1686 595 1708 562 1709 561 1711 569 1705 565 578 567 1683 587 1690 591 1687 593 577 568 573 562 579 566 577 568 575 560 584 561 1689 591 1686 594 1682 588 579 566 576 569 574 561 582 563 581 564 582 563 558 587 583 562 579 566 575 560 583 562 581 564 580 565 1686 594 1683 587 583 562 579 566 576 569 574 561 582 563 581 564 582 563 558 587 582 563 578 567 575 560 582 563 580 565 579 566 1684 586 561 594 575 560 581 564 578 567 576 559 584 561 583 562 558 587 560 585 584 561 580 565 577 568 574 561 582 563 581 564 556 589 558 587 582 563 578 567 575 560 582 563 580 565 579 566 1684 586 561 594 576 559 582 563 578 567 576 559 584 561 583 562 558 587 560 595 574 561 1711 559 582 563 1711 559 584 561 583 562 557 588 559 586 584 561 1711 559 1713 567 1705 565 1710 560 1689 591 1686 594 552 593 1706 564 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9031 4513 585 1712 568 1705 565 578 567 576 569 576 559 561 594 1683 587 1689 591 1707 563 1710 560 1714 566 577 568 1682 588 1689 591 1687 593 577 568 573 562 580 565 577 568 576 569 575 560 1691 589 1663 617 1685 595 572 563 579 566 577 568 575 560 584 561 583 562 558 587 1690 590 577 568 573 562 581 564 579 566 578 567 1658 612 1666 614 582 563 578 567 574 561 582 563 580 565 579 566 554 591 556 589 581 564 577 568 574 561 581 564 579 566 578 567 1685 585 535 620 576 569 572 563 579 566 576 569 575 560 584 561 559 586 561 594 575 570 571 564 578 567 576 569 574 561 583 562 582 563 558 587 583 562 579 566 576 569 574 561 582 563 581 564 1688 592 554 591 579 566 575 560 582 563 579 566 577 568 576 569 551 594 527 618 578 567 575 560 582 563 579 566 578 567 577 568 552 593 554 591 579 566 576 569 1705 565 577 568 1706 564 1687 593 1684 586 560 595 572 563 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9032 4512 586 1711 569 1704 566 577 568 575 560 585 560 560 595 1656 614 1689 591 1707 563 1709 561 1713 567 576 569 1682 588 1689 591 1687 593 576 569 573 562 580 565 578 567 576 569 575 560 1691 589 1689 591 1685 595 572 563 579 566 576 569 574 561 583 562 558 587 561 594 575 560 582 563 578 567 576 569 574 561 583 562 1689 591 1686 594 576 569 573 562 580 565 577 568 576 569 575 560 560 595 552 593 577 568 574 561 580 565 578 567 577 568 576 569 1682 588 559 586 584 561 580 565 577 568 575 560 584 561 583 562 558 587 560 595 575 560 581 564 578 567 575 560 584 561 583 562 582 563 558 587 583 562 579 566 576 569 574 561 582 563 581 564 1687 593 554 591 579 566 575 560 582 563 580 565 578 567 577 568 553 592 555 590 579 566 1707 563 579 566 576 569 575 560 584 561 559 586 561 594 575 560 1712 568 1705 565 578 567 1707 563 1687 593 1684 586 561 594 1705 565 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 608 17795 3020 8937 519 502 495 1493 492 475 522 472 525 469 518 476 521 472 525 469 518 476 521 1493 492 503 494 499 498 1490 495 500 517 503 494 1493 492 1497 498 1463 521 1467 517 1470 525 470 517 503 494 500 497 497 490 504 493 501 496 497 490 504 493 528 469 498 519 474 513 481 516 505 492 501 496 498 499 468 519 502 495 499 498 468 519 502 495 499 498 496 491 503 494 499 498 496 491 530 467 500 497 496 521 500 487 480 517 503 494 473 524 1464 521 1467 517 1471 524 1491 493 2972 2993 8939 517 1523 472 495 492 502 495 499 518 502 495 499 488 506 491 503 494 472 525 1490 495 472 525 496 491 1470 525 496 491 1497 498 1517 467 1494 490 1497 518 1470 514 1474 521 473 524 470 517 503 494 473 524 470 517 504 493 474 523 497 490 504 493 501 496 498 489 504 493 528 469 525 462 504 513 508 489 478 519 501 496 498 499 468 519 475 522 498 499 495 492 475 522 471 526 495 492 502 495 499 498 495 492 502 495 526 471 522 465 529 468 499 518 475 522 499 498 2967 2998 8933 523 1464 520 474 523 470 517 477 520 474 523 497 490 504 493 501 496 498 489 1499 496 525 493 474 513 1502 493 474 523 1465 519 1468 516 478 519 1468 517 1499 496 1492 493 1522 462 1499 496 1492 493 1495 520 1468 516 478 519 474 523 471 516 1472 523 1465 519 1469 526 495 492 502 495 498 499 495 492 529 468 499 498 495 492 529 488 1473 522 1466 518 475 522 472 525 1463 522 1466 518 502 495 499 498 496 491 503 494 499 498 496 491 503 494 1494 521 1493 492 1470 525 1463 521 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 603 17909 2988 8942 524 496 491 1523 472 496 491 530 467 526 471 496 521 499 488 506 491 503 494 1467 518 503 494 500 497 1463 522 500 497 497 490 1498 497 1491 493 1494 490 1498 497 1491 514 507 490 504 493 501 496 498 499 494 493 501 496 498 489 505 492 502 495 498 499 495 492 502 495 499 498 495 492 529 468 526 471 523 494 499 488 506 491 503 494 499 498 496 491 503 494 500 497 496 491 503 494 500 497 497 490 504 493 500 497 497 490 504 493 1495 489 1498 517 1471 514 1475 520 2947 3018 8939 517 1471 524 497 490 504 493 500 497 497 490 504 493 501 496 498 489 505 492 1495 489 531 486 508 489 505 492 1469 515 1472 523 1466 518 502 495 1466 518 1470 525 1463 522 1467 517 1497 498 1491 514 1474 521 1467 517 503 494 499 498 496 491 1470 525 1463 522 1468 517 503 494 500 497 497 490 504 493 528 469 524 463 531 486 508 489 1471 524 1465 519 501 496 498 499 495 492 502 495 498 499 495 492 1496 499 495 492 502 495 499 498 523 464 1496 519 1470 515 1474 521 1467 517 -# -name: POWER -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 9C 00 00 00 -# -name: MODE -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 9D 00 00 00 -# -name: POWER -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 12 ED 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 1A E5 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 13 EC 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4384 4380 522 1611 551 1609 553 1607 555 1605 557 523 547 533 548 1612 550 530 551 529 552 528 553 527 554 526 555 1605 557 1603 549 531 550 1610 552 528 553 527 554 527 554 526 555 525 556 524 546 1613 549 1611 551 1609 553 1607 555 1605 557 1603 548 1611 551 1609 553 527 554 527 554 526 555 525 556 524 557 523 547 533 548 532 549 531 550 1609 553 527 554 1606 556 1604 547 533 548 532 549 531 550 530 551 529 552 528 553 527 554 526 555 525 556 524 557 523 547 532 549 1611 551 529 552 528 553 528 553 527 554 526 555 525 556 524 546 533 548 532 549 1611 551 1609 553 527 554 526 555 525 556 524 557 523 547 7458 4392 4345 556 1604 547 1612 550 1611 551 1609 553 527 554 526 555 1605 557 523 547 533 548 532 549 531 550 530 551 1609 553 1607 555 525 556 1604 547 532 549 532 549 531 550 530 551 529 552 528 553 1607 555 1605 557 1603 548 1611 551 1610 552 1608 554 1606 556 1604 547 533 548 532 549 532 549 531 550 530 551 529 552 528 553 527 554 526 555 1604 547 533 548 1612 550 1610 552 528 553 528 553 527 554 526 555 525 556 524 557 523 547 533 548 532 549 531 550 530 551 529 552 1607 555 525 556 525 556 524 557 523 547 533 548 532 549 531 550 530 551 529 552 1607 555 1605 557 523 547 533 548 532 549 531 550 530 551 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4386 4350 550 1611 550 1609 552 1607 554 1606 555 524 556 524 556 1603 548 532 549 531 550 530 551 530 550 529 552 1608 553 1606 555 524 556 1603 548 532 549 532 548 531 550 530 551 530 550 529 551 1608 553 1606 555 1604 557 1602 549 1611 550 1610 551 1608 553 1607 554 525 555 525 555 524 556 524 556 523 547 533 547 532 549 531 549 531 550 1609 552 528 552 1607 554 1605 556 1603 548 533 548 532 548 531 550 531 549 530 551 529 552 529 552 528 552 527 553 526 554 525 555 1604 547 533 548 532 548 531 550 531 550 530 551 529 552 528 552 527 553 527 553 1605 556 1603 548 1612 549 531 549 530 551 530 550 529 552 7452 4385 4352 548 1612 549 1610 551 1609 552 1607 554 526 554 525 555 1605 556 523 547 533 547 532 548 532 548 531 549 1610 551 1608 553 526 554 1606 555 524 556 524 556 523 547 533 547 533 548 532 548 1610 551 1608 553 1607 554 1605 556 1604 547 1613 548 1611 550 1610 551 529 551 528 553 527 553 527 553 526 554 526 554 525 555 524 556 524 546 1613 548 531 549 1610 551 1608 553 1607 554 526 554 525 555 525 555 524 556 524 556 523 547 533 547 532 548 531 550 531 550 530 550 1608 553 527 553 526 554 526 554 525 555 525 555 524 556 523 547 533 547 532 548 1611 550 1609 552 1607 554 526 554 526 554 525 555 525 555 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4388 4348 553 1608 553 1606 555 1605 556 1603 548 532 548 532 548 1611 550 529 552 529 552 528 552 527 553 527 554 1605 556 1603 548 532 549 1611 550 530 551 529 552 528 553 528 552 527 553 526 555 1605 556 1603 548 1612 550 1610 551 1608 553 1607 554 1605 556 1604 547 533 548 532 549 532 549 531 550 530 551 530 551 529 552 528 552 527 554 1605 556 524 556 1603 548 1612 549 530 551 529 552 529 551 528 552 528 552 527 553 526 554 525 555 525 555 524 556 523 547 533 548 1611 550 530 550 529 551 528 552 528 552 527 553 527 553 526 554 525 555 524 556 1603 548 1611 550 530 550 530 550 529 551 528 553 528 552 7451 4386 4350 550 1611 550 1609 552 1608 553 1606 555 525 555 524 556 1604 547 533 547 532 548 531 549 531 550 530 551 1609 552 1607 554 525 555 1605 556 523 547 533 547 532 548 532 549 531 550 530 551 1609 552 1607 554 1605 556 1604 557 1603 548 1612 549 1610 551 1609 552 527 553 527 553 526 554 526 554 525 555 524 556 524 546 533 547 533 548 1611 550 530 551 1609 552 1607 554 526 554 525 555 525 555 524 556 524 546 533 547 533 548 532 548 531 549 530 551 529 551 528 553 1607 554 525 555 525 555 524 556 524 556 523 547 533 547 532 549 531 549 531 550 1609 552 1607 554 526 554 525 555 525 555 524 556 524 556 -# POWER -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4414 4350 566 1579 568 504 569 1576 571 501 572 500 563 535 538 507 566 1579 568 1578 569 529 544 501 572 500 563 509 564 507 566 532 541 1578 569 503 570 1574 563 1583 564 508 565 1580 567 1579 568 1577 570 529 544 1575 572 1573 564 1582 565 1581 566 1579 568 1578 569 1576 571 1575 572 1573 564 1582 565 1581 566 1579 568 1578 569 1577 570 1575 572 1574 563 509 564 1582 565 1606 541 505 568 530 543 502 572 501 562 1609 538 5170 4410 4354 562 536 537 1608 539 507 566 1580 567 1578 569 1577 570 1575 572 527 536 510 563 1582 565 1580 567 1579 568 1577 570 1576 571 1575 572 526 537 1583 564 508 565 507 566 1579 568 504 569 503 570 528 545 1574 563 510 564 508 565 507 566 506 567 504 569 503 570 502 571 500 563 536 537 508 565 507 566 505 568 530 543 503 570 501 572 526 537 1582 565 507 566 506 567 1579 568 1577 570 1576 571 1574 573 500 563 -# MODE -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4487 4275 568 1577 570 501 573 1573 564 508 565 506 567 504 569 502 571 1574 563 1582 565 507 566 505 568 529 544 1574 563 509 565 1580 567 1578 569 502 572 1573 564 1581 566 506 567 1577 570 1575 572 1572 565 507 566 1579 568 1576 571 1574 563 1582 565 1580 567 1577 570 1575 572 1573 564 1581 566 1579 568 1577 570 1574 563 1582 565 1580 567 1578 569 1575 572 500 563 1582 565 1579 568 504 569 1575 572 1573 564 508 565 506 567 5164 4406 4354 573 499 564 1581 566 506 567 1577 570 1575 562 1583 564 1580 567 505 568 503 570 1574 563 1582 565 1580 567 505 568 1576 571 500 563 509 565 1580 567 504 569 502 571 1573 564 508 565 506 567 505 568 1576 571 500 563 509 565 507 566 505 568 503 570 501 573 499 564 508 565 532 541 504 569 528 545 526 537 509 564 507 566 505 568 503 571 1573 564 508 565 506 567 1577 570 502 571 500 563 1581 566 1579 568 -# TEMP+ -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4408 4354 573 1599 538 534 539 1580 567 531 542 503 570 528 545 526 537 1608 539 1605 542 504 569 529 544 1574 563 535 538 534 539 1578 569 1576 571 501 572 1599 538 1581 566 506 567 1577 570 1575 572 1573 564 1581 566 1579 568 1577 570 1575 572 1573 564 1582 565 1580 567 1578 569 1576 571 1574 563 1582 565 1580 567 1578 569 1576 571 1574 563 1583 564 1581 566 506 567 1577 570 1575 572 1573 564 1582 565 1580 567 505 568 1576 571 5162 4407 4353 563 535 538 1581 566 506 567 1603 544 1575 572 1573 564 1581 566 507 566 505 568 1577 570 1574 573 500 563 1581 566 1579 568 505 568 503 570 1574 563 510 563 508 565 1580 567 531 542 503 570 501 562 536 537 508 565 532 541 505 568 529 544 527 546 526 537 534 539 533 540 531 542 529 544 527 536 536 537 534 539 532 541 531 542 503 570 1573 564 509 564 507 566 531 542 530 543 502 571 1573 564 508 565 -# TEMP- -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4406 4356 571 1574 563 509 564 1581 566 506 567 504 569 529 544 501 562 1582 565 1580 567 505 568 503 570 1575 562 510 563 508 565 1580 567 1604 543 529 544 1574 563 1582 565 507 566 1579 568 1577 570 1575 572 500 563 1582 565 1579 568 1577 570 1575 572 1573 564 1581 566 1579 568 1577 570 1575 572 1573 564 1581 566 1579 568 1577 570 1575 572 1573 564 1582 565 506 567 1578 569 1576 571 1574 563 1582 565 1580 567 505 568 503 570 5162 4408 4354 562 535 538 1581 566 505 568 1577 570 1575 572 1573 564 1581 566 506 567 505 568 1576 571 1573 564 509 564 1580 567 1578 569 503 570 501 562 1583 564 507 566 506 567 1577 570 502 571 500 563 509 564 1580 567 505 568 503 570 501 572 499 564 508 565 506 567 531 542 503 570 501 562 536 537 534 539 506 567 504 569 529 544 527 536 510 564 1580 567 505 568 503 570 501 572 526 537 508 565 1579 568 1577 570 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1347 405 1322 422 410 1332 1300 448 1289 480 383 1303 445 1298 439 1331 417 1299 438 1332 416 1302 1320 6834 1292 456 1292 450 413 1304 1328 445 1292 452 411 1302 446 1297 440 1303 445 1298 439 1303 445 1301 1321 6806 1320 453 1295 422 441 1301 1321 454 1294 422 441 1301 436 1305 443 1300 448 1295 442 1301 447 1298 1324 6802 1324 451 1297 420 443 1299 1323 424 1324 419 444 1298 439 1304 444 1298 439 1304 444 1299 438 1306 1326 6815 1321 453 1295 421 442 1302 1320 426 1322 421 442 1301 436 1306 442 1301 447 1296 441 1301 447 1299 1323 6802 1324 424 1324 418 445 1300 1322 424 1324 419 444 1298 439 1304 444 1299 438 1304 444 1299 438 1306 1326 6809 1328 420 1317 424 439 1306 1326 419 1318 424 439 1304 444 1299 438 1305 443 1299 438 1305 443 1302 1320 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 782 708 2923 2885 777 2176 748 2232 775 2152 782 736 752 2176 779 711 777 2179 776 2178 746 2181 774 744 754 737 771 720 778 713 775 716 782 737 751 740 779 712 828 717 833 657 779 713 775 2180 775 716 782 2173 772 720 778 2177 778 713 775 2180 775 716 772 2183 751 740 748 2180 775 715 835 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 775 718 2933 2878 773 2183 750 2179 775 2207 778 742 756 2172 782 2175 779 2150 783 737 750 743 775 743 755 764 723 743 755 738 749 743 776 744 754 739 748 744 754 739 779 2229 756 736 751 2178 776 744 754 2176 778 716 782 2174 780 740 747 2182 751 742 776 2179 754 2176 778 742 756 2174 780 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 746 745 2927 2882 748 2180 774 2207 778 2202 752 740 747 2181 752 2229 725 2203 751 2204 729 736 772 747 751 741 746 745 753 739 748 743 776 742 756 736 751 740 747 745 805 2202 752 740 747 2181 773 746 752 2176 778 715 772 2182 772 720 777 2177 746 746 772 2182 751 2178 776 742 756 736 803 -# -name: MODE -type: parsed -protocol: NECext -address: 81 66 00 00 -command: 9B 64 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 01 08 00 00 -command: 31 00 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 01 08 00 00 -command: 32 00 00 00 -# -name: POWER -type: parsed -protocol: NECext -address: 01 08 00 00 -command: 3F 00 00 00 -# -name: POWER -type: parsed -protocol: NEC -address: 20 00 00 00 -command: 02 00 00 00 -# -name: TEMP+ -type: parsed -protocol: NEC -address: 20 00 00 00 -command: 0A 00 00 00 -# -name: TEMP- -type: parsed -protocol: NEC -address: 20 00 00 00 -command: 11 00 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8917 4491 587 565 534 1665 594 559 540 1659 589 1688 540 534 585 1666 562 1664 564 1661 587 564 535 591 538 1661 567 585 534 1665 563 588 541 559 560 1665 563 563 566 559 540 586 533 1692 536 564 565 534 585 567 532 1667 592 534 565 587 542 531 588 564 535 591 538 561 568 558 540 585 534 565 564 1687 541 1658 560 1667 592 1660 558 1667 561 1664 584 567 542 558 561 564 565 561 538 588 541 558 561 1690 538 1661 567 1659 589 1662 566 1659 559 1667 591 559 540 587 532 541 588 564 535 591 538 561 558 567 542 584 535 565 564 1687 541 532 587 1664 564 1662 566 585 534 1691 537 589 540 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8971 4489 568 584 535 564 565 561 537 588 541 558 561 565 534 592 537 562 567 1659 559 566 563 563 536 1664 584 567 542 584 535 1664 564 587 542 558 561 564 535 591 538 562 567 558 541 585 534 566 563 562 537 589 540 559 560 566 533 593 536 563 566 560 539 587 532 567 562 564 535 591 538 1661 567 1658 590 1662 566 1659 559 1667 592 1660 558 567 562 563 536 590 539 561 558 567 542 584 535 1664 564 1662 586 1665 563 1662 566 1659 589 1663 565 560 559 566 533 593 536 564 565 560 538 587 542 557 562 564 535 591 538 1661 567 585 534 1666 562 1663 585 566 533 1667 592 560 538 -# -name: POWER -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 9B 00 00 00 -# -name: TIMER -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 9F 00 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4481 4414 595 1596 594 527 562 1602 588 1604 586 535 565 530 570 1594 596 526 563 532 568 1596 594 528 561 534 566 1598 592 1600 590 531 569 1596 594 527 562 1603 587 1604 586 1605 648 1543 594 527 562 1603 587 1604 586 1605 595 525 564 531 569 526 563 532 568 1596 594 528 561 534 566 1598 592 1600 590 1601 589 532 568 527 562 533 567 528 561 534 566 529 560 535 565 530 570 1594 596 1596 594 1597 593 1598 592 1599 591 5252 4503 4418 590 1601 589 532 568 1597 593 1598 592 529 560 535 565 1600 590 531 569 526 563 1602 588 533 567 529 560 1604 596 1595 595 526 563 1602 588 533 567 1598 592 1599 591 1600 590 1601 589 532 568 1598 592 1599 591 1600 590 531 569 527 562 532 568 528 561 1603 587 534 566 530 559 1605 595 1596 594 1597 593 528 561 534 566 529 560 535 565 530 570 525 564 531 569 527 562 1602 588 1603 587 1604 596 1595 595 1596 594 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1307 407 1308 406 441 1257 1305 435 1279 408 439 1259 1303 410 447 1251 443 1255 449 1249 445 1253 441 8177 1308 405 1299 413 444 1254 1308 405 1299 413 444 1253 1309 404 443 1255 439 1259 445 1252 442 1256 448 8169 1306 406 1309 404 443 1254 1308 405 1299 413 444 1253 1298 413 444 1253 441 1257 447 1250 444 1254 440 8176 1299 413 1302 410 447 1250 1301 411 1304 408 439 1259 1303 409 448 1249 445 1252 442 1256 448 1249 445 8171 1304 408 1307 405 442 1256 1306 406 1298 413 444 1253 1299 413 444 1253 441 1257 447 1250 444 1253 441 8175 1300 412 1303 409 448 1249 1302 409 1306 406 441 1256 1306 406 441 1256 448 1249 445 1252 442 1255 439 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9577 4536 622 576 621 577 620 577 620 578 619 578 619 578 619 579 618 1667 625 1660 622 1664 618 1668 624 1662 620 1666 616 1670 622 1664 618 580 617 581 616 1669 623 575 622 575 622 1664 618 580 617 580 617 581 616 1669 623 575 622 1664 618 1668 624 573 624 1662 620 1666 616 1670 622 39798 9556 2250 626 96841 9564 2245 620 96843 9560 2253 622 96836 9569 2244 621 96844 9571 2244 621 96843 9573 2247 619 96844 9572 2248 617 96847 9570 2248 617 96848 9568 2250 626 96833 9564 2251 625 96834 9564 2252 624 96843 9595 2223 653 96809 9597 2221 644 96822 9604 2215 650 96814 9591 2226 650 96813 9591 2225 650 96811 9600 2218 647 96816 9597 2221 654 96812 9601 2219 646 96815 9598 2220 645 96813 9601 2216 649 96815 9599 2219 657 96809 9565 2252 624 96842 9564 2254 622 96841 9565 2254 622 96838 9568 2249 616 96844 9571 2247 619 96842 9574 2245 620 96840 9566 2251 625 96838 9567 2251 625 96835 9570 2250 615 96848 9566 2254 621 96843 9572 2247 618 96847 9567 2253 623 96842 9572 2249 616 96843 9572 2247 618 96843 9572 2249 616 96849 9576 2245 621 96842 9574 2246 619 96842 9575 2246 619 96843 9573 2248 617 96843 9572 2249 616 96847 9571 2249 617 96839 9569 2251 625 96837 9569 2251 624 96837 9568 2250 626 96835 9572 2248 618 96844 9572 2246 619 96843 9564 2253 623 96834 9572 2245 620 96835 9569 2246 619 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9542 4537 620 578 619 578 619 578 619 577 620 577 620 577 620 577 620 1666 616 1669 623 1662 620 1666 616 1670 622 1663 619 1667 615 1671 621 575 622 574 623 1663 619 1666 616 580 617 579 618 578 619 577 620 576 621 1665 617 579 618 577 620 1665 617 1668 614 1671 621 1664 618 1666 616 39847 9511 2253 622 96974 9541 2253 622 97001 9553 2256 619 96996 9567 2256 619 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9611 4510 657 544 653 548 649 552 655 544 653 547 650 550 657 544 653 1637 624 1664 618 1669 623 1663 618 1668 654 1635 647 1642 650 1640 652 550 647 1644 627 1663 619 1669 623 1665 617 1671 621 577 620 578 619 580 617 581 616 581 616 580 617 579 618 578 619 1668 624 1663 619 1669 623 39867 9578 2250 615 96998 9539 2257 618 96975 9513 2250 615 -# -name: TIMER -type: parsed -protocol: NEC -address: 81 00 00 00 -command: 69 00 00 00 -# -name: POWER -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 05 FA 00 00 -# -name: TIMER -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 01 FE 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5055 2191 335 1799 360 752 338 714 365 716 364 1800 359 723 367 715 365 718 361 720 359 1805 365 747 332 1802 357 1806 364 719 360 1803 367 1798 361 1803 367 1797 362 1802 368 744 335 1799 360 721 369 714 365 716 363 719 360 721 369 713 366 1798 361 1802 368 715 364 717 362 720 359 723 367 715 364 1799 360 722 368 714 365 717 363 719 361 722 368 714 365 716 363 719 360 721 369 713 366 716 363 718 361 721 359 723 367 1797 362 1802 368 1796 363 1801 358 754 336 716 363 719 361 29583 5057 2160 366 1798 361 750 329 723 367 715 364 1800 359 753 337 715 364 717 363 720 359 1804 366 747 332 1801 358 1806 364 718 361 1803 356 1798 1802 368 1797 362 1802 368 714 365 1799 360 722 368 714 365 717 362 719 360 722 368 714 365 1798 361 1803 367 715 364 718 362 721 359 723 367 715 364 718 361 720 359 723 367 715 364 717 362 720 360 1804 366 1799 360 721 369 714 365 1798 361 1803 367 1798 361 720 359 723 367 715 364 718 361 720 360 723 367 715 364 717 362 720 359 722 368 714 365 717 362 719 360 722 368 1796 363 719 360 721 369 714 365 716 363 719 361 721 369 713 366 716 363 718 361 721 358 723 367 716 363 718 362 720 359 723 367 715 364 718 361 720 359 723 367 715 364 1799 360 1804 366 1799 360 721 369 714 365 716 363 1801 358 754 336 1798 361 720 360 1805 365 748 331 720 359 723 367 715 364 717 363 720 360 722 368 714 365 717 362 720 359 722 368 714 365 717 363 719 361 722 368 714 365 1798 361 751 339 713 366 716 363 1801 359 1805 365 1800 359 1805 365 1800 359 1805 365 1799 360 -# -name: POWER -type: parsed -protocol: NECext -address: 48 12 00 00 -command: 88 08 00 00 -# -name: TIMER -type: parsed -protocol: NECext -address: 48 44 00 00 -command: C8 08 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 5624 5582 567 553 568 550 571 550 561 557 564 584 537 554 567 1672 571 1671 562 554 567 553 568 1696 537 1676 567 1673 570 1668 565 554 567 556 565 1671 562 557 564 1676 567 1671 562 584 537 555 566 1673 570 552 569 1666 567 1671 562 1676 567 1671 572 548 563 556 565 1672 571 554 567 547 564 556 565 1674 569 549 562 558 563 1676 567 551 570 554 568 548 563 557 564 555 566 554 567 1672 571 1667 566 1674 569 1673 570 545 566 554 567 1671 572 1667 566 554 567 1672 561 557 564 1677 566 -# -name: POWER -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 0A F5 00 00 -# -name: TIMER -type: parsed -protocol: NECext -address: 01 FF 00 00 -command: 1B E4 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 08 F5 00 00 -command: 0D F2 00 00 -# -name: TIMER -type: parsed -protocol: NECext -address: 08 F5 00 00 -command: 06 F9 00 00 -# -name: POWER -type: parsed -protocol: NECext -address: 08 F5 00 00 -command: 00 FF 00 00 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8956 4420 563 568 533 545 566 537 564 539 562 541 560 1650 563 1648 565 539 562 542 559 544 567 536 565 1671 542 1643 560 1652 561 543 558 545 566 1645 568 1643 560 544 568 536 565 1646 567 537 564 539 562 541 560 543 558 545 566 537 564 540 561 542 559 544 568 536 565 538 563 540 561 542 559 544 567 536 565 539 562 541 560 543 569 535 566 537 564 540 561 542 559 544 568 536 565 538 563 541 560 543 558 545 567 537 564 539 562 541 560 544 568 535 566 538 563 540 561 542 559 544 568 536 565 539 562 541 560 543 569 536 565 538 563 540 561 543 558 545 566 537 564 540 561 542 559 544 568 536 565 538 563 541 560 543 558 545 567 537 564 540 561 542 559 544 567 537 564 539 562 541 560 544 568 535 566 538 563 540 561 542 559 545 566 537 564 539 562 542 559 544 568 536 565 538 563 540 561 543 558 545 566 537 564 539 562 542 559 544 568 536 565 538 563 541 560 543 558 545 567 537 564 540 561 542 559 544 567 536 565 539 562 541 560 543 569 535 566 538 563 540 561 542 559 545 567 537 564 539 562 541 560 544 568 536 565 538 563 541 560 543 558 545 567 538 563 540 561 542 559 545 567 537 564 539 562 542 559 544 568 536 565 538 563 541 560 543 558 572 540 538 563 540 561 542 559 545 566 537 564 539 562 542 559 544 568 536 565 538 563 1649 564 540 561 1651 562 541 560 544 557 546 566 538 563 541 560 543 558 546 565 538 563 540 561 542 559 545 567 537 564 539 562 542 559 544 567 536 565 539 562 541 560 544 557 546 566 538 563 1649 564 539 583 1630 563 541 591 513 557 546 566 565 536 541 591 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8961 4409 563 541 570 533 568 535 566 537 564 539 562 1649 564 1648 565 539 562 541 570 533 568 536 565 1645 568 1644 569 1643 570 534 567 536 565 1646 567 1645 568 536 565 565 536 1648 565 540 572 558 543 560 541 562 539 564 537 566 546 558 543 560 541 563 538 565 536 567 544 559 542 562 539 564 537 566 546 558 543 561 540 563 538 565 536 568 544 560 541 562 539 564 537 566 546 558 543 561 540 563 538 565 536 568 544 560 541 562 539 564 537 567 545 559 542 561 540 563 538 566 545 558 543 561 540 563 538 565 536 568 544 560 541 562 539 565 536 567 544 559 542 561 540 564 537 566 545 558 543 561 540 563 538 565 536 568 543 560 541 562 539 564 537 566 545 532 569 534 567 537 564 539 562 541 571 560 541 536 565 538 563 540 572 532 569 535 566 537 564 539 573 531 570 534 567 536 565 539 562 541 571 533 568 535 566 538 563 540 572 532 569 535 566 537 564 540 572 532 569 534 567 537 564 539 573 532 569 534 567 536 565 539 562 541 571 533 568 536 565 538 563 541 571 533 568 535 566 538 563 540 572 532 569 535 566 537 564 540 572 532 569 534 567 537 564 539 562 542 570 534 567 536 565 539 562 541 570 534 567 536 565 539 562 542 570 534 567 536 565 539 562 542 570 534 567 536 565 539 562 542 570 534 567 536 565 539 562 542 570 1641 572 1640 563 543 569 535 566 538 563 540 561 543 569 535 566 538 563 540 561 543 569 535 566 538 563 541 571 533 568 536 565 539 562 541 571 534 567 537 564 539 562 542 570 534 567 537 564 1646 567 1646 567 539 562 542 570 534 567 537 564 540 561 542 590 -# -name: SWING -type: parsed -protocol: NECext -address: 10 E7 00 00 -command: 06 F9 00 00 -# -name: TIMER -type: parsed -protocol: NECext -address: 81 66 00 00 -command: 9F 60 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8455 4196 542 1566 541 539 519 535 513 541 517 1565 541 538 520 534 514 540 518 1563 544 1565 542 538 520 533 515 539 519 535 513 541 517 536 522 532 516 538 520 533 515 539 519 535 513 1569 538 542 516 1566 541 539 519 534 514 540 518 1564 542 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8923 4452 599 1629 589 1643 596 527 597 530 594 538 597 536 599 536 599 1640 599 519 595 1641 598 1639 590 535 600 532 592 541 594 543 592 533 591 1638 591 1642 597 527 598 1645 594 538 597 541 594 542 593 532 592 1637 591 1642 597 526 599 530 594 536 599 534 590 546 599 527 598 519 595 525 600 525 600 528 597 533 591 542 593 545 600 528 597 520 594 526 599 526 599 528 597 534 590 544 591 547 598 511 593 7894 594 524 590 530 595 529 595 533 592 539 596 538 597 1655 594 1648 591 527 597 525 600 524 600 526 599 531 593 541 594 543 592 535 600 517 597 523 591 533 591 536 599 532 592 542 593 546 599 530 594 525 600 522 592 533 591 536 599 533 591 542 593 543 592 535 590 526 599 522 592 530 594 533 591 539 596 539 596 541 594 533 592 525 600 521 593 531 593 533 591 540 595 540 595 543 592 536 599 519 595 527 597 528 597 530 594 534 590 543 592 545 600 528 597 521 593 527 598 525 599 1638 591 540 595 540 595 1653 596 1626 592 7894 594 525 600 521 593 531 593 536 599 530 594 537 598 539 596 531 593 525 600 520 594 530 594 533 592 540 595 537 598 538 597 529 595 522 592 528 597 527 598 529 596 534 590 542 593 544 591 537 598 519 595 526 599 526 599 529 596 535 600 534 601 537 598 1646 593 525 600 522 592 532 592 1648 601 1646 593 1655 594 546 599 530 594 522 592 527 598 526 599 529 595 535 600 535 600 537 598 531 593 524 601 519 595 529 596 1641 598 1648 591 1655 594 545 600 1625 593 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8929 4464 598 1633 595 1637 591 535 600 529 595 537 598 540 595 542 593 1643 596 521 593 1640 599 1637 591 538 597 535 600 536 599 540 595 532 592 1635 593 1636 592 531 593 1646 593 537 598 536 599 542 593 1649 600 1631 597 1635 593 531 593 533 602 530 594 539 596 542 593 535 600 517 597 523 591 532 592 532 592 538 597 535 600 536 599 527 597 517 597 523 591 531 593 532 592 536 599 535 600 538 597 513 601 7879 598 519 595 526 598 526 599 530 594 537 598 534 590 1658 591 1648 591 525 599 521 593 531 593 534 590 540 595 538 597 540 595 532 592 525 600 522 592 532 592 535 600 532 592 543 592 1655 594 533 591 527 597 525 600 525 599 529 595 536 599 536 599 539 596 530 594 521 593 526 598 525 600 528 597 535 600 534 590 547 598 530 594 524 601 521 593 531 593 534 601 530 594 540 595 542 593 534 590 526 598 522 592 530 594 532 592 539 596 539 596 541 594 533 591 524 590 529 595 529 596 1642 597 534 590 542 593 545 600 510 594 7889 599 519 595 524 590 533 591 534 590 538 597 536 599 537 598 529 595 1631 598 1635 593 1644 595 534 601 532 592 541 594 543 592 536 599 519 595 525 599 524 600 526 598 530 594 537 598 538 597 529 595 521 593 526 598 525 600 527 597 531 593 541 594 545 600 1641 598 521 593 527 597 526 598 1643 596 1646 593 1658 591 547 598 530 594 524 601 522 592 533 591 535 600 531 593 540 595 543 592 535 600 1628 601 1631 598 1641 598 1642 597 1647 592 1655 594 542 593 1626 592 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8912 4459 593 1636 593 1640 599 525 600 528 597 533 602 532 593 544 601 1637 592 523 591 1639 600 1636 593 535 600 529 596 538 597 541 594 534 601 1629 600 1634 595 531 1719 1649 532 593 541 594 543 602 526 599 519 595 1640 599 525 600 529 596 1649 601 534 601 537 598 529 596 522 603 519 595 529 596 533 602 528 597 538 597 540 595 532 593 523 602 518 596 527 598 528 597 535 600 533 592 545 601 509 595 7882 598 519 595 524 601 521 593 535 600 530 595 538 597 1650 600 1637 602 514 600 517 597 526 599 527 598 532 593 541 594 544 601 525 600 515 599 519 595 527 598 529 596 534 601 532 593 545 600 526 599 519 595 551 574 524 601 526 599 533 602 532 593 545 600 526 599 517 597 523 602 522 603 525 600 532 593 541 594 543 602 525 600 516 598 522 592 530 595 533 602 529 596 539 596 541 594 532 593 524 601 518 596 527 598 528 597 533 602 531 594 543 592 533 602 1625 593 526 599 523 602 1636 603 1639 600 533 592 1657 593 1628 601 7882 597 521 593 527 598 526 599 529 596 535 600 535 600 538 597 531 594 1634 595 1641 598 527 598 531 594 535 600 532 593 542 593 535 600 518 596 524 601 521 593 533 602 528 597 537 598 539 596 528 597 520 594 525 600 521 593 533 602 528 597 536 599 537 598 527 598 517 597 522 603 521 593 1644 595 1646 593 1651 599 537 598 526 599 516 598 520 594 527 598 528 597 532 593 539 596 540 595 531 594 1638 601 1633 596 528 597 1645 594 1652 598 1649 601 535 600 509 595 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4454 4377 594 1560 591 486 589 1565 597 480 595 482 593 484 591 485 590 1564 598 1557 594 1560 591 1563 588 489 597 480 595 482 593 483 592 485 590 487 588 1565 597 1558 593 1562 589 487 588 489 597 1558 593 1561 590 1564 598 1557 594 1560 591 1563 588 1567 595 1560 591 1563 588 1566 596 1559 592 1562 589 1565 597 1558 593 1562 589 1565 597 1557 594 1561 590 486 590 488 598 479 596 1558 593 484 591 1563 588 489 597 1557 594 5161 4459 4371 601 476 589 1565 597 481 594 1560 592 1562 589 1565 597 1558 593 484 591 485 590 487 589 488 598 1556 595 1559 592 1563 588 1566 596 1559 592 1562 589 488 587 489 597 480 595 1559 592 1562 589 488 598 479 596 480 595 482 593 484 591 485 601 476 589 488 598 480 595 481 594 483 592 484 591 486 590 487 588 489 597 480 595 481 594 483 592 1562 589 1565 597 1558 593 483 592 1562 589 488 587 1567 595 482 593 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3439 1755 439 1262 435 1286 432 438 441 423 456 418 441 1282 436 433 436 431 438 1285 433 1314 435 408 461 1293 435 408 440 426 433 1289 460 1296 412 455 414 1312 406 1319 409 429 440 429 461 1267 441 426 464 406 442 1281 437 430 439 427 432 436 464 405 433 432 437 458 411 456 434 422 437 428 462 412 436 428 441 422 457 411 437 456 413 454 405 436 433 434 435 427 432 435 465 404 434 435 434 431 459 413 435 429 440 422 437 433 457 1270 438 1288 461 410 438 426 464 404 434 1293 435 1315 413 423 436 1287 462 407 431 434 435 435 434 433 467 415 433 1318 410 1286 463 409 439 1284 455 1301 438 410 438 426 464 1262 456 1269 439 429 461 410 469 407 462 1268 440 1285 433 461 408 456 413 1284 465 1261 457 414 455 1271 468 1277 431 1321 438 405 433 460 409 430 439 426 464 407 462 407 441 450 409 434 435 430 439 452 438 431 438 405 464 405 464 405 464 409 460 409 439 430 439 427 442 423 436 460 430 415 433 431 438 425 434 444 435 456 413 432 437 427 442 425 434 436 464 429 430 439 430 417 442 428 441 428 462 411 437 452 438 405 433 434 435 456 413 427 442 425 434 455 414 427 432 435 434 433 436 427 463 406 432 437 442 449 430 1268 460 1265 463 1262 466 405 464 406 442 422 437 1289 439 428 441 17052 3577 1746 407 1321 407 1294 434 460 409 431 459 439 409 1288 440 429 440 431 438 1309 430 1272 456 415 464 1289 408 433 457 412 436 1289 439 1284 465 404 434 1292 436 1289 439 428 441 450 409 1315 413 427 442 451 408 1294 434 432 437 430 439 428 462 406 432 432 458 414 455 414 434 430 439 428 441 426 433 436 433 432 437 454 405 438 441 428 431 434 456 418 441 448 431 411 437 429 440 425 434 433 436 458 411 425 434 433 436 457 412 1287 462 1263 455 419 461 408 440 430 439 1310 429 1272 435 460 409 1288 440 429 461 408 441 425 465 405 464 407 441 1286 432 1291 437 432 437 1315 413 1314 414 450 440 406 442 1283 456 1270 458 413 456 413 456 413 435 1297 431 1294 465 404 434 433 436 1314 414 1285 433 433 436 1288 440 1285 464 1264 433 433 436 453 416 425 434 460 409 434 435 432 437 454 415 423 436 431 459 424 435 430 460 413 435 430 439 423 456 413 435 431 438 455 414 427 432 435 434 455 414 426 464 406 432 437 442 422 457 414 434 431 438 424 435 435 455 414 455 416 432 433 436 457 412 426 464 410 438 453 437 412 436 437 463 409 439 425 434 455 414 426 433 437 432 433 436 433 436 457 433 412 436 453 437 406 432 435 465 1266 462 1263 434 1318 410 426 464 410 438 426 433 1293 435 434 435 -# POWER OFF -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3199 1594 380 414 380 1208 379 415 389 405 389 1201 386 407 386 1202 385 409 384 408 385 1203 384 1203 384 1204 383 410 383 1206 381 412 382 1208 379 1207 380 1209 389 404 390 406 387 405 389 406 387 1201 386 1202 385 408 385 1204 383 409 384 1204 383 1205 382 412 382 411 382 413 380 1206 382 414 380 1208 379 414 379 416 388 1201 386 1201 386 1201 386 408 385 1202 385 1204 383 1204 383 1206 381 1205 382 1207 380 1207 380 1208 390 405 388 405 389 406 387 406 387 406 387 407 386 408 385 1202 385 1204 383 1203 384 411 382 1205 382 1205 382 1207 380 1207 381 414 390 404 379 414 380 1210 388 406 387 408 385 406 387 408 385 1202 385 1203 384 409 384 1205 382 1205 382 1206 381 1206 381 1208 379 415 389 404 389 1199 388 407 386 406 387 407 386 408 385 409 384 1202 385 1204 383 1204 383 1204 383 1205 382 412 381 1208 379 1208 379 415 389 404 390 406 387 406 387 407 386 1200 387 409 384 408 385 1202 385 1205 383 410 383 1205 382 1205 382 412 381 1207 380 1207 380 415 389 404 379 1209 389 406 387 405 388 1200 387 408 385 408 385 1202 385 1204 383 1204 383 1204 383 1208 379 1207 380 1207 380 1208 379 416 388 405 388 407 386 407 386 407 386 407 386 407 386 408 385 408 385 1204 383 1204 383 1205 382 1205 382 1207 380 1208 379 414 379 1210 388 406 387 406 387 406 387 407 386 407 386 409 384 1203 384 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3198 1595 389 404 379 1209 389 405 388 406 387 1200 387 407 386 1202 385 409 384 410 383 1203 384 1204 383 1179 408 413 380 1207 380 414 379 1209 389 1172 415 1200 387 406 387 409 384 408 385 409 384 1204 383 1205 382 410 383 1206 381 412 381 1206 381 1183 415 404 389 405 388 406 387 1200 387 406 387 1202 385 408 385 409 384 1204 383 1204 383 1205 382 412 381 1206 381 1181 406 414 390 1199 388 1173 414 1175 412 1175 412 1177 410 409 384 409 384 1205 382 410 383 411 382 412 381 412 382 412 381 1207 380 1209 389 405 389 1199 388 1174 413 1175 412 1175 412 1177 410 410 383 409 384 1205 382 412 381 412 381 413 380 413 380 1208 379 1207 380 414 379 1209 389 1173 414 1176 411 1177 410 1178 409 409 384 410 383 1206 381 411 382 412 381 412 382 413 381 413 380 1208 379 1208 379 1183 415 1173 414 1175 412 407 386 1203 384 1177 410 410 383 412 381 412 381 412 381 412 381 1207 380 414 379 414 379 1208 390 1199 388 405 388 1199 388 1200 387 409 384 1202 385 1177 410 410 383 412 381 1206 381 411 382 413 380 1207 380 413 380 414 380 1208 390 1199 388 1175 412 1175 412 1176 411 1179 408 1178 409 1179 408 412 381 413 380 414 379 414 379 415 389 404 379 414 379 416 388 405 389 1201 386 1200 387 1201 386 1177 410 1177 410 1179 408 411 382 1208 379 413 380 413 381 413 380 415 389 404 389 405 389 1199 388 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3200 1592 382 412 381 1206 381 414 379 414 379 1208 379 416 388 1200 387 406 387 407 386 1202 385 1176 411 1178 409 410 383 1179 408 411 382 1182 416 1172 415 1172 415 404 389 406 387 407 386 408 385 1201 386 1177 410 409 384 1179 408 412 381 1179 408 1181 406 413 380 413 380 414 379 1209 389 405 388 1199 388 406 387 408 385 1202 385 1179 408 1178 409 412 381 1180 407 1182 405 414 379 1182 416 1174 413 1174 413 1176 411 1176 411 410 383 410 383 1204 383 412 381 412 381 412 381 413 380 1209 389 1172 415 1174 413 406 387 1174 413 1177 410 1177 410 1179 408 410 383 412 381 413 380 1206 381 413 380 414 379 414 379 415 389 1199 388 1175 412 407 386 1177 410 1178 409 1178 409 1179 408 1180 407 413 380 414 379 1208 379 415 389 405 388 407 386 406 387 407 386 1201 386 1177 410 1178 409 1179 408 1180 407 412 381 1180 407 1182 405 416 388 405 388 406 387 407 386 407 386 1201 386 409 384 409 384 1204 383 1179 408 411 382 1180 407 1182 405 416 388 1172 415 1173 414 406 387 407 386 1201 386 409 384 410 383 1203 384 410 383 412 381 1206 381 1183 415 1173 414 1173 414 1174 413 1175 412 1178 409 1178 409 410 383 411 382 411 382 412 381 412 381 413 380 413 380 416 388 403 380 1208 379 1184 414 1175 412 1175 412 1176 411 1177 410 411 382 1178 409 411 382 412 381 413 380 413 380 413 380 413 380 1208 379 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3472 1744 416 457 415 1306 418 463 419 466 416 473 419 474 418 478 414 457 415 458 414 463 419 462 420 465 417 472 420 1316 418 479 413 458 414 459 413 464 418 463 419 466 416 473 419 1318 416 1324 420 1295 418 454 418 459 413 1312 422 463 419 470 422 471 421 475 417 454 418 455 417 460 422 459 413 472 420 469 413 480 412 485 417 453 419 454 418 459 413 468 414 471 421 468 414 479 413 484 418 452 420 453 419 458 414 468 414 471 421 467 415 478 414 483 419 451 421 453 419 1301 412 1312 422 463 419 470 422 471 421 476 416 433 418 10535 3469 1746 414 459 413 1308 415 465 417 468 414 475 417 476 416 481 421 449 413 461 421 455 417 465 417 467 415 474 418 1319 415 482 420 450 422 451 421 457 415 466 416 469 413 476 416 1320 414 1327 417 1297 416 457 415 462 420 1305 419 466 416 473 419 474 418 478 414 457 415 458 414 463 419 462 420 465 417 472 420 473 419 477 415 456 416 1301 412 464 418 463 419 1310 413 1319 415 1321 413 485 417 453 419 454 418 459 413 1312 422 1307 416 472 420 1317 416 480 412 459 413 460 412 465 417 464 418 467 415 474 418 475 417 479 413 1302 422 1295 418 1302 421 1303 421 1308 415 473 419 1318 416 481 421 1293 420 1296 417 460 412 1313 421 1307 416 473 419 473 419 478 414 457 415 458 414 463 419 462 420 465 417 472 420 473 419 477 415 456 416 457 415 1306 418 1307 416 1312 422 467 415 478 414 483 419 451 421 452 420 457 415 467 415 469 413 476 416 1321 413 1328 416 1298 415 458 414 463 419 462 420 465 417 472 420 472 420 477 415 456 416 457 415 462 420 461 421 464 418 470 422 471 421 476 416 454 418 1299 414 463 419 461 421 464 418 471 421 472 420 477 415 1299 414 459 413 464 418 463 419 466 416 473 419 473 419 478 414 457 415 458 414 463 419 462 420 465 417 472 420 473 419 477 415 456 416 457 415 1306 417 1307 416 468 414 1319 415 478 414 483 419 430 421 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3473 1716 444 455 417 1304 420 461 421 464 418 471 421 471 421 476 416 455 417 456 416 461 421 460 412 473 419 469 413 1324 420 477 415 455 417 457 415 462 420 461 421 463 419 470 422 1315 419 1321 413 1302 422 451 421 456 416 1309 414 470 422 467 415 478 414 482 420 451 421 452 420 457 415 466 416 469 413 476 416 477 415 481 421 450 412 461 421 456 416 465 417 468 414 474 418 475 417 480 412 458 414 459 413 464 418 463 419 466 416 473 419 474 418 478 414 457 415 458 414 1307 417 1308 416 469 413 476 416 477 415 481 421 428 413 10540 3465 1751 419 454 418 1302 422 459 413 472 420 469 413 480 412 485 417 453 419 454 418 459 413 468 414 471 421 468 414 1322 422 475 417 454 418 455 417 460 412 469 413 472 420 468 414 1323 421 1320 414 1300 413 460 412 465 417 1307 417 468 414 475 417 476 416 481 421 449 413 460 422 455 417 464 418 467 415 474 418 474 418 479 413 458 414 459 413 464 418 463 419 1309 415 1318 416 1321 413 484 418 452 420 453 419 458 414 1311 413 1316 418 471 421 1315 419 478 414 457 415 458 414 463 419 462 420 465 417 472 420 472 420 477 415 1299 414 1302 422 1299 414 1310 414 1315 419 470 422 1315 419 478 414 1300 413 1303 421 456 416 1309 415 1314 420 469 413 480 412 485 417 453 419 454 418 459 413 468 414 471 421 468 414 479 413 484 418 452 420 453 419 1302 422 1303 421 1307 417 473 419 473 419 478 414 457 415 458 414 463 419 462 420 465 417 471 421 1316 418 1322 422 1293 420 452 420 457 415 466 416 469 413 476 416 477 415 482 420 450 422 451 421 456 416 465 417 468 414 475 417 476 416 480 412 459 413 1304 420 457 415 466 416 469 413 476 416 477 415 481 421 1293 420 453 419 458 414 467 415 470 412 477 415 477 415 482 420 450 422 451 421 456 416 465 417 468 414 475 417 476 416 481 421 449 413 1304 420 457 415 1310 414 471 421 1311 413 481 421 475 417 432 419 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3466 1750 420 453 419 1302 422 459 413 472 420 469 413 480 412 485 417 453 419 455 417 460 412 469 413 472 420 469 413 1324 420 476 416 455 417 456 416 461 421 460 422 463 419 470 422 1315 419 1322 412 1302 422 452 420 457 415 1310 414 471 421 468 414 479 413 484 418 452 420 453 419 458 414 468 414 471 421 467 415 478 414 483 419 452 420 453 419 458 414 467 415 470 412 477 415 478 414 483 419 451 421 452 420 457 415 466 416 469 413 476 416 477 415 482 420 450 422 451 421 1300 413 1312 412 473 419 470 412 481 421 475 417 432 419 10572 3473 1743 417 456 416 1305 419 462 420 465 417 472 420 473 419 477 415 456 416 457 415 463 419 461 421 464 418 471 421 1316 418 479 413 457 415 459 413 464 418 463 419 466 416 473 419 1317 417 1324 420 1294 419 454 418 459 413 1312 422 463 419 470 422 471 421 476 416 454 418 455 417 461 421 460 412 473 419 469 413 480 422 475 417 453 419 1298 415 462 420 461 421 1308 415 1317 417 1320 414 483 419 451 421 452 420 1301 412 1312 422 1307 417 473 419 1317 417 480 422 449 412 1304 419 1301 412 1312 422 1307 416 1316 418 1319 415 1326 418 453 419 1298 415 462 420 461 421 464 418 1314 420 1317 417 480 422 449 412 460 422 1299 414 467 415 1313 421 468 414 480 412 484 418 453 419 454 418 459 413 468 414 471 421 468 414 479 413 484 418 452 420 453 419 1302 422 1303 421 1308 415 474 418 474 418 479 413 458 414 459 413 464 418 463 419 466 416 473 419 1318 416 1324 420 1295 418 454 418 459 413 468 414 471 421 468 414 479 413 484 418 452 420 454 418 459 413 468 414 471 421 467 415 478 414 483 419 452 420 1297 416 460 422 459 413 472 420 469 413 480 412 484 418 1297 416 456 416 461 421 460 422 463 419 470 422 471 421 476 416 454 418 455 417 460 422 459 413 472 420 469 413 480 412 485 417 453 419 454 418 1303 421 1304 420 466 416 1316 418 476 416 480 422 1271 412 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3474 1742 417 456 416 1305 418 462 420 465 417 472 420 473 419 478 414 456 416 458 414 463 419 462 420 465 417 472 420 1316 418 479 413 458 414 459 413 464 418 463 419 466 416 474 418 1318 416 1325 419 1296 417 455 417 460 422 1303 421 464 418 471 421 472 420 477 415 456 416 457 415 462 420 461 421 464 418 471 421 472 420 477 415 455 417 456 416 462 420 461 421 464 418 471 421 471 421 476 416 455 417 456 416 461 421 460 422 463 419 470 422 471 421 476 416 454 418 456 416 1305 419 1306 417 467 415 474 418 475 417 480 412 437 414 10576 3468 1747 413 461 421 1299 414 467 415 470 422 467 415 478 414 483 419 451 421 452 420 458 414 467 415 470 412 477 415 1321 413 485 417 453 419 454 418 459 413 469 413 472 420 469 413 1323 421 1320 414 1301 412 460 422 456 416 1309 414 470 422 467 415 478 414 483 419 451 421 452 420 457 415 467 415 470 412 477 415 478 414 482 420 451 421 1296 417 459 413 468 414 1315 419 1314 420 1317 417 480 422 449 412 460 422 455 417 1308 415 1313 421 469 413 1323 421 476 416 455 417 1300 413 1308 415 1309 414 1314 420 1313 421 1316 418 1323 421 450 422 1295 418 458 414 468 414 471 421 1311 413 1324 420 477 415 456 415 457 415 1306 417 464 418 1311 412 476 416 477 415 482 420 450 422 451 421 456 416 466 416 469 413 476 416 477 415 481 421 450 422 451 421 1300 413 1311 412 1316 418 472 420 473 419 477 415 456 416 457 415 463 419 462 420 465 417 472 420 1316 418 1323 421 1294 419 453 419 458 414 468 414 471 421 467 415 478 414 483 419 452 420 453 419 458 414 467 415 471 421 467 415 478 414 483 419 452 420 1297 416 460 422 459 413 472 420 469 413 480 412 485 417 1297 416 457 415 462 420 461 421 464 418 471 421 472 420 477 415 455 417 457 415 462 420 461 421 464 418 471 421 471 421 476 416 455 417 456 416 461 421 1304 419 465 417 1316 418 476 416 480 422 1271 422 -# -name: POWER -type: parsed -protocol: NECext -address: 86 6B 00 00 -command: 12 ED 00 00 -# -name: TEMP+ -type: parsed -protocol: NECext -address: 86 6B 00 00 -command: 1A E5 00 00 -# -name: TEMP- -type: parsed -protocol: NECext -address: 86 6B 00 00 -command: 1E E1 00 00 -# -name: SWING -type: parsed -protocol: NECext -address: 86 6B 00 00 -command: 00 FF 00 00 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9026 4519 590 1654 616 1657 623 574 561 582 563 582 563 583 562 1688 592 1656 675 1627 593 1650 620 1654 677 521 563 1660 620 1656 614 1664 616 581 564 578 567 575 560 582 563 581 564 579 566 1684 596 1655 615 1661 619 577 568 574 561 581 564 580 565 579 566 580 565 582 563 581 564 577 568 574 561 582 563 580 565 579 566 1657 613 1664 616 582 563 578 567 575 560 583 562 581 564 580 565 582 563 584 561 582 563 578 567 575 560 583 562 581 564 580 565 1659 621 579 566 578 567 574 561 581 564 579 566 577 568 576 569 577 568 579 566 578 567 574 561 580 565 578 567 576 569 575 560 587 568 579 566 577 568 573 562 580 565 578 567 576 569 575 560 586 569 552 593 577 568 573 562 580 565 577 568 576 559 585 560 586 569 552 593 576 569 1703 567 575 560 1713 567 577 568 576 569 577 568 553 592 578 567 1704 566 1707 563 1656 614 1662 618 1659 621 577 568 553 592 1706 564 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 270 18152 3021 8955 523 499 495 1497 492 504 500 468 526 496 498 498 496 499 495 501 493 502 492 1499 500 496 498 524 470 1521 498 497 497 499 495 1496 492 1499 500 1491 497 1494 494 1497 502 494 500 495 499 497 497 498 496 500 494 528 466 530 464 531 473 522 493 503 491 504 500 495 499 497 497 498 496 500 494 501 493 503 491 504 500 495 499 496 498 498 496 499 495 501 493 529 465 531 473 522 472 523 492 504 490 505 499 496 498 498 496 499 495 1496 492 1499 500 1492 496 1494 525 2947 2999 8953 525 1519 469 499 516 507 497 498 496 500 494 501 493 503 491 504 500 495 499 1492 496 499 495 501 493 1498 501 495 499 1492 496 1522 466 1524 496 1496 492 1499 500 1492 496 499 495 500 494 502 492 504 500 495 499 496 498 498 496 499 495 500 494 502 492 530 474 521 473 523 523 472 522 474 489 506 498 497 497 499 495 500 494 502 492 503 501 494 500 496 498 497 497 499 495 500 494 502 492 503 501 521 473 523 471 524 522 474 520 475 498 497 497 499 495 500 494 2978 2999 8952 525 1492 496 499 495 501 493 503 491 504 500 495 499 497 497 525 469 526 468 1524 516 479 494 501 493 503 491 504 500 495 499 497 497 1494 494 1497 492 1500 499 1492 496 499 495 1497 491 531 473 1518 522 1469 499 496 498 498 496 500 494 1497 491 1500 499 1492 496 499 495 501 493 502 492 504 500 495 499 523 471 525 469 526 520 1472 516 1475 493 502 492 504 500 495 499 1492 496 499 495 501 493 502 492 504 500 495 499 496 498 498 496 1522 466 1525 525 1466 491 1500 499 -# POWER_ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4455 4310 587 1553 587 481 588 1552 587 1553 587 482 587 483 586 1553 585 483 586 483 587 1553 586 483 586 483 585 1553 586 1553 586 483 586 1553 586 1553 586 483 586 483 585 1553 586 1553 587 1552 586 1553 585 1554 585 483 586 1552 588 1552 585 483 586 483 586 483 586 483 585 484 585 484 585 483 586 483 586 483 585 484 586 483 586 483 586 483 586 1553 585 1553 585 1554 585 1553 585 1554 585 1553 586 1553 585 1554 584 5128 4426 4312 584 1554 585 484 585 1553 585 1554 585 483 586 483 585 1554 584 484 585 484 584 1553 584 485 584 484 585 1554 584 1555 583 485 584 1552 586 1553 585 484 585 483 585 1553 583 1554 585 1553 584 1554 583 1554 584 485 584 1554 584 1554 583 484 585 484 585 484 584 484 584 485 584 484 585 484 584 485 583 485 583 484 585 484 585 484 584 485 583 1555 584 1554 584 1553 584 1553 585 1553 584 1553 585 1553 584 1555 583 -# POWER_ON -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 530 374 30128 50095 3452 1625 471 1229 471 459 471 459 471 459 444 459 471 459 470 459 471 459 471 459 471 459 444 460 470 459 471 1230 470 459 470 460 443 460 470 460 469 460 470 460 470 460 443 1231 470 1230 470 460 470 460 470 460 443 487 443 460 469 460 470 461 468 461 469 1232 442 461 469 1232 468 1232 442 1232 468 1232 468 1232 468 1232 441 461 469 1232 468 1232 442 488 442 461 469 462 468 463 466 463 467 485 418 488 442 485 444 1234 467 1256 418 1256 444 1256 444 1256 444 1256 418 1256 444 1256 444 485 444 486 417 486 444 1256 444 485 444 485 444 486 417 486 444 1257 443 486 444 485 444 1257 417 486 444 486 443 486 444 1257 417 1257 443 486 444 486 444 486 443 486 417 513 416 487 443 487 442 486 444 1257 416 1257 443 487 442 486 444 486 443 487 416 513 416 487 443 486 443 487 443 487 442 487 416 514 415 1258 442 487 442 487 443 487 416 514 416 488 442 487 443 488 442 488 442 1258 415 1258 442 488 442 488 441 488 442 488 415 488 441 488 442 488 442 1259 441 1259 415 489 440 489 441 488 442 489 440 488 415 1259 441 1260 440 1260 414 516 414 489 439 491 440 489 440 490 439 490 414 516 413 490 438 491 438 492 438 491 415 539 389 517 413 514 391 516 414 539 414 516 390 539 388 542 363 540 390 1311 389 540 389 540 363 567 363 540 390 540 389 540 390 540 390 540 363 567 363 541 389 540 390 540 389 540 390 541 362 567 363 541 389 541 389 541 389 541 389 541 362 568 361 541 389 541 389 542 388 541 389 541 362 542 388 542 387 542 388 542 388 543 387 567 335 567 363 567 363 567 363 567 363 567 336 594 335 568 362 567 362 568 361 568 362 567 336 595 335 568 362 568 361 568 362 1338 362 1339 334 569 361 569 360 569 361 569 360 569 334 570 360 570 360 595 334 595 334 1366 307 1366 334 595 335 595 335 595 335 596 306 623 307 596 334 596 333 597 333 622 307 597 306 597 333 623 306 623 306 624 306 624 306 624 278 1395 305 1395 305 650 279 651 360 -# -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 451 18082 2995 8958 519 529 465 1527 472 524 491 504 490 506 498 497 497 499 495 501 493 502 492 1500 499 497 497 498 496 1496 492 503 501 494 500 1492 496 1522 466 1525 494 1497 491 1500 498 498 496 499 495 501 493 503 501 494 500 495 499 497 497 499 495 500 494 502 492 503 501 495 499 523 471 525 469 526 468 528 497 498 496 500 494 502 492 503 501 495 499 496 498 498 496 499 495 501 493 502 492 504 500 495 499 497 497 499 495 527 467 529 465 1500 519 1499 489 1502 497 1495 493 2979 2997 8955 522 1469 519 503 501 494 500 496 498 497 497 499 495 501 493 529 465 531 473 1518 491 505 489 506 498 498 496 1495 493 1498 501 1491 497 499 495 1496 492 1500 499 1492 496 527 467 1525 494 501 493 1498 490 1502 497 499 495 500 494 502 492 1499 500 1492 496 1496 492 503 501 494 500 496 498 524 470 526 468 527 519 1446 522 1497 491 1500 499 1493 495 501 493 502 492 504 500 495 499 497 497 1494 494 501 493 503 501 521 473 523 471 524 522 1470 498 1494 494 1497 502 1490 498 -# -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 701 17814 3056 8923 554 441 522 1496 492 504 490 505 499 497 497 498 496 500 494 502 492 503 501 1491 497 498 496 500 494 1497 502 494 500 523 471 1520 468 1523 496 1496 492 1499 500 1492 496 499 495 501 493 503 501 494 500 496 498 497 497 499 495 501 493 502 492 531 473 522 472 524 470 525 490 506 498 498 496 499 495 501 493 503 491 504 500 495 499 497 497 499 495 500 494 502 492 504 500 495 499 497 497 525 469 527 467 528 466 530 495 501 493 1498 501 1491 497 1494 494 1498 500 2972 3004 8948 518 1500 499 470 524 498 496 500 494 529 465 531 473 522 493 530 464 505 489 1502 497 499 495 501 493 1498 501 1491 497 1494 494 1498 501 495 499 1492 496 1522 497 1495 493 502 492 1500 499 497 497 1494 494 1497 502 495 499 496 498 498 496 1496 492 1499 500 1518 470 526 468 527 498 498 496 500 494 501 493 503 491 505 499 1492 496 1495 493 1498 501 495 499 497 497 499 495 500 494 502 492 1527 472 523 523 473 490 506 498 497 497 499 495 1497 491 1500 499 1492 496 1496 492 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 606 17832 2994 8936 520 501 496 1491 494 501 496 498 489 532 465 529 488 505 492 502 495 499 488 1499 496 499 498 495 492 1496 499 1463 522 499 498 1463 522 1467 517 1469 526 1491 493 1495 520 500 487 507 490 504 493 500 497 497 490 504 493 501 496 498 489 505 492 501 496 498 499 495 492 502 495 499 498 522 465 529 468 526 492 502 495 499 488 506 491 503 494 499 498 496 491 503 494 500 497 497 490 504 493 500 497 497 490 504 493 500 497 497 490 531 466 528 469 1518 487 1475 520 2947 3018 8939 517 1471 524 496 491 503 494 500 497 497 490 504 493 500 497 497 490 504 493 1521 464 530 467 527 491 1471 514 507 490 1471 524 1465 519 1468 517 1472 523 1465 520 1468 517 477 520 501 496 497 490 531 466 528 469 525 493 501 496 498 489 505 492 502 495 498 499 495 492 502 495 499 498 495 492 502 495 499 498 496 491 502 495 499 498 496 491 529 468 526 471 523 495 499 488 506 491 503 494 499 498 496 491 503 494 500 497 496 491 503 494 500 497 497 490 503 494 2973 2992 8939 517 1469 526 522 465 529 488 506 491 503 494 499 488 506 491 503 494 500 497 1490 495 499 498 496 491 1497 498 1464 520 1468 517 1470 525 524 463 1498 517 1471 524 1465 520 1468 517 1471 524 1465 520 1468 517 1472 523 497 490 504 493 501 496 1491 494 1496 519 1469 516 504 493 501 496 498 489 505 492 501 496 498 499 495 492 502 495 1492 493 1469 526 495 492 529 468 1492 513 1476 519 502 495 498 489 505 492 502 495 499 498 496 491 503 494 499 498 496 491 1497 498 1464 541 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4387 4349 553 1609 553 1607 555 1605 546 1613 549 531 550 530 551 1610 552 527 554 526 555 526 555 525 556 524 557 1602 549 1611 551 529 552 1608 554 526 555 525 556 525 556 524 546 533 548 532 549 1611 551 1608 554 1606 556 1604 558 1603 548 1611 551 1609 553 1607 555 525 556 525 556 524 557 523 547 533 548 533 548 532 549 531 550 530 551 1607 555 526 555 1605 557 1603 548 531 550 531 550 530 551 529 552 528 553 527 554 526 555 526 555 525 556 524 546 1612 550 1610 552 1608 554 527 554 526 555 526 555 525 556 524 557 523 547 533 548 532 549 531 550 1609 553 1607 555 525 556 525 556 1603 548 1612 550 530 551 7454 4385 4352 549 1611 551 1609 553 1608 554 1606 556 525 556 524 557 1602 549 531 550 531 550 530 551 530 551 529 552 1633 529 1604 558 523 558 1601 550 531 550 530 551 530 551 529 552 528 553 527 554 1604 558 1603 548 1611 551 1609 553 1608 554 1606 556 1604 558 1602 549 532 549 531 550 530 551 530 551 529 552 528 553 527 554 526 555 525 556 1603 548 532 549 1610 552 1608 554 527 554 527 554 526 555 525 556 524 557 523 547 533 548 532 549 531 550 530 551 1608 554 1606 556 1604 558 523 547 533 548 532 549 531 550 530 551 529 552 528 553 527 554 526 555 1605 557 1602 549 531 550 531 550 1609 553 1607 555 526 555 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4391 4345 555 1605 556 1604 547 1613 548 1611 550 530 550 529 551 1609 552 527 553 527 553 526 554 526 554 525 555 1604 547 1613 548 531 549 1611 550 529 551 529 551 529 551 528 552 527 553 526 554 1605 556 1603 548 1612 549 1611 550 1609 552 1608 553 1607 554 1605 556 524 556 524 556 523 547 533 547 533 547 532 548 531 549 530 550 529 551 1608 553 527 553 1606 555 1605 556 523 547 533 547 533 547 533 547 532 548 531 549 530 550 1609 552 527 553 527 553 527 553 526 554 1605 556 523 557 523 547 533 547 533 547 532 548 531 549 530 550 530 550 529 551 1608 553 526 554 526 554 526 554 525 555 524 556 523 547 7457 4390 4347 553 1608 553 1606 555 1605 556 1604 547 533 547 532 548 1612 549 530 550 530 550 529 551 529 552 528 552 1607 554 1605 556 524 556 1603 548 532 548 532 548 532 548 531 549 530 550 529 551 1608 553 1606 555 1605 556 1604 547 1613 548 1611 550 1610 551 1609 552 527 553 527 553 527 553 526 554 526 554 525 555 524 556 524 556 523 547 1612 549 531 549 1610 551 1609 552 527 553 527 553 527 553 526 554 526 554 525 555 524 556 1603 548 532 548 532 548 532 548 531 549 1610 551 528 552 528 552 528 552 527 553 526 554 525 555 525 555 524 556 523 547 1613 548 531 549 531 549 531 549 530 550 529 551 528 552 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4413 4375 541 1579 568 504 569 1576 571 501 562 510 563 534 539 507 566 1578 569 1577 570 1575 572 500 563 509 564 508 565 506 567 1578 569 502 571 501 562 1583 564 1581 566 1579 568 504 569 503 570 1574 563 510 563 1607 540 506 567 505 568 503 570 502 571 1573 564 508 565 1580 567 1578 569 503 570 502 571 500 563 535 538 507 566 1579 568 1577 570 502 571 500 563 536 537 1581 566 506 567 504 569 503 570 1574 563 5170 4409 4379 537 509 564 1581 566 506 567 1577 570 1575 572 1573 564 1582 565 507 566 505 568 504 569 1575 572 1573 564 1582 565 1580 567 505 568 1576 571 1574 563 509 564 508 565 532 541 1577 570 1575 572 500 563 1582 565 507 566 1578 569 1576 571 1574 562 1583 564 508 565 1579 568 504 569 502 571 1574 563 1582 565 1580 567 1578 569 1576 571 501 562 510 563 1581 566 1579 568 1577 570 501 572 1573 564 1581 566 1579 568 504 569 -# -name: SWING -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4413 4349 566 1580 567 505 568 1577 570 502 571 501 572 526 537 1582 565 507 566 506 567 504 569 503 570 501 562 510 563 535 538 507 566 1579 568 1577 570 1575 572 1573 564 1582 565 1581 566 1579 568 1578 569 1576 571 1574 563 1583 564 1582 565 1580 567 1578 569 1577 570 1575 572 1573 564 1582 565 1581 566 1579 568 1578 569 1576 571 1574 563 1583 564 1581 566 506 567 1604 543 1576 571 1574 563 1583 564 1581 566 506 567 505 568 5164 4405 4357 569 502 571 1574 563 510 563 1582 565 1580 567 1578 569 503 570 1575 572 1573 564 1582 565 1580 567 1579 568 1577 570 1575 572 1573 564 509 564 508 565 506 567 505 568 503 570 502 571 526 537 509 564 508 565 506 567 505 568 503 570 501 572 500 563 509 564 507 566 506 567 504 569 503 570 501 572 499 564 508 565 507 566 505 568 504 569 1575 572 500 563 509 564 507 566 506 567 504 569 1576 571 1574 563 -# -name: TIMER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1296 454 1294 422 441 1304 1318 427 1321 422 441 1302 446 1297 440 1305 1317 426 437 1306 442 1301 436 7690 1321 424 1324 419 444 1301 1321 424 1324 420 443 1299 438 1304 444 1302 1320 423 440 1302 446 1297 440 7686 1325 420 1317 426 437 1308 1324 420 1317 426 437 1305 443 1300 437 1308 1324 419 444 1298 439 1304 444 7682 1318 427 1321 422 441 1304 1318 427 1321 423 471 1271 466 1277 471 1274 1317 427 467 1275 472 1270 467 7675 1325 420 1317 426 468 1277 1324 421 1316 427 436 1306 442 1301 467 1278 1323 420 443 1300 437 1305 474 7653 1316 429 1319 425 438 1306 1326 420 1317 425 438 1305 443 1300 437 1308 1324 419 444 1298 439 1304 443 7682 1318 427 1321 423 440 1305 1317 428 1320 423 471 1272 465 1277 439 1306 1316 427 467 1276 440 1302 446 7680 1320 426 1322 421 473 1272 1318 426 1322 422 472 1270 467 1276 472 1273 1317 426 468 1274 474 1269 468 7658 1321 424 1324 420 464 1281 1320 425 1354 389 464 1279 469 1274 474 1272 1318 424 470 1273 464 1279 468 7657 1322 423 1325 418 466 1280 1352 392 1345 400 463 1278 469 1273 464 1281 1351 394 469 1271 466 1277 470 7656 1323 422 1315 427 467 1278 1344 401 1347 399 464 1276 471 1272 465 1280 1321 422 472 1270 467 1276 472 7654 1325 421 1316 426 437 1308 1324 421 1316 427 436 1307 441 1302 445 1299 1323 421 442 1300 468 1274 474 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 781 710 2930 2876 775 716 781 735 752 2175 779 711 776 2177 746 745 773 2232 753 2173 749 768 750 2177 745 745 773 743 754 737 750 741 746 744 754 737 771 746 751 739 748 2178 776 742 755 2172 771 719 778 2227 747 744 754 2200 754 737 750 2203 751 741 746 2181 773 744 753 737 750 741 746 -# -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3027 9036 541 1580 484 588 491 556 492 555 482 564 484 589 459 587 481 565 483 564 484 1583 492 555 482 564 484 589 479 1561 514 1527 517 583 485 1555 489 1552 513 1581 484 1531 513 534 514 585 463 584 484 562 486 561 486 560 488 585 483 589 479 567 512 561 486 560 488 559 489 558 490 583 485 561 487 560 488 558 490 1578 486 1580 484 562 517 1577 487 559 489 558 490 583 485 1555 509 564 484 563 485 1582 483 1532 543 1576 488 559 489 584 464 583 485 587 492 555 482 564 432 1924 2973 9041 536 1531 513 559 489 584 484 563 516 557 491 556 481 591 488 559 489 558 490 1577 487 559 489 558 490 1577 487 1580 484 1530 514 1553 512 562 485 1555 509 1531 513 1555 509 1558 507 1534 510 1557 518 1524 509 1557 518 555 493 555 513 559 488 558 490 583 485 561 486 560 488 559 489 584 484 562 486 561 486 560 487 585 483 1557 487 1554 510 1557 507 1533 511 1557 538 1528 516 1578 455 591 488 559 489 558 489 557 491 582 486 560 487 559 488 584 484 562 517 1524 509 1558 465 -# -name: MODE -type: parsed -protocol: NEC -address: 20 00 00 00 -command: 09 00 00 00 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 1303 438 1287 429 418 1254 1308 434 1281 434 423 1250 444 1255 439 1259 1303 439 418 1254 440 1258 446 8172 1313 428 1276 411 446 1252 1310 404 1311 403 444 1255 439 1259 445 1253 1309 405 442 1257 447 1250 444 8173 1302 412 1303 410 447 1251 1300 439 1276 410 447 1251 443 1255 439 1259 1303 437 420 1250 496 1202 439 8177 1308 434 1281 433 414 1256 1306 435 1280 434 413 1284 420 1251 443 1255 1307 433 414 1283 421 1250 444 8173 1302 438 1277 436 421 1276 1275 438 1277 436 421 1275 419 1252 442 1256 1306 434 413 1284 420 1250 444 8173 1302 438 1277 436 421 1276 1275 437 1278 435 412 1285 419 1278 416 1281 1281 432 415 1282 412 1285 419 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3197 1595 390 404 379 1210 388 406 388 406 388 1201 386 407 386 1202 386 408 385 409 384 1205 383 1204 383 1206 382 412 381 1206 381 413 381 1207 381 1208 380 1209 389 405 389 406 387 405 389 407 387 1200 388 1201 386 408 385 1203 384 412 382 1205 383 1204 384 412 382 412 382 412 382 1207 381 413 381 1208 380 414 380 414 380 1209 389 1199 389 1201 386 1200 387 1202 385 408 385 409 384 1204 384 1205 383 1205 382 1205 383 412 382 413 380 1207 381 1209 389 406 388 405 389 405 389 405 389 1200 387 1203 384 1201 386 409 384 1203 384 1205 382 1205 383 1205 383 411 383 412 382 412 382 1207 380 414 380 415 389 404 379 417 387 1199 389 1199 389 1201 386 1204 384 1203 384 1203 384 1203 384 1204 384 411 382 412 382 412 382 412 382 413 380 413 381 414 380 414 380 1209 389 1199 389 1199 389 1200 387 1201 386 408 385 1203 385 1203 384 409 384 412 381 410 383 413 381 411 383 1206 382 413 381 413 380 1207 381 1209 389 404 379 1209 389 1199 389 407 386 1201 386 1202 385 408 385 410 384 1203 384 410 383 411 383 1204 384 412 382 412 382 1206 381 1207 380 1208 379 1211 387 1199 389 1201 386 1201 386 1202 385 408 385 410 383 409 385 409 385 410 384 410 384 410 383 411 383 412 382 1207 381 1206 382 1209 389 1197 380 1210 388 1199 389 406 387 1200 387 408 385 407 386 408 385 409 384 408 385 409 384 1204 384 -# -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3467 1749 420 452 420 1301 412 468 414 472 420 468 414 479 413 484 418 453 419 454 418 459 413 469 413 472 420 469 413 1323 421 476 416 455 417 457 415 462 420 461 421 464 418 471 421 1315 419 1322 422 1293 420 452 420 458 414 1311 412 472 420 469 413 480 412 485 417 453 419 455 417 460 422 459 413 472 420 469 413 480 412 485 417 453 419 455 417 460 412 469 413 472 420 469 413 480 412 485 417 453 419 455 417 460 422 459 413 472 420 469 413 480 412 485 417 453 419 455 417 1304 419 1305 418 466 416 473 419 474 418 479 413 436 415 10538 3465 1751 419 454 418 1303 420 461 421 464 418 471 421 472 420 477 415 455 417 457 415 462 420 461 421 464 418 471 421 1315 418 479 413 457 415 459 412 464 418 463 419 466 416 473 419 1318 415 1325 419 1295 418 455 416 461 421 1303 420 465 417 472 420 473 419 478 414 456 416 458 414 463 419 462 420 465 417 472 420 473 419 478 414 456 416 1301 412 465 417 464 418 1311 412 476 416 477 415 482 420 451 421 452 420 457 415 1310 413 471 421 468 414 1323 421 476 416 455 417 456 416 462 420 461 421 464 418 471 421 471 421 476 416 1299 414 1302 421 1299 414 1311 412 1316 417 471 421 1316 417 479 413 1302 421 1295 418 459 412 1312 421 1307 416 472 420 473 419 478 414 457 415 458 414 464 418 463 419 466 416 473 419 473 419 478 414 457 415 458 414 1307 416 1309 414 1314 419 469 413 480 422 475 417 454 418 455 417 460 422 459 413 473 419 469 413 1324 420 1321 412 1302 421 452 420 457 415 466 416 469 413 476 416 477 415 482 420 451 421 452 420 457 414 467 415 470 412 477 415 478 414 483 419 451 421 1296 417 460 412 469 413 472 420 469 413 480 412 485 417 1297 416 457 415 462 420 461 421 464 418 471 421 472 420 477 415 456 416 457 414 462 420 461 421 464 418 471 421 472 420 477 415 456 416 457 414 1306 417 1307 416 1312 421 1311 412 481 421 1319 414 1279 414 -# -name: MODE -type: parsed -protocol: NECext -address: 86 6B 00 00 -command: 02 FD 00 00 +duty_cycle: 0.33 +data: 502 3436 510 475 509 476 508 477 507 477 507 479 505 480 504 480 504 490 504 481 502 482 501 483 563 420 511 474 510 475 509 476 508 485 561 423 508 476 508 477 507 478 506 479 505 480 504 481 503 517 508 476 508 478 506 479 505 479 505 481 503 483 521 1456 501 498 507 479 505 480 504 481 503 482 501 483 563 421 562 422 509 499 506 479 505 480 504 481 503 482 502 484 510 1451 506 479 505 1542 562 1396 509 471 502 476 508 469 504 3425 511 # -name: MODE +name: Dh type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 552 17959 3004 8946 521 530 474 1490 519 477 517 505 499 497 497 498 496 500 494 501 493 503 501 1464 524 497 497 499 495 1470 518 504 500 495 499 1493 495 1496 492 1499 520 1472 516 1475 524 498 496 500 494 501 493 503 501 494 500 496 498 497 497 499 495 501 493 502 492 531 473 522 472 524 470 525 490 506 498 497 497 499 495 501 493 502 492 504 500 495 499 497 497 498 496 500 494 501 493 503 501 494 500 496 498 524 470 526 468 527 467 529 496 1469 519 1472 527 1465 523 1468 520 2979 2997 8954 523 1469 519 502 492 504 500 495 499 524 470 525 469 527 467 528 497 499 495 1470 518 503 501 495 499 1466 522 500 494 1471 528 1464 524 497 497 1468 520 1446 604 1440 496 525 469 1496 523 499 495 1470 518 1473 526 497 497 498 496 500 494 1471 528 1464 524 1467 521 501 493 529 465 531 473 522 472 524 491 1474 525 497 497 1469 519 502 492 1474 525 1466 522 500 494 1471 528 494 500 496 498 1494 494 528 466 529 475 521 494 502 492 503 491 1474 525 1467 521 1470 518 1474 525 +duty_cycle: 0.33 +data: 507 3430 506 479 505 480 504 481 503 481 503 483 501 485 509 1453 504 1465 503 482 502 483 511 473 500 485 509 476 508 477 507 478 506 487 507 477 507 478 506 479 505 480 504 482 502 483 501 484 500 523 503 482 502 484 500 485 509 476 508 476 508 478 506 1456 501 501 504 482 502 483 501 484 500 485 509 476 508 477 507 1455 502 509 506 479 505 1457 500 485 509 476 508 1454 503 482 502 483 501 568 499 1459 509 1450 507 471 502 474 510 3421 505 # -name: TEMP+ +name: Cool_hi type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 3062 3028 3062 4288 599 1678 573 563 567 1694 568 700 576 560 570 1691 570 565 576 1817 569 1692 601 549 571 564 567 1826 570 566 575 1686 576 1686 576 692 574 562 568 568 594 1680 571 697 568 567 574 1687 575 561 570 1824 572 563 567 568 573 1689 593 687 568 568 573 563 567 1693 568 1825 571 564 566 570 571 565 576 692 594 1680 571 1689 572 564 566 701 575 561 570 1692 570 566 575 692 573 563 599 550 570 566 575 693 572 563 567 568 573 1687 574 693 572 564 567 569 603 1672 569 698 567 569 572 564 566 569 572 696 569 566 575 561 569 566 596 709 567 1694 567 1693 568 1693 568 1849 568 568 573 563 567 568 573 1689 593 +duty_cycle: 0.33 +data: 504 3433 503 482 502 484 510 474 510 475 509 476 508 478 506 1456 564 1405 510 475 509 476 508 502 482 477 507 478 506 479 505 480 504 489 505 480 504 481 503 482 502 483 511 473 511 474 510 475 509 509 506 479 505 480 504 481 503 482 512 473 511 474 510 476 508 1469 509 475 509 476 508 477 507 478 506 479 505 480 504 481 503 505 510 475 509 502 482 503 481 504 480 505 478 507 477 1459 509 560 507 1451 506 473 511 493 480 1450 507 3422 503 # -name: TEMP- +name: Cool_lo type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 3055 3033 3056 4296 600 1676 575 560 570 1692 569 698 567 568 573 1689 572 564 566 1826 570 1691 601 548 572 564 577 691 574 561 569 1692 569 1692 569 1824 572 563 567 569 603 1672 568 699 577 559 623 1638 571 564 577 1817 569 566 575 561 569 1692 600 681 574 562 568 567 574 1688 573 1820 576 559 571 564 577 559 571 696 600 1675 576 1685 576 560 570 697 568 567 574 1688 573 562 568 699 577 559 603 547 573 562 568 700 576 560 570 565 576 1685 576 692 573 562 568 567 595 1681 570 697 568 568 573 562 568 568 573 694 571 565 576 560 570 565 597 708 568 1694 567 1694 567 1694 567 724 572 564 566 569 572 1690 571 564 598 +duty_cycle: 0.33 +data: 525 3615 530 506 561 474 562 474 562 473 563 473 531 505 562 1502 528 1542 562 474 562 474 530 505 531 504 532 504 532 504 616 419 533 510 589 447 526 509 527 509 527 509 527 508 528 508 528 507 529 542 525 510 526 509 527 509 527 509 527 508 528 508 528 1535 527 524 533 503 533 503 533 502 534 502 534 502 534 501 535 501 525 534 533 502 534 502 534 501 535 502 534 1529 533 503 533 503 533 587 533 497 528 501 524 1536 526 501 524 3609 526 # -name: MODE +name: Heat_hi type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 3054 3034 3055 4297 599 1677 574 562 568 1693 568 700 576 560 570 1690 571 565 576 1817 569 1693 599 550 570 566 575 693 572 564 566 569 572 1689 572 696 569 566 575 561 600 1674 577 691 574 562 568 567 574 562 568 700 576 560 570 565 576 560 601 680 575 560 570 566 575 561 569 698 567 568 573 563 567 568 573 695 601 1673 567 1693 568 568 573 695 570 566 575 1686 575 561 569 698 567 568 593 556 574 561 569 699 566 569 572 564 566 1695 566 701 575 561 569 567 594 554 576 691 574 562 568 567 574 562 568 699 577 560 570 565 576 560 601 704 572 1688 573 563 567 1694 567 1850 567 569 572 565 576 1685 576 1685 597 +duty_cycle: 0.33 +data: 531 3406 530 455 529 456 528 457 537 447 537 448 535 450 534 1429 528 1442 536 448 536 449 534 451 532 452 532 453 530 454 530 455 529 464 530 454 529 456 528 457 537 448 536 449 535 450 533 451 533 490 535 449 534 450 534 451 533 452 532 453 531 455 529 1433 534 1443 535 449 535 450 534 452 531 453 530 454 530 455 529 456 538 472 532 452 532 454 530 1433 535 1427 530 1432 536 1427 530 1431 537 1511 530 448 536 1422 535 1423 534 1422 535 3395 530 # -name: SWING +name: Heat_lo type: raw frequency: 38000 -duty_cycle: 0.330000 -data: 3055 3034 3056 4296 600 1676 575 561 569 1692 569 698 567 569 572 1690 571 564 566 1827 569 1692 600 549 571 565 576 692 573 1687 574 1687 574 562 568 1824 572 564 566 1695 597 1677 574 694 571 565 576 560 570 565 576 692 573 562 568 568 573 562 600 682 573 562 568 568 573 563 567 700 576 560 570 565 576 560 570 697 599 1675 576 1685 576 559 571 697 568 567 574 1687 574 562 568 699 566 569 603 547 573 563 567 700 576 560 570 565 576 1685 566 701 575 561 569 567 595 555 576 692 573 562 568 567 574 562 568 699 566 570 571 564 566 570 602 703 573 1687 574 1687 574 1687 574 1843 574 1687 574 1687 574 1687 574 562 599 +duty_cycle: 0.33 +data: 506 3430 506 478 506 479 505 480 504 481 503 482 502 484 500 1463 505 1465 503 482 502 483 501 484 500 485 509 476 508 477 507 478 506 486 508 477 507 478 506 479 505 480 504 481 503 482 502 483 500 523 502 482 502 483 501 484 500 485 509 476 508 478 506 1455 502 498 507 478 506 479 505 481 503 482 501 483 500 484 500 485 509 500 505 481 502 482 502 1461 507 1455 502 1459 509 476 508 477 507 563 504 1453 504 1454 503 1454 503 1453 504 3426 499 # -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3063 3027 3062 4289 597 1680 571 565 576 1686 575 692 573 563 567 1694 567 569 572 1821 575 1686 596 554 566 569 572 696 569 567 574 562 568 568 573 694 571 565 576 560 601 1673 567 700 576 560 570 566 575 561 569 698 567 569 572 564 566 569 603 678 566 570 571 564 577 559 571 1821 575 562 568 567 574 562 568 700 596 1678 573 1688 573 563 567 700 576 561 569 1691 570 566 575 693 572 564 597 552 568 568 573 694 571 565 576 560 570 1690 571 697 568 567 574 563 598 551 569 698 567 569 572 564 566 569 572 696 569 567 574 562 568 567 594 710 576 1685 576 560 570 1691 570 1846 571 566 575 561 569 1692 569 567 594 -# OFF -name: POWER +# Model: Hisense Generic +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4468 4412 543 1593 541 502 539 1596 548 1589 545 496 545 498 543 1593 541 501 540 502 539 1598 546 495 546 497 544 1591 543 1594 540 501 539 1597 547 494 547 1590 544 1591 543 1594 540 1595 539 504 547 1588 546 1590 544 1593 540 501 539 503 538 503 538 505 546 1588 546 497 544 496 545 1592 542 1592 542 1594 540 501 539 503 538 503 538 505 546 494 547 496 545 496 545 497 544 1590 544 1593 541 1594 540 1597 547 1589 545 5188 4430 4421 544 1592 541 499 541 1595 539 1596 538 505 546 494 547 1589 545 497 544 496 545 1592 542 500 540 499 542 1594 540 1596 538 503 538 1599 545 497 544 1591 543 1593 541 1595 539 1596 538 504 547 1588 546 1588 546 1590 544 498 542 498 543 499 541 500 541 1593 541 501 540 502 539 1597 547 1586 548 1587 547 496 545 495 546 497 544 498 543 497 544 498 543 499 542 498 542 1592 542 1594 540 1595 539 1597 547 1589 545 -# AUTO MODE -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4456 4417 538 1597 547 494 547 1589 545 1590 544 498 543 499 541 1593 541 501 539 502 539 1595 539 501 539 502 538 1596 538 1595 538 503 538 1597 547 493 537 504 547 495 546 1587 547 1587 547 1588 545 1588 546 1588 545 1589 545 1590 544 1590 544 497 544 498 543 497 544 498 543 498 543 497 544 1591 543 1592 542 1591 543 1592 542 499 542 498 543 499 542 1592 542 500 541 499 541 499 542 500 541 1591 543 1591 543 1591 543 5185 4434 4411 544 1591 543 498 543 1590 544 1590 544 497 543 497 544 1590 544 497 544 498 543 1589 545 496 545 497 544 1588 545 1588 546 495 545 1587 547 494 547 495 546 494 536 1597 547 1586 547 1585 538 1596 538 1596 537 1596 538 1594 540 1594 539 502 539 501 540 501 540 501 540 500 540 500 540 1593 541 1591 543 1591 543 1591 542 497 544 498 543 498 542 1591 543 496 545 497 544 497 544 496 545 1588 546 1588 546 1586 547 +data: 8974 4505 598 1647 595 1651 591 539 592 542 600 537 594 547 595 549 593 1662 591 532 599 1649 593 1659 594 540 602 538 593 548 594 552 600 535 596 528 593 535 596 536 595 540 602 538 593 548 593 551 601 532 599 525 596 1651 591 539 592 543 599 1660 593 1669 594 1672 601 533 598 526 595 533 598 533 598 536 595 543 599 543 599 547 595 540 602 524 597 530 601 530 601 534 597 541 601 541 601 545 597 522 599 7938 591 532 599 528 593 537 594 541 601 537 594 546 596 549 593 1663 600 524 597 530 601 530 601 533 598 540 591 550 592 553 599 536 595 528 593 536 595 536 595 540 591 547 595 548 593 552 600 535 596 529 592 536 595 535 596 538 593 545 597 546 596 550 592 542 600 524 597 531 600 531 600 534 597 542 600 542 600 545 597 538 593 530 601 526 595 537 594 540 591 547 595 546 595 550 592 543 599 526 595 532 599 531 601 535 596 542 600 542 600 546 596 538 593 531 600 1648 594 536 595 539 592 1669 594 1669 594 1671 602 1637 595 7947 592 532 599 529 592 539 592 543 599 540 591 551 601 544 598 537 594 531 600 1647 595 535 596 539 592 545 597 546 596 550 592 543 599 526 595 533 598 534 597 538 593 545 597 546 596 550 602 534 597 527 594 533 598 533 598 536 595 544 598 543 599 547 595 540 591 533 598 529 592 539 592 1663 600 538 593 547 595 551 591 543 599 524 597 530 591 539 592 542 600 537 594 547 595 550 592 542 600 525 596 1651 592 538 593 1662 591 546 596 545 597 548 594 523 629 # -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8968 4464 593 1659 559 593 536 563 566 1660 558 567 562 563 536 590 539 560 559 567 542 584 535 564 565 1660 568 557 562 564 535 1665 594 1658 560 1665 563 588 541 1659 559 1666 593 559 539 586 533 566 563 563 536 1663 585 566 533 593 536 563 566 560 539 587 532 567 562 563 536 590 539 560 559 1667 561 1664 564 1661 587 1664 564 1662 566 1659 589 562 537 589 540 559 560 566 533 593 536 563 566 1658 560 1667 561 1664 584 1667 561 1664 564 1661 587 564 535 591 538 561 568 558 540 585 534 565 564 561 537 588 541 559 560 1665 563 562 567 1659 559 1667 561 590 539 1660 558 593 536 -# OFF -name: POWER +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4412 4354 570 1575 568 504 572 1574 569 503 563 510 567 505 572 527 539 1580 563 509 568 505 572 1574 569 503 563 509 568 505 572 527 539 507 569 503 563 1582 571 500 566 507 569 503 563 535 542 505 561 511 566 1579 564 1582 571 1574 569 1576 567 1578 565 1581 562 1583 570 1575 568 1577 566 1580 563 1582 571 1574 569 1576 567 1579 564 1581 562 1583 570 1575 568 1577 566 1579 564 509 568 1577 566 1580 563 1582 571 501 565 5165 4412 4352 572 500 566 1579 564 509 568 1577 566 1579 564 1581 562 1583 570 502 564 1581 562 1582 571 501 565 1580 563 1582 571 1574 569 1576 567 1578 565 1579 564 509 567 1577 566 1579 564 1581 562 1583 570 1575 568 1577 566 506 571 501 565 534 542 529 537 535 542 531 535 537 539 532 545 527 539 507 569 529 537 509 568 504 562 510 566 532 544 527 539 507 569 528 538 534 542 1576 567 504 562 510 566 506 571 1574 569 +data: 8990 4494 599 1648 595 1654 599 533 598 537 594 544 598 544 598 548 594 1662 601 523 598 1651 592 1660 593 542 600 539 593 550 592 553 599 536 596 527 594 531 601 1648 595 538 593 542 600 540 592 551 601 532 600 1643 600 1650 593 538 593 542 600 1660 593 1671 592 1673 601 534 598 527 594 534 597 533 599 536 595 543 599 542 600 545 597 537 595 530 591 536 596 535 596 538 593 544 598 543 599 546 596 522 599 7935 595 530 591 536 596 536 596 539 592 545 597 544 598 547 595 1660 593 530 591 536 596 535 596 536 595 542 600 541 591 552 600 534 597 525 596 531 601 529 592 541 601 537 595 546 596 548 594 540 591 532 600 527 594 536 595 538 594 544 598 543 599 546 596 538 594 531 600 527 594 536 595 539 593 545 597 543 599 546 596 538 593 530 591 535 596 532 599 532 600 536 595 543 599 544 598 535 596 525 596 530 591 538 593 538 593 542 600 540 591 551 601 532 600 1640 593 1651 592 1655 598 535 596 1657 596 1663 601 1661 592 1641 592 7941 599 526 595 533 599 532 600 535 597 541 601 541 601 544 598 537 595 1651 592 535 597 535 597 538 594 545 597 545 597 548 594 540 592 532 600 528 593 539 593 542 600 539 592 549 593 551 601 533 598 524 597 528 593 536 595 538 593 544 598 543 599 546 596 539 593 531 601 528 593 538 593 1661 592 546 596 545 597 547 595 539 592 532 600 527 594 536 596 538 593 543 599 542 600 544 598 535 596 1646 597 531 601 529 592 1663 601 537 595 547 595 550 592 524 597 # -name: TEMP+ +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4411 4378 546 1573 570 502 564 1582 571 500 566 507 570 528 538 508 569 1576 567 1578 565 507 569 1575 568 504 562 510 567 532 544 527 539 507 569 528 538 1580 563 509 568 505 571 501 565 533 543 528 538 1580 563 1582 571 1573 570 1575 568 1577 566 1578 565 1580 563 1582 571 1573 570 1575 568 1577 566 1579 564 1580 563 1582 571 1574 569 1575 568 1577 566 506 570 1574 569 1576 567 505 571 1573 570 1575 568 1577 566 1578 565 5165 4412 4350 563 508 568 1576 567 506 571 1574 569 1575 568 1577 566 1579 564 508 568 504 562 1582 571 501 565 1579 564 1581 562 1583 570 1574 569 1575 568 1577 566 506 570 1574 569 1576 567 1578 565 1580 563 1582 571 500 566 506 570 502 564 534 542 504 562 535 541 531 535 511 565 532 544 528 538 507 569 503 563 509 568 530 536 509 568 531 535 537 540 1578 565 507 569 503 563 1581 562 510 566 506 571 502 564 507 569 +data: 8982 4489 604 1643 600 1649 594 537 594 540 602 537 594 547 595 550 592 1664 599 525 596 1652 601 1651 592 542 600 538 593 549 593 552 600 534 597 1646 597 530 601 1651 602 534 597 541 601 541 601 544 598 537 594 529 592 1655 598 533 598 536 595 542 600 542 600 546 596 539 592 532 599 527 594 537 594 540 591 546 596 545 597 548 594 540 602 523 598 529 592 539 592 542 600 539 592 549 593 550 592 524 597 7929 600 525 596 532 599 533 598 537 594 543 599 542 600 544 598 1654 599 524 597 530 591 538 593 540 591 544 598 543 599 544 598 535 596 526 595 531 600 529 592 544 598 541 601 542 600 546 596 540 602 522 599 529 602 530 601 534 597 541 601 541 601 545 597 539 592 532 599 528 593 539 592 541 601 537 594 547 595 551 601 535 596 529 592 536 595 537 594 541 601 538 593 549 593 553 599 536 595 529 592 536 595 534 597 537 594 544 598 543 599 546 596 539 592 1653 600 1650 593 1660 593 543 599 541 601 541 601 546 596 1643 600 7943 596 529 602 527 594 538 593 541 601 538 593 549 593 553 599 536 595 1649 594 535 596 535 596 539 592 546 596 546 596 549 593 542 600 525 596 531 600 530 601 533 598 540 602 539 592 552 600 535 596 527 594 533 598 533 598 536 595 543 599 543 599 545 597 537 594 530 601 526 595 536 595 1660 593 546 596 547 595 550 602 533 598 526 595 533 598 534 597 538 593 546 596 547 595 551 601 534 597 1647 596 532 599 532 599 1656 597 541 601 542 600 545 597 522 599 # -name: TEMP- -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4465 4299 562 1582 571 501 565 1580 563 509 568 505 561 511 566 506 571 1574 569 1576 567 505 572 1574 569 503 563 509 568 504 562 510 566 505 572 501 565 1579 564 509 567 504 562 510 566 505 572 501 565 507 570 1575 568 1577 566 1579 564 1581 562 1583 571 1574 569 1576 567 1577 566 1579 564 1581 562 1583 570 1574 569 1576 567 1578 565 1580 563 1582 571 501 565 1579 564 1581 562 510 567 1578 565 1580 563 1582 571 501 565 5164 4413 4349 565 508 569 1576 567 505 572 1573 570 1575 568 1577 566 1579 564 508 568 503 563 1582 571 500 566 1579 564 1581 562 1582 571 1574 569 1575 568 1577 566 506 571 1574 569 1576 567 1577 566 1579 564 1581 562 1582 571 501 565 507 569 502 564 508 569 504 562 509 568 505 561 511 566 506 571 501 565 507 570 502 564 508 569 503 563 509 568 505 561 1583 571 502 564 508 568 1576 567 504 562 510 567 506 571 1574 569 -# MODE-AUTO -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 4416 4349 564 1581 572 500 566 1580 563 508 568 505 571 449 669 453 571 1575 568 1578 565 507 569 502 564 508 568 504 572 500 566 1579 564 508 568 504 572 1573 570 502 564 508 568 504 572 499 567 505 571 501 565 1580 573 1572 571 1575 568 1577 566 1579 563 1581 572 1573 570 1575 568 1578 565 1580 563 1582 571 1574 569 1576 567 1578 564 1581 572 1573 570 502 564 1581 572 500 566 1579 564 1582 571 1573 570 502 564 508 568 5163 4414 4348 565 507 569 1576 567 505 571 1573 570 1576 567 1578 564 1580 573 499 567 505 571 1574 569 1576 567 1578 565 1580 573 1572 571 502 564 1581 572 1573 570 502 564 1581 572 1573 570 1575 568 1577 566 1580 563 1582 571 501 565 507 569 503 563 509 567 505 571 501 565 507 569 503 563 509 567 504 572 500 566 506 570 502 564 508 568 504 572 499 567 1578 565 508 568 1576 567 505 571 501 565 507 569 1575 568 1577 566 -# SWING OFF -name: SWING +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 9830 9789 9825 9795 4618 2487 381 348 384 929 381 936 384 353 379 934 386 350 382 350 382 362 380 349 383 929 381 355 387 346 386 926 384 353 379 354 388 355 387 918 382 354 388 348 384 349 383 353 379 357 385 924 386 358 384 921 389 347 385 351 381 929 381 932 388 348 384 349 383 361 381 347 385 351 381 355 387 345 387 925 385 352 380 353 379 365 388 340 382 354 388 348 384 349 383 929 381 355 387 346 386 358 384 921 379 357 385 351 381 352 380 356 386 930 380 357 385 358 385 344 388 348 384 933 387 349 383 353 379 938 382 354 388 352 380 20353 4625 +data: 8967 4495 597 1645 597 1648 594 535 596 537 594 542 600 541 601 543 599 1655 598 525 596 1651 592 1658 595 539 592 545 597 544 598 546 596 538 593 1648 595 532 599 1648 594 539 592 545 597 543 599 545 597 536 595 528 593 1651 592 538 593 541 601 1654 599 1661 592 1671 592 541 601 523 598 529 592 538 593 541 601 536 595 544 598 547 595 539 592 531 600 526 595 535 596 537 594 543 599 541 601 543 598 518 593 7937 602 522 599 528 593 537 594 539 592 545 597 544 598 546 596 1656 597 525 596 530 601 528 593 539 592 544 598 543 599 544 598 535 596 526 595 531 600 530 601 532 599 538 593 547 595 549 593 540 602 521 600 526 595 535 596 537 594 543 599 541 601 543 599 536 595 527 594 532 600 530 601 532 599 538 593 546 596 548 594 539 592 531 600 525 596 534 597 535 596 540 591 549 593 551 601 532 599 524 597 529 592 537 594 538 593 543 599 540 591 551 601 532 599 1641 591 1654 599 1650 593 540 591 1664 599 1660 593 1671 592 1643 600 7922 596 528 593 533 598 532 599 535 596 540 591 549 593 552 600 533 598 1644 599 529 592 538 593 539 592 544 598 541 590 550 592 539 592 528 593 531 590 537 594 536 595 539 592 546 596 546 596 536 595 526 595 529 592 535 596 535 596 538 593 546 596 546 596 535 596 524 597 527 594 533 598 1649 593 541 601 538 593 549 593 538 593 528 593 532 599 528 593 539 592 542 600 538 593 548 594 538 593 1643 599 525 596 532 599 1649 593 541 601 538 593 548 594 520 591 # -name: MODE +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 5623 5581 567 552 569 551 570 549 562 557 564 582 539 580 541 1672 571 1671 572 545 566 553 568 1698 545 1668 564 1676 567 1700 543 549 562 589 543 1667 566 552 569 1671 561 1677 566 554 567 552 569 1670 562 561 571 1665 568 1671 572 1667 566 1673 570 550 571 549 562 1676 567 583 538 1671 561 583 538 1674 569 552 569 1670 562 1676 567 579 542 556 565 1669 563 557 564 1700 543 549 562 585 536 1676 567 553 568 1676 567 574 537 1675 568 551 570 551 570 1669 564 1674 569 1669 564 558 563 +data: 8970 4496 597 1648 595 1652 601 530 602 533 598 541 601 541 601 543 599 1652 601 523 598 1649 594 1656 597 538 593 545 597 545 597 549 593 541 601 523 598 529 592 1658 595 540 592 546 596 545 597 548 594 541 601 523 598 529 592 539 593 542 600 538 593 1668 595 1670 593 1662 591 533 599 529 592 539 593 542 600 538 593 547 595 549 593 542 600 524 597 530 602 529 592 543 599 539 593 549 593 551 601 516 595 7937 593 532 599 527 594 536 596 539 592 546 596 545 597 548 594 1661 592 532 600 528 593 538 593 541 601 537 594 547 595 550 602 533 599 526 595 533 599 533 599 536 595 543 599 541 601 544 598 536 595 529 592 535 596 535 596 538 594 544 598 544 598 547 595 541 601 523 598 528 593 537 594 540 602 536 595 546 596 550 602 533 598 526 595 532 600 531 600 534 597 541 601 541 601 545 597 539 593 532 600 528 593 538 593 541 601 537 594 547 595 550 602 532 599 523 598 527 594 1653 600 533 598 538 593 1664 599 1662 591 523 598 7926 593 529 592 534 597 532 599 534 597 538 593 546 596 547 595 537 594 1648 595 532 600 532 599 536 595 543 599 543 599 546 596 540 602 522 599 529 592 538 594 541 601 536 595 546 596 549 593 542 600 523 598 529 592 538 593 541 601 538 593 548 594 552 600 534 597 527 594 534 597 534 597 1657 596 543 599 543 599 548 594 542 600 524 597 530 601 530 602 533 598 538 593 547 595 551 601 533 599 1644 599 528 593 538 593 1661 592 545 597 545 597 548 594 524 597 # -name: MODE +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3296 1651 412 415 414 414 405 1240 408 420 409 1237 411 416 413 415 414 413 406 1240 408 1238 410 419 410 417 412 415 414 1232 406 1214 434 420 409 418 411 417 412 415 414 413 406 423 406 421 408 419 410 418 411 416 413 414 405 423 406 421 408 1237 411 416 413 415 414 414 405 423 406 421 408 419 410 417 412 1234 414 413 406 422 407 420 409 418 411 1235 413 1233 415 1205 433 1214 434 1212 436 1210 438 1208 440 1207 431 423 406 421 408 1238 410 417 412 415 414 414 405 422 407 420 409 419 410 418 411 416 413 1232 406 1241 407 420 409 418 411 417 412 415 414 413 406 422 407 421 408 1237 411 1235 413 414 415 413 406 422 407 420 409 418 411 416 413 414 405 424 405 422 407 420 409 419 410 417 412 415 414 413 406 422 407 420 409 418 411 416 413 414 405 424 405 422 407 420 409 418 411 416 413 415 404 423 406 421 408 419 410 418 411 416 413 414 405 424 405 422 407 420 409 418 411 416 413 414 405 423 406 421 408 419 410 417 412 415 414 414 405 423 406 421 408 420 409 1236 412 415 414 414 405 422 407 420 409 419 410 417 412 1233 405 424 405 1240 408 420 409 +data: 8972 4491 592 1651 592 1655 598 532 599 535 597 542 600 541 601 544 598 1656 597 526 595 1652 591 1658 595 539 593 545 597 545 597 546 596 537 594 529 592 535 596 1653 600 534 597 541 601 539 592 552 600 533 598 525 596 530 591 538 593 539 592 1665 598 1662 591 1673 601 533 598 526 595 533 598 532 600 534 597 540 591 548 594 550 592 542 600 523 598 528 593 536 595 537 594 543 599 542 600 543 599 517 594 7937 593 531 601 526 595 535 597 537 594 542 600 541 601 543 599 1654 599 523 598 528 593 536 596 538 594 542 600 541 590 552 600 532 599 524 597 528 593 536 595 537 595 541 601 539 593 551 591 542 600 522 599 527 594 536 595 537 594 543 599 540 591 552 600 532 600 523 598 527 594 535 596 537 595 542 600 540 591 552 600 532 600 523 598 528 593 536 595 538 593 543 599 541 601 543 599 535 596 527 594 532 600 531 601 534 597 540 592 549 593 552 600 534 597 525 596 529 592 1655 598 534 597 1656 597 1661 592 1671 592 1644 599 7934 596 529 592 535 597 535 597 538 593 544 598 543 599 545 597 538 593 1650 593 535 596 534 597 536 595 540 591 547 595 547 595 536 595 526 595 529 592 536 595 535 596 539 593 546 596 547 595 538 593 528 593 531 601 529 592 541 601 536 596 545 597 548 594 540 592 532 600 526 595 535 596 1656 597 541 601 540 592 553 599 534 597 526 595 532 599 531 600 533 598 539 593 548 594 552 600 535 596 1647 596 531 590 538 593 1656 597 538 594 545 597 545 597 518 593 # -name: MODE +# Model: Daichi DA25AVQS1-W +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 8518 4245 544 1597 545 1568 543 1597 545 564 517 1570 541 568 513 1601 510 1603 539 4244 514 568 513 1601 541 541 519 1595 537 572 509 547 513 570 511 571 593 19280 8571 4219 539 1600 542 1572 539 1600 542 567 493 1594 538 571 520 1593 518 1595 547 4209 539 570 521 1593 539 544 516 1598 544 565 485 572 519 563 518 565 598 19272 8528 4262 538 1603 518 1595 537 1603 539 544 517 1597 545 537 544 1570 541 1599 543 4213 545 563 518 1596 515 567 514 1600 542 540 521 562 519 564 517 566 597 -# TIMER OFF -name: TIMER +data: 9131 4318 815 389 817 1523 784 391 815 1523 784 1494 813 422 784 391 816 421 785 1524 784 392 814 422 783 1525 782 424 782 422 784 422 784 422 784 396 809 423 783 422 782 423 783 423 783 1496 812 1525 782 424 783 423 783 422 783 423 783 394 811 1526 782 424 782 1524 782 423 783 423 782 1525 782 423 675 19938 810 425 781 424 674 502 811 423 675 531 675 531 675 531 676 530 675 531 675 531 675 502 704 530 675 530 676 530 676 502 704 530 676 530 676 530 675 530 675 530 676 530 675 530 676 530 676 529 677 529 677 529 677 530 677 529 677 1631 676 529 677 1630 678 1631 677 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4419 4378 562 1618 568 552 541 1619 567 1640 536 533 560 535 558 1649 537 559 534 537 566 1619 567 554 539 530 563 1618 568 1613 563 532 561 1626 560 537 566 554 539 530 563 557 536 536 1622 564 1616 560 1624 562 1625 561 1620 566 1615 561 1621 565 1616 560 534 559 536 567 529 564 559 534 1625 561 533 560 1625 561 1620 566 528 565 530 563 1620 566 530 563 532 561 1624 562 532 561 1650 536 1645 541 1614 562 1620 566 5226 4418 4372 558 1622 564 557 536 1623 563 1618 568 527 566 529 564 1617 559 564 539 531 562 1623 563 558 535 533 560 1621 565 1616 560 535 568 1619 567 529 564 557 536 532 561 560 533 561 542 1614 562 1619 567 1642 534 1628 569 1613 563 1619 567 1614 562 1619 567 528 565 530 563 533 560 563 540 1619 567 527 566 1619 567 1614 562 533 560 535 558 1625 561 536 567 527 566 1619 567 528 565 1620 566 1615 561 1620 566 1618 558 -# TIMER OFF -name: TIMER +data: 9076 4455 677 1629 678 528 677 528 677 1630 677 529 677 530 676 530 676 531 675 531 675 531 675 531 675 531 674 531 675 532 674 531 674 532 674 531 675 532 674 531 674 531 674 532 674 1633 674 1633 674 532 674 532 674 532 674 532 674 532 674 1634 673 533 673 1634 673 533 674 532 674 1633 674 533 673 19965 674 531 674 532 675 531 675 531 675 531 675 531 675 531 675 531 675 532 674 531 675 531 676 531 674 531 675 531 675 531 674 531 675 531 675 532 674 532 674 531 675 532 674 532 674 531 675 531 675 532 674 532 674 532 674 532 674 1633 674 1633 674 532 674 532 674 +# +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4459 4372 589 1565 597 480 595 1559 592 485 590 487 588 488 598 479 596 1558 593 1562 589 1565 597 1558 593 483 593 485 590 486 589 488 598 479 596 480 595 1559 592 485 590 486 589 1565 597 481 594 1559 592 485 590 1564 598 479 596 481 594 483 592 484 591 1563 588 489 597 1558 593 1561 590 486 589 488 598 479 596 481 594 483 592 484 591 1563 599 478 597 480 595 482 593 483 592 485 590 486 589 488 588 489 597 5158 4462 4367 594 483 592 1563 588 488 598 1557 594 1560 591 1563 599 1556 595 482 593 484 591 485 590 487 588 1566 596 1559 592 1562 589 1565 597 1558 593 1562 589 488 598 1556 595 1559 592 485 590 1564 598 479 596 1558 593 484 591 1563 588 1566 596 1559 592 1562 589 488 598 1557 594 482 593 484 591 1563 588 1566 596 1559 592 1563 588 1565 597 1558 593 484 591 1563 588 1566 596 1559 592 1562 589 1565 597 1558 593 1561 590 1564 598 -# TIMER OFF -name: TIMER +data: 9076 4453 679 1628 703 503 703 503 702 1607 700 506 699 507 699 507 699 507 699 1609 698 1610 698 1609 699 507 699 508 698 508 698 508 698 508 698 508 698 507 699 508 698 508 698 508 697 1609 698 1610 698 508 698 508 698 508 698 508 698 509 697 1610 697 508 698 1610 698 508 698 508 698 1610 697 509 697 19941 699 507 699 507 699 507 699 508 698 508 698 508 698 508 698 508 697 508 698 508 698 507 699 508 698 508 698 508 698 508 698 508 698 508 698 508 697 509 697 509 697 508 698 508 698 508 698 508 698 509 697 508 697 509 697 509 696 509 697 1635 673 533 673 1611 696 +# +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4415 4348 568 1578 569 503 570 1575 572 500 563 510 563 508 565 533 540 1578 569 1576 571 527 546 500 563 509 564 533 540 532 541 1603 544 502 571 500 563 1582 565 1580 567 1578 569 504 569 502 571 1574 563 509 564 1581 566 506 567 504 569 529 544 501 572 500 563 509 564 1580 567 1578 569 529 544 501 572 500 563 509 564 507 566 1578 569 1576 571 501 572 1573 564 508 565 1606 541 504 569 1576 571 501 572 1573 564 5169 4410 4351 565 507 566 1579 568 504 569 1575 572 1573 564 1582 565 1580 567 505 568 503 570 1575 572 1573 564 1581 566 1580 567 1578 569 503 570 1575 572 1573 564 534 539 507 566 505 568 1577 570 1575 572 500 563 1582 565 507 566 1579 568 1577 570 1575 572 1573 564 1582 565 1580 567 505 568 504 569 1576 571 1574 563 1582 565 1580 567 1579 568 504 569 503 570 1574 563 509 564 1581 566 506 567 1578 569 503 570 1574 563 510 563 -# -name: POWER +data: 148 110377 9082 4422 707 499 706 500 704 1603 703 1606 701 505 700 507 699 506 700 507 699 506 700 1607 700 1608 700 1609 699 506 699 507 699 506 699 507 699 507 699 506 700 507 699 507 699 507 699 1608 699 1607 699 507 699 507 699 507 699 507 699 507 699 1609 699 507 699 1608 699 507 699 507 699 1609 699 507 699 19940 700 506 700 506 699 507 699 507 699 506 700 506 700 507 699 507 699 507 700 507 699 506 699 507 699 507 699 507 699 507 699 507 699 507 699 507 699 507 698 507 700 507 699 507 699 507 699 507 699 507 699 508 698 508 698 507 699 507 699 508 698 1610 699 508 698 +# +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3455 1584 486 347 483 348 482 347 482 348 480 350 430 401 429 1229 432 401 429 400 430 400 430 399 431 399 431 398 432 398 432 399 431 399 456 375 455 377 453 1207 453 378 452 1209 452 379 451 379 451 379 451 379 451 379 451 379 452 379 451 379 451 379 451 403 427 1233 427 1234 427 380 450 1234 426 1234 427 403 427 1233 427 403 427 1234 427 403 427 1234 426 404 426 403 427 403 427 403 427 403 427 1234 427 403 427 403 427 403 427 403 427 403 427 1234 427 403 427 403 427 403 427 403 427 403 427 1234 427 403 427 1234 426 1234 427 1234 426 1234 427 1234 427 403 427 403 427 403 427 1234 427 404 426 403 427 403 427 403 427 403 427 403 427 403 428 403 427 403 427 403 427 403 427 403 427 403 427 403 427 1234 427 1234 427 404 426 404 426 404 426 404 426 1234 426 404 427 404 426 404 426 1234 426 404 426 404 426 1234 427 404 426 404 426 404 426 404 426 404 426 404 426 1235 426 1235 426 1235 426 404 426 1235 425 405 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 427 404 426 404 426 404 426 404 427 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 404 426 1235 426 1235 426 1235 426 404 426 1235 426 404 426 -# -name: POWER +data: 9081 4423 707 499 706 500 704 1604 702 1606 701 505 701 506 700 506 700 506 700 1608 700 1607 700 1609 699 506 700 506 700 506 700 506 700 506 700 507 699 506 700 506 700 507 699 507 699 1608 700 1608 699 507 699 507 699 507 699 507 699 507 699 1608 699 507 698 1609 698 507 699 507 699 1609 699 507 699 19938 699 506 700 506 700 507 699 506 699 506 700 506 699 506 700 507 699 507 699 507 700 506 699 507 699 507 699 507 699 507 699 507 698 507 699 507 699 507 699 507 699 507 699 507 699 507 699 507 700 507 699 507 698 507 699 507 699 1609 699 507 698 1609 699 1609 699 +# +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4532 4226 685 1459 685 388 683 1458 686 414 657 414 657 415 656 415 656 1487 656 415 603 469 602 469 602 469 602 1541 602 469 602 469 602 469 602 469 602 1541 602 468 603 468 603 468 603 1540 603 1541 602 470 601 1543 600 1544 600 1545 599 1546 598 1547 597 1570 574 1570 574 1570 574 1570 574 1570 574 1570 574 1570 574 1570 574 1570 574 1570 573 1570 574 1570 574 1570 574 498 573 1570 573 498 573 498 573 498 573 498 573 5130 4444 4312 598 473 598 1546 597 473 598 1545 598 1545 599 1545 622 1521 623 448 623 1520 623 1519 624 1520 599 1544 624 448 598 1545 623 1520 624 1520 624 1520 622 448 599 1544 624 1520 623 1520 623 447 624 447 624 1519 624 447 624 447 624 447 624 447 624 447 624 448 623 448 623 447 624 447 624 447 624 448 623 447 624 447 624 447 624 447 624 447 624 448 623 448 623 1520 623 448 623 1520 623 1520 623 1520 623 1520 623 +data: 9106 4398 731 499 706 500 705 502 702 504 701 505 701 505 701 1606 701 505 701 1607 701 505 701 506 700 1607 700 506 700 506 700 505 700 505 701 506 700 506 700 506 699 506 700 506 700 1607 700 506 700 506 700 506 700 505 701 506 700 506 700 1608 699 506 700 1608 699 506 700 506 700 1608 700 506 700 19941 701 1606 700 505 701 505 701 506 700 505 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 701 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 700 506 699 506 700 506 700 1608 700 1607 700 506 700 506 700 # -name: TEMP+ +# Model: Saturn CS-TL09CHR +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4502 4254 656 1488 657 415 657 1487 657 387 684 414 603 469 602 469 602 1541 602 1541 603 469 602 469 602 469 602 1541 602 469 602 469 602 469 602 468 603 1540 603 468 603 468 603 1540 603 468 603 468 603 1541 602 1542 602 1543 600 1544 600 1544 599 1544 600 1545 599 1544 600 1545 599 1545 599 1545 599 1545 599 1545 599 1545 599 1545 599 1545 599 1545 599 472 599 1544 600 472 599 1544 599 1544 600 472 599 1544 599 1544 600 5129 4473 4285 624 446 625 1518 626 446 625 1519 625 1519 625 1519 625 1519 625 446 625 446 625 1519 625 1519 625 1519 625 446 625 1519 625 1519 625 1519 625 1519 625 446 626 1519 624 1519 625 447 624 1519 625 1519 625 447 624 447 624 446 625 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 447 624 1519 625 447 624 1520 624 447 624 447 624 1519 624 447 624 447 624 -# -name: TEMP- +data: 3014 1708 488 1059 464 1085 461 362 461 363 460 387 436 1085 462 362 461 402 436 1084 463 1083 463 364 459 1083 463 363 460 386 437 1082 518 1044 464 386 437 1108 439 1108 438 386 464 360 463 1082 464 360 490 352 459 1084 462 362 460 363 460 363 460 364 459 364 459 364 459 380 459 364 459 364 459 364 460 364 459 364 459 364 459 364 459 380 459 364 459 365 458 1088 459 364 459 365 458 1088 458 365 458 380 459 365 458 1088 459 365 458 364 459 365 459 365 458 365 458 380 458 1088 459 1088 459 1088 458 365 458 365 458 365 458 365 458 381 458 365 458 365 458 365 458 365 458 365 459 365 458 365 458 381 458 366 457 366 457 366 457 366 457 366 458 365 458 366 458 381 457 366 457 366 457 366 457 366 457 366 457 366 457 366 458 382 457 366 457 366 457 367 456 367 457 367 456 367 456 390 433 406 433 367 456 367 456 390 433 391 433 390 433 390 433 390 433 406 433 391 432 1114 432 391 432 391 432 391 432 391 432 1114 433 396 433 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4525 4234 680 1462 682 390 681 1461 683 392 679 391 680 391 680 391 680 1461 683 1461 683 391 680 392 679 415 601 1515 629 469 602 469 602 470 627 444 627 1516 627 444 626 445 626 1519 624 447 624 447 624 447 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 1520 624 448 623 1520 624 447 624 1520 624 1520 624 448 623 1520 624 448 623 5105 4467 4290 623 448 624 1520 624 448 623 1521 622 1521 623 1521 623 1521 623 448 623 448 623 1521 623 1521 623 1521 623 448 623 1521 623 1521 623 1521 623 1521 623 448 623 1521 623 1521 623 449 622 1521 623 1521 623 1521 623 449 622 448 623 448 623 448 623 449 622 448 623 449 622 448 623 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 1521 623 449 622 1521 623 449 622 449 622 1521 623 449 622 1522 622 -# -name: MODE +data: 3011 1710 462 1084 462 1085 486 356 467 356 444 364 484 1060 462 364 483 357 458 1085 461 1085 461 388 435 1085 461 388 435 388 435 1084 462 1099 463 387 436 1084 462 1085 461 388 461 362 461 1084 462 362 461 378 460 1087 459 365 458 365 458 366 457 366 457 366 457 366 457 382 457 366 457 366 457 366 457 367 456 367 456 367 456 367 456 382 457 367 456 367 456 1090 457 367 456 367 456 1090 457 367 456 382 457 1090 456 1090 457 367 456 367 456 367 456 367 456 367 456 382 457 1091 456 1091 456 1091 456 1090 456 367 456 367 456 367 457 382 457 367 456 367 456 367 456 367 456 368 456 367 456 368 455 383 456 367 456 367 456 368 455 368 455 368 455 368 456 368 455 383 456 368 455 368 455 368 455 368 455 368 455 368 455 368 455 383 456 368 455 368 455 368 455 368 455 368 455 368 455 368 455 384 455 368 455 368 455 368 455 368 455 368 455 368 455 368 455 383 456 1091 456 1091 456 368 456 1091 455 368 455 368 455 1091 456 373 456 +# +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4470 4287 627 1518 626 448 624 1518 626 447 625 447 624 448 623 447 624 1517 627 1517 627 446 625 447 624 446 625 470 601 470 601 470 601 1518 652 444 627 1517 627 445 625 446 625 1520 624 447 624 448 623 448 623 1521 623 1521 623 1520 624 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 1521 623 448 623 1521 623 448 624 1521 623 448 623 1521 623 1521 623 1521 623 5107 4467 4291 623 448 623 1521 623 448 623 1521 623 1521 623 1521 623 1521 623 449 623 448 623 1521 623 1521 623 1521 623 1522 622 1521 623 1522 622 449 622 1521 623 449 623 1521 623 1522 622 449 622 1522 622 1522 622 1522 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 622 449 623 1522 622 449 622 1522 622 449 622 1522 622 450 621 449 622 449 622 -# -name: SWING +data: 3012 1709 462 1083 463 1084 463 361 462 362 484 355 469 1059 463 387 436 402 437 1083 464 1083 464 362 462 1080 520 354 469 354 469 1026 521 1068 518 354 390 1108 439 1108 438 386 463 360 464 1081 465 359 464 375 463 1083 463 361 462 362 461 363 460 363 460 364 459 364 459 380 459 364 459 364 459 365 458 365 458 365 458 365 458 365 458 380 459 365 458 365 458 1089 458 365 459 365 458 1089 458 366 457 382 456 1090 457 1113 433 390 433 390 433 390 433 390 433 390 433 405 434 390 433 390 433 390 433 1113 434 390 433 390 433 390 433 405 434 390 433 390 433 390 434 390 433 390 433 390 433 390 433 405 434 390 433 390 433 390 433 390 433 390 433 390 433 390 434 405 433 390 433 390 433 390 433 390 433 390 433 390 433 390 433 406 433 390 433 390 433 390 433 390 433 390 433 391 432 391 432 406 433 390 433 391 432 391 432 391 433 390 433 390 433 391 432 406 433 391 432 391 432 1114 433 391 432 391 432 391 432 1114 433 396 433 +# +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4526 4233 682 1462 683 391 681 1461 683 391 736 335 681 390 682 1461 683 391 680 390 682 390 681 390 681 391 679 416 602 469 602 469 602 1516 654 1492 652 1516 628 1516 628 1517 627 1518 626 1519 625 1519 625 1520 625 1519 626 1519 625 1520 624 1520 625 1519 625 1520 625 1520 625 1520 625 1520 624 1520 625 1520 625 1520 624 1520 625 1520 624 1520 625 1520 625 447 624 1520 624 1520 625 1520 625 1520 624 1520 624 447 624 447 625 5106 4469 4290 625 447 625 1520 624 447 625 1520 624 1520 625 1520 624 447 625 1520 624 1520 625 1520 625 1520 624 1520 624 1520 625 1520 625 1520 625 447 625 447 624 447 625 448 623 448 623 448 624 447 624 448 624 448 624 448 623 448 623 448 624 448 624 448 624 448 623 448 623 448 624 448 623 448 623 448 624 448 624 448 624 448 623 448 624 448 623 1521 624 448 624 448 623 448 623 448 624 448 623 1521 623 1522 623 -# TIMER_OFF -name: TIMER +data: 3011 1712 461 1087 459 1088 459 364 459 389 434 366 458 1086 461 388 435 404 435 1086 460 1085 461 388 435 1085 461 365 458 388 435 1084 462 1098 464 387 436 1084 462 1084 462 388 461 362 461 1084 462 362 461 378 460 1086 460 364 459 365 458 365 458 365 458 366 457 365 458 381 458 366 457 366 458 366 457 366 457 366 457 366 457 365 458 381 458 366 458 366 457 1089 458 366 457 366 457 1089 458 366 457 381 458 1089 458 366 457 366 457 366 457 366 458 366 457 366 457 381 458 366 457 366 457 366 457 366 457 366 457 366 457 366 457 381 458 366 457 366 457 366 458 366 457 366 457 366 457 366 457 382 457 366 457 366 457 366 457 366 457 366 457 366 457 366 457 382 457 366 457 366 457 367 456 367 456 367 457 366 457 366 457 382 457 367 457 366 457 367 457 366 457 367 457 366 457 366 457 382 457 367 456 367 456 367 456 367 456 367 456 367 456 367 456 382 457 367 456 1090 457 367 456 1091 456 1090 457 1090 456 367 456 373 456 +# +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4528 4233 682 1461 684 389 683 1461 684 390 737 335 681 391 681 390 682 1461 683 1461 684 1461 683 1461 683 392 626 468 603 469 603 468 603 469 628 443 629 1515 629 443 628 444 627 445 626 1518 626 1519 625 1519 626 1519 626 446 626 446 625 446 625 446 626 446 625 1519 625 1519 626 1519 626 446 626 446 625 446 626 446 625 446 626 446 626 1519 625 446 625 446 626 446 625 446 625 1519 625 447 625 1519 626 446 626 5105 4471 4290 625 447 625 1520 625 447 625 1519 625 1520 624 1520 625 1520 625 447 625 447 625 447 624 447 624 1519 625 1520 625 1520 624 1520 625 1520 624 1520 625 447 625 1520 624 1520 624 1520 625 447 625 447 625 447 624 447 625 1520 624 1520 624 1520 624 1520 624 1520 624 447 625 447 625 447 625 1520 624 1520 625 1520 624 1521 624 1520 624 1521 624 447 624 1520 624 1521 624 1521 623 1520 624 448 624 1520 624 448 624 1521 624 -# -name: POWER +data: 3045 1677 493 1023 524 1024 522 354 469 354 469 354 469 1026 576 353 470 350 487 1001 492 1054 492 354 469 1054 492 355 468 354 469 1054 492 1070 491 354 468 1056 438 1109 438 386 437 385 438 1107 439 385 438 400 464 1081 465 359 464 360 463 361 462 362 461 388 435 388 435 404 434 389 434 389 434 389 434 389 434 389 434 389 434 389 434 405 434 389 434 389 434 1112 434 389 434 389 434 1113 434 389 434 405 434 1112 435 389 434 366 458 365 458 365 458 365 458 365 458 381 458 365 458 366 457 365 458 1089 457 366 457 366 457 366 457 382 456 367 433 390 433 391 432 391 432 391 432 391 432 391 432 406 433 391 432 391 432 390 433 391 432 391 432 391 432 391 432 406 433 391 432 391 433 391 432 391 432 391 432 391 432 391 432 407 432 391 432 391 432 391 432 392 431 391 433 391 432 391 432 430 409 393 430 392 431 392 431 392 432 391 457 367 432 392 431 408 431 392 431 1138 433 391 408 392 431 392 456 367 456 1113 408 421 433 +# +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3089 3684 1991 910 1011 1854 983 847 1992 911 982 965 956 874 984 938 982 939 973 1866 1889 948 973 950 972 950 972 859 971 950 972 950 972 954 968 887 943 979 943 979 943 979 943 887 944 979 943 979 943 979 943 887 943 979 943 950 972 979 943 1803 1952 977 3051 3724 1951 978 943 1894 943 888 1951 978 943 979 943 888 942 980 942 979 943 1895 1859 978 943 979 943 979 943 888 943 979 943 979 943 980 942 888 943 980 942 980 942 980 942 888 942 980 942 980 942 980 942 888 943 979 943 980 942 980 942 1804 1950 978 3050 3725 1950 978 942 1896 941 889 1950 979 941 980 942 888 942 980 942 980 942 1896 1858 979 942 980 942 980 942 889 941 980 942 981 941 980 942 889 942 980 942 981 941 981 941 889 941 981 941 981 941 981 941 889 941 981 941 981 941 981 941 1805 1949 980 3964 +data: 3013 1709 463 1085 462 1084 463 387 461 355 469 355 444 1084 463 387 461 378 436 1084 462 1084 487 355 469 1059 463 387 460 355 444 1083 463 1098 464 386 437 1083 463 1083 489 361 463 360 463 1082 464 361 462 376 462 1085 461 363 460 364 459 364 459 365 458 365 459 364 459 380 459 365 458 365 458 365 458 365 458 365 458 365 458 365 459 380 458 365 459 365 458 365 459 365 458 365 458 1089 458 365 458 380 459 1088 459 365 458 365 458 365 458 365 459 365 458 365 458 381 458 365 458 365 458 365 458 1089 458 365 458 365 458 365 458 381 458 365 458 365 458 365 458 365 458 365 458 365 458 365 458 381 457 366 457 366 457 366 457 366 457 366 458 365 458 366 457 381 458 366 458 366 457 366 457 366 457 366 457 366 457 366 457 381 458 366 457 366 457 366 457 366 457 366 457 366 457 366 457 382 457 366 457 366 457 366 457 366 457 366 457 367 457 366 457 382 457 367 456 1090 457 1090 456 1090 457 1090 457 1090 456 367 457 372 457 # -name: TEMP+ +# Model: Olimpia Splendid OS-SEAMH09EI +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3093 2739 1010 912 1010 914 1008 1829 1009 845 1995 912 1004 919 1004 846 984 942 973 944 975 1867 1889 945 974 1893 1955 886 941 1008 914 980 942 1008 914 857 974 1008 914 1008 914 1008 914 916 914 1008 914 1008 914 1008 914 916 914 1008 914 1008 914 1008 914 1771 1985 1005 3024 2835 913 1008 914 1008 914 1923 915 916 1924 1005 914 1008 914 916 914 1008 914 1008 914 1897 1859 978 942 1896 1951 886 942 981 941 980 942 980 942 889 942 980 941 980 942 980 942 888 943 980 942 981 941 980 942 888 942 980 942 980 942 980 942 1803 1953 977 3052 2807 942 980 942 980 942 1895 943 888 1952 977 942 979 943 888 942 980 942 979 943 1895 1861 977 942 1895 1953 885 943 979 943 979 943 979 943 888 943 979 943 979 943 979 943 888 942 979 943 979 943 980 942 888 942 980 942 980 942 980 942 1803 1952 977 3969 -# -name: TEMP- +data: 4402 4336 561 1641 538 554 535 1616 563 1640 539 554 535 557 532 1645 534 560 539 551 538 1639 540 553 536 556 533 1644 535 1642 537 556 533 1620 558 558 531 561 538 554 535 1641 538 1639 540 1638 530 1620 559 1647 532 1643 536 1641 538 1613 566 553 536 557 532 560 539 553 536 558 531 560 529 1647 532 535 564 1613 555 537 563 1614 565 554 535 559 530 1645 534 559 530 1647 532 560 539 1612 557 562 537 1640 539 1611 557 5189 4398 4344 564 1638 530 563 537 1640 539 1639 529 563 537 530 559 1644 535 560 529 535 564 1639 529 537 563 556 533 1644 535 1643 536 557 532 1647 532 559 530 536 564 555 534 1643 536 1616 563 1640 539 1613 555 1624 565 1610 558 1619 560 1617 562 557 532 560 539 554 535 557 532 562 537 553 536 1641 538 555 534 1643 536 530 559 1644 535 558 531 564 536 1639 539 553 536 1641 537 555 534 1617 562 557 532 1645 534 1645 534 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3093 2764 985 937 985 909 1013 1852 985 845 1995 934 958 963 983 847 986 936 984 938 974 1863 1892 945 975 1863 1984 884 944 979 943 979 943 977 945 886 945 979 943 978 944 979 943 887 943 978 944 979 943 979 943 888 943 979 943 948 974 948 974 1804 1952 977 3052 2776 973 950 972 980 942 1895 942 887 1953 977 942 980 942 889 942 980 942 980 942 1896 1860 978 941 1896 1951 887 941 981 941 980 942 981 941 889 941 981 941 982 940 981 941 890 941 979 943 981 941 982 940 917 914 982 940 1008 914 1008 914 1806 1950 1005 3024 2835 913 1008 914 1008 914 1924 914 917 1923 1006 913 1008 914 917 913 1008 914 1008 914 1924 1832 1006 913 1924 1923 914 914 1009 913 1009 913 1009 913 917 913 1009 913 1009 913 1009 913 917 914 1009 913 1009 913 1009 913 917 914 1009 913 1009 913 1009 913 1833 1923 1006 3939 -# -name: MODE +data: 4404 4345 563 1613 566 553 536 1641 538 1614 565 528 561 557 532 1645 534 560 539 551 538 1639 529 563 536 556 533 1618 561 1642 537 556 533 1645 534 557 532 561 538 1638 530 1646 533 1645 554 1623 556 1621 558 1596 562 1613 586 1591 588 531 537 555 534 559 530 562 537 555 534 561 538 552 537 555 534 559 530 562 537 555 534 559 530 562 537 557 532 1643 536 1615 564 1639 560 1591 588 1616 563 1588 580 1623 556 1621 537 5183 4404 4339 579 1597 581 538 530 1646 533 1619 580 539 529 563 536 1615 564 557 532 532 557 1646 533 560 539 553 536 1641 538 1639 539 554 535 1643 536 555 534 559 530 1647 532 1646 533 1644 535 1617 582 1620 559 1621 537 1612 587 1590 589 530 538 554 535 558 531 561 538 554 535 560 539 551 538 554 535 558 531 561 538 554 535 557 532 561 538 556 533 1642 537 1640 538 1613 565 1638 561 1590 589 1588 580 1623 556 1598 560 +# +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3122 2736 1012 912 1010 1828 2019 819 1009 936 985 936 984 938 984 846 983 938 951 972 974 1862 1894 944 975 1863 1985 854 973 948 974 978 944 979 943 888 943 980 942 979 943 979 943 888 942 979 943 979 943 979 943 888 942 979 943 979 943 979 943 1804 1952 976 3053 2807 942 979 943 1895 1952 885 943 979 943 979 943 979 943 888 943 980 942 981 941 1896 1860 977 942 1894 1953 887 940 981 941 980 942 981 941 917 914 980 942 980 942 980 942 888 943 980 942 981 941 980 942 889 941 981 941 981 941 981 941 1832 1924 978 3051 2835 913 1009 913 1924 1924 914 914 1008 914 1008 914 1008 914 917 914 1008 914 1008 914 1924 1832 1006 913 1924 1924 914 914 1009 913 1009 913 1009 913 917 914 1009 913 1009 913 1009 914 917 913 1009 913 1008 914 1009 913 917 914 1008 914 1009 913 1009 913 1833 1923 1006 3940 -# POWER OFF -name: POWER +data: 4400 4357 561 1616 563 530 559 1619 559 1644 535 557 532 535 564 1613 555 565 534 556 533 1645 534 533 556 536 563 1614 565 1639 529 537 563 1643 536 529 560 558 531 1647 532 1645 533 1618 561 1643 536 1642 537 1642 537 1613 565 1638 530 537 563 556 533 559 530 563 536 556 533 562 538 527 562 1615 563 555 534 1643 536 531 558 561 538 554 535 560 539 1610 558 560 539 1612 556 563 537 1640 538 1639 539 1612 556 1620 558 5189 4398 4345 562 1614 564 529 560 1643 536 1616 563 531 558 534 565 1639 529 565 534 556 533 1619 559 559 530 563 537 1641 538 1640 538 554 535 1645 534 531 558 560 539 1639 529 1622 556 1621 558 1646 532 1619 559 1646 533 1617 562 1642 537 557 532 560 539 554 535 557 532 561 538 556 533 558 531 1620 559 560 539 1638 530 563 536 556 533 560 539 555 534 1642 537 556 533 1619 559 559 530 1622 557 1621 558 1620 558 1647 532 +# +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3195 1551 429 365 428 1158 429 365 429 365 428 1158 429 365 428 1158 429 366 428 365 428 1159 428 1158 429 1159 428 364 429 1158 429 366 428 1158 429 1158 429 1158 429 365 428 365 428 365 429 365 428 1158 429 1158 429 365 428 1158 429 1158 458 354 440 353 441 1128 459 353 494 353 386 1128 486 353 441 353 440 1101 459 1128 459 353 440 1128 459 1127 460 1128 459 1128 459 353 440 1129 457 1129 458 1130 457 1131 456 353 440 354 439 354 439 1132 455 354 439 353 440 354 439 354 439 1132 455 1132 455 1132 455 1132 455 354 440 354 439 1133 454 1133 454 354 439 353 440 354 439 353 440 1133 454 1133 454 353 440 353 440 1133 454 353 440 1133 454 1133 454 1133 454 353 440 353 440 353 440 1133 454 1133 454 353 440 353 440 354 439 1133 454 1133 454 1133 454 354 439 -# -name: TEMP+ +data: 4402 4346 561 1615 564 555 534 1644 535 1643 536 531 558 561 538 1639 539 555 534 531 558 1645 533 560 529 563 536 1641 537 1640 538 528 561 1645 533 531 558 561 538 1639 539 1638 530 1622 557 1647 532 1646 564 1590 557 1619 559 1618 561 558 531 562 537 555 534 559 530 563 536 558 531 1645 533 559 530 1648 530 1647 531 1646 532 1646 532 560 539 556 533 558 531 1621 557 561 538 555 534 558 531 562 537 1641 537 1639 539 5183 4405 4339 558 1645 533 559 530 1648 530 1647 532 561 538 555 534 1644 535 560 539 551 538 1614 564 555 534 559 530 1647 532 1620 558 561 538 1615 563 553 536 531 558 1620 558 1644 534 1643 536 1642 537 1641 537 1642 536 1613 565 1638 530 563 536 557 532 534 565 554 535 557 532 563 536 1613 565 554 535 1642 537 1641 537 1640 538 1640 538 554 535 560 539 551 538 1614 564 528 561 558 531 562 537 555 534 1644 534 1645 533 +# +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3197 1548 430 365 428 1158 429 365 428 365 428 1128 459 365 428 1130 457 365 428 365 428 1157 430 1158 429 1158 429 365 429 1158 429 364 429 1158 429 1158 429 1158 429 364 429 364 429 364 429 364 430 1158 429 1157 430 364 429 1157 430 1158 429 364 429 364 429 1158 429 364 429 364 459 1128 459 353 440 353 440 1128 458 1129 430 364 429 1157 430 1157 430 1157 430 1157 430 363 430 1157 457 1130 457 1130 457 1131 456 353 440 352 441 352 441 1132 455 352 441 353 440 353 440 353 440 1132 455 1132 455 1132 455 1132 455 352 442 353 440 1133 454 1133 454 352 441 352 441 353 440 353 440 1132 455 1132 455 353 440 353 440 1132 455 353 440 1132 455 1132 455 353 441 1132 455 1132 455 1133 454 353 440 1132 455 353 440 353 440 1132 455 352 441 353 440 353 440 1132 455 -# -name: TEMP- +data: 4404 4354 564 1614 564 528 561 1617 562 1642 537 530 559 534 565 1613 555 539 560 556 533 1619 559 534 555 563 536 1642 537 1641 537 555 534 1646 533 532 557 562 537 1640 538 1613 565 1613 555 1648 531 1647 532 1622 557 1619 559 1618 560 559 530 563 536 556 533 560 539 554 535 559 530 561 538 1639 539 554 535 1616 563 1615 564 1615 563 555 534 561 538 1612 556 563 536 1641 538 529 560 533 556 563 537 1641 538 1614 564 5183 4404 4342 555 1622 557 562 537 1641 537 1640 538 529 560 533 556 1648 531 538 562 555 534 1618 560 559 530 562 537 1615 563 1640 538 529 560 1646 532 532 557 562 537 1640 538 1639 539 1639 539 1638 530 1648 530 1649 540 1611 557 1646 532 561 538 554 535 558 531 562 537 555 534 561 538 552 537 1641 537 555 534 1644 534 1643 536 1617 562 557 532 563 536 1639 539 553 536 1642 537 556 533 560 539 554 535 1642 537 1643 535 +# +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3196 1549 429 365 428 1157 430 364 429 365 429 1157 430 365 428 1158 429 364 429 364 429 1157 430 1158 429 1157 430 364 429 1129 458 364 429 1158 429 1158 429 1158 429 364 429 364 429 364 429 364 429 1158 429 1158 429 364 429 1158 429 1158 429 364 429 364 429 1158 429 364 429 364 459 1128 459 353 440 353 440 1128 459 1128 459 352 440 1129 430 1157 430 1156 431 1157 430 363 430 1157 457 1129 458 1129 458 1130 457 352 441 352 441 352 441 1132 455 353 440 352 441 353 440 353 440 1132 455 1132 455 1133 454 1133 454 353 440 352 441 1132 455 1132 455 352 441 352 442 353 440 352 441 1132 455 1132 455 353 440 353 440 1132 455 352 441 1132 455 1132 455 352 441 353 440 352 441 352 441 1132 455 1132 455 352 441 353 440 1132 455 1132 455 1132 455 1132 455 353 440 +data: 4403 4333 563 1615 563 528 561 1618 560 1618 560 531 558 561 538 1614 564 556 533 558 541 1611 557 562 537 555 534 1619 559 1618 560 558 541 1613 565 551 538 1614 564 1614 564 1614 564 1613 565 528 561 1617 561 1619 559 1617 561 557 532 535 564 528 561 533 566 1611 557 562 537 558 531 1619 559 1619 559 1619 559 559 540 553 536 557 532 561 538 557 532 559 540 553 536 557 532 1620 558 1620 558 1620 558 1620 558 1618 560 5188 4398 4346 561 1618 560 558 531 1621 557 1621 557 561 538 555 534 1619 559 561 538 553 536 1616 562 556 533 560 539 1614 564 1613 565 554 535 1619 559 557 532 1621 557 1620 558 1620 558 1620 558 560 539 1613 565 1615 563 1613 565 553 536 557 532 535 564 554 535 1618 560 558 531 564 535 1615 563 1615 563 1614 564 555 534 559 540 552 537 530 559 536 563 528 561 532 557 562 537 1615 563 1615 563 1614 564 1614 564 1616 562 # -name: MODE +# Model: Sharp AH-X9VEW. Doesn't have heat function. +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3197 1520 458 364 429 1158 429 364 429 364 429 1130 457 364 429 1157 430 365 428 365 428 1130 457 1157 430 1158 429 364 429 1158 429 364 429 1157 430 1157 430 1157 430 364 429 364 429 364 429 363 430 1157 430 1157 430 364 429 1157 430 1157 430 363 430 364 429 1157 430 364 459 352 442 1127 460 352 441 352 441 1128 459 1128 459 353 439 1129 430 1157 458 1129 458 1129 458 352 441 1129 458 1129 458 1129 458 1130 457 352 441 352 441 352 441 1131 456 352 441 352 441 352 441 352 441 1131 456 1131 456 1131 456 1131 456 352 441 352 441 1131 456 1132 455 352 442 352 441 352 441 352 441 1131 456 1131 456 352 441 352 441 1131 456 1131 456 1131 456 352 441 352 441 352 441 352 441 352 441 1131 456 352 442 352 441 1131 456 1131 456 1132 455 1131 456 1131 456 352 442 -# -name: SWING +data: 307 125509 3831 1867 489 482 491 1392 461 468 485 1397 456 489 464 1411 463 466 487 1397 456 488 465 1390 463 482 481 1402 462 1402 483 471 461 1412 462 468 485 1400 464 1401 484 1397 488 1395 458 471 461 485 457 1408 487 1393 460 485 457 473 459 486 456 474 489 1394 459 471 461 485 457 473 459 488 465 466 455 490 463 467 465 480 462 468 464 482 460 470 483 1399 465 464 457 488 465 465 488 1393 460 484 458 471 461 485 457 1415 459 1405 511 408 482 489 464 466 487 1377 456 489 464 481 461 469 463 482 460 470 462 483 459 470 462 484 458 472 460 485 457 473 459 487 455 474 489 1395 458 471 461 485 457 472 460 486 456 473 459 486 456 474 458 487 455 474 458 488 465 466 487 1396 457 487 434 496 457 488 433 496 457 489 432 497 466 479 432 498 465 480 431 499 464 482 439 490 463 482 460 1394 491 1389 485 1395 490 1392 461 468 464 482 460 469 484 1399 465 1399 465 480 462 483 491 77962 300 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3551 3406 939 800 939 2540 939 800 939 801 938 802 964 2517 962 803 935 2544 933 807 930 2577 901 839 900 839 900 839 900 2579 900 839 900 2579 900 839 901 2578 901 839 900 839 901 2579 900 2579 900 839 901 839 900 839 900 2579 900 839 900 839 901 2579 900 2579 900 839 900 839 3514 3446 900 840 899 2580 899 840 900 840 899 840 900 2580 899 840 899 2580 900 840 899 2580 899 840 900 840 899 840 899 2580 899 840 899 2580 899 841 898 2580 899 841 898 841 899 2581 898 2581 898 841 899 841 898 841 899 2581 898 841 898 841 899 2581 898 2581 899 841 899 841 3512 3449 897 842 897 2582 897 842 897 842 898 842 897 2583 896 843 896 2607 872 843 896 2584 895 868 871 868 871 868 872 2608 871 868 871 2608 871 868 871 2608 872 868 871 868 871 2608 871 2608 872 868 871 868 871 868 872 2608 872 868 871 868 871 2608 871 2609 871 868 871 868 3485 3475 871 -# -name: POWER +data: 345 2685 478 1170 176 29680 3832 1891 465 481 482 1400 464 465 488 1395 458 470 483 1396 457 487 466 1406 458 471 492 1389 464 481 461 1411 463 1408 456 489 464 1407 457 473 490 1392 482 1383 481 1399 486 1396 458 462 459 497 456 1409 486 1394 459 459 483 473 459 487 455 474 489 1392 461 468 464 481 461 469 463 483 459 471 482 1398 487 1379 464 481 461 485 457 1416 458 487 466 1407 457 472 460 460 482 474 489 1393 460 469 463 483 459 471 461 485 457 1408 456 488 465 481 461 469 484 1381 462 483 459 486 456 473 459 487 455 474 458 487 455 475 457 489 464 467 465 481 461 1410 485 1380 484 1397 488 1392 461 483 459 471 461 485 457 473 459 486 456 474 458 488 454 476 456 490 463 467 465 481 461 1411 464 481 440 491 462 484 437 492 461 485 436 494 459 487 434 495 458 488 433 497 456 489 432 498 486 450 482 1408 467 1389 485 1394 480 1384 459 486 456 489 464 466 487 1393 460 485 457 1415 459 1406 510 +# +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3545 3410 937 803 936 2542 937 803 936 832 907 832 933 2545 933 2546 931 809 928 813 925 2580 899 839 900 840 900 839 900 2580 899 2580 899 840 899 840 900 2580 899 840 900 840 900 839 900 840 899 840 900 840 899 840 900 2580 899 840 899 840 899 840 900 840 900 840 899 840 3511 3449 898 841 898 2581 898 840 900 840 899 841 898 2581 898 2581 899 840 899 841 898 2581 898 841 898 841 898 841 898 2581 898 2581 898 841 898 841 898 2581 899 841 898 841 898 841 899 841 898 841 898 842 898 841 898 2581 898 841 898 842 897 842 897 842 897 842 898 842 3509 3450 897 13896 3509 3451 896 842 897 843 897 843 896 843 896 2583 896 843 897 843 896 2583 896 844 895 844 895 868 871 869 871 2609 870 869 871 869 870 2609 870 869 871 2609 870 2609 870 869 871 2609 870 2609 870 869 870 869 870 869 870 2609 870 2609 870 869 871 2609 870 2610 869 870 869 870 3482 3478 869 870 869 870 869 870 870 870 869 2610 869 870 869 870 870 2610 869 871 869 871 869 871 868 871 869 2611 868 871 868 871 869 2611 868 872 867 2611 869 2611 868 871 868 2612 867 2612 868 872 867 897 842 897 843 2637 843 2637 842 897 843 2637 843 2637 842 898 842 898 3454 3506 841 -# OFF -name: POWER +data: 181 11813 3819 1899 457 488 486 1421 433 472 491 1416 438 481 461 1417 437 482 492 1416 437 467 486 1419 435 485 457 1439 435 1403 461 483 480 1408 435 484 490 1416 438 1401 484 1395 490 1392 461 467 465 480 462 1427 458 1396 457 486 456 473 459 486 456 472 481 1426 438 466 466 480 462 467 465 480 462 467 465 479 463 1426 438 481 461 484 458 1438 436 1409 486 1378 465 480 462 483 459 471 482 1425 428 475 457 487 455 474 458 487 455 1434 430 489 464 481 461 468 485 1404 439 480 462 483 459 470 462 483 459 469 463 482 460 470 462 483 459 470 462 483 459 1437 458 1381 483 1395 490 1390 463 481 461 469 463 482 460 468 464 481 461 468 464 481 461 469 463 482 460 469 463 481 461 1434 430 474 458 486 456 473 459 486 456 473 459 486 456 473 459 486 456 473 459 485 457 472 460 485 489 449 462 1434 461 1378 486 1393 481 1397 519 400 479 476 456 489 464 1431 433 486 435 495 458 487 487 +# +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3120 1593 488 1180 489 1177 492 342 492 342 492 367 467 1174 485 349 485 349 485 1181 488 1179 490 343 491 1177 492 341 493 366 458 1183 486 1181 488 346 488 1179 490 1177 492 342 492 341 493 1174 485 349 485 347 487 1180 489 345 489 344 490 370 464 368 466 341 493 341 483 376 458 375 459 348 486 374 460 372 462 345 489 370 464 369 465 368 466 341 493 367 457 348 486 374 460 348 486 1179 490 343 491 343 491 1176 493 1174 485 349 485 349 485 374 460 373 461 373 461 346 488 371 463 371 463 369 465 1175 484 350 484 350 484 348 486 374 460 346 488 372 462 345 489 371 463 370 464 368 466 340 484 376 458 376 458 375 459 348 486 347 487 345 489 370 464 370 464 369 465 342 492 368 466 367 457 375 459 348 486 374 460 347 487 372 462 345 489 371 463 343 491 368 466 341 493 367 457 376 458 375 459 1181 488 346 488 345 489 1178 491 342 492 342 492 1175 494 1173 486 1182 487 346 488 346 488 1179 490 343 491 342 492 368 466 367 457 +data: 3826 1866 490 481 482 1382 461 484 490 1392 461 467 486 1396 457 471 482 1400 464 479 463 1390 463 481 482 1399 465 1398 518 401 510 1379 464 480 483 1398 456 1408 487 1392 482 1399 517 386 483 487 466 1399 486 1392 461 483 459 470 462 482 460 469 484 1397 456 473 459 459 483 472 460 484 458 471 461 483 459 1411 463 480 462 467 486 1377 487 1392 482 1396 457 486 456 472 460 486 456 473 480 1400 464 465 456 488 454 475 488 1393 460 468 464 480 462 467 486 1395 458 470 462 483 459 485 436 493 460 469 463 481 461 486 435 500 463 463 458 486 456 1397 488 1390 484 1394 480 1400 464 465 456 488 465 464 457 487 455 474 458 487 455 473 459 485 457 472 460 485 457 472 481 1399 517 401 458 497 456 473 459 485 457 487 434 495 458 471 461 484 458 488 433 502 430 507 435 500 432 498 455 1409 486 1392 482 1399 454 1409 455 488 465 480 462 467 465 480 462 1408 456 473 459 486 488 # -name: SWING -type: parsed -protocol: NEC -address: 80 00 00 00 -command: 92 00 00 00 -# OFF -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3031 3980 1912 1945 1969 1950 1912 973 994 981 965 951 975 1027 909 1950 975 965 971 974 1941 1006 940 977 969 1003 964 951 975 1000 936 1006 940 973 973 1974 941 973 1942 1006 941 974 993 950 975 999 937 1036 910 975 992 952 974 998 938 1950 975 967 3947 3987 1916 2002 1881 1975 1939 947 999 943 972 971 996 948 967 1949 997 949 976 997 1907 980 966 1006 941 975 971 1001 945 999 968 945 970 976 970 1974 972 942 1942 975 992 952 994 949 977 970 997 948 967 979 967 1005 942 999 968 1923 971 1000 3914 3958 1965 1919 1995 1893 1969 984 962 954 972 996 971 973 942 1949 976 992 965 947 1947 1002 965 950 976 1001 945 997 939 1007 939 1006 940 998 969 1915 1000 944 2002 946 969 944 992 956 1001 943 972 1000 967 949 966 977 969 1001 966 1926 968 1003 4889 -# OFF -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3160 1550 576 1092 576 1091 577 329 555 338 573 329 558 1065 601 329 557 329 556 1065 601 1066 575 338 547 1093 574 339 546 339 546 1095 573 1095 572 339 546 1096 572 1097 571 341 544 341 544 1124 544 342 543 342 543 1125 542 344 542 344 541 344 542 344 542 343 541 344 542 344 542 344 542 344 542 344 542 344 542 343 541 344 542 344 542 344 542 344 542 344 542 344 542 343 541 345 542 1126 542 343 541 345 541 1126 542 1126 542 344 542 344 542 344 542 343 541 344 542 345 541 1126 541 1126 541 1127 542 1127 541 343 542 345 541 344 542 345 542 1125 541 345 542 1127 541 343 542 345 541 345 541 345 541 345 541 345 541 345 541 343 541 345 541 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 345 541 345 541 345 541 344 540 345 541 345 541 345 541 345 541 345 541 344 541 345 541 345 541 345 541 346 540 345 541 344 540 345 541 346 540 345 541 345 541 345 540 1128 541 1126 541 345 541 346 541 1126 541 345 541 -# SWING OFF -name: SWING +# Model: Electrolux ESV09CRO-B21. Doesn't have heat function. +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3186 1522 603 1065 602 1063 603 330 554 330 556 330 551 1068 600 330 529 340 546 1093 573 1094 573 340 545 1095 573 340 545 340 545 1097 570 1098 569 343 543 1123 544 1125 542 343 542 343 542 1126 542 344 542 343 542 1126 541 344 542 345 541 345 541 343 541 344 541 345 541 344 541 345 541 345 541 345 541 343 541 345 541 345 541 345 541 344 541 345 541 344 541 1126 541 345 541 344 541 1126 541 345 541 344 541 1127 541 1125 541 345 541 345 541 345 541 345 541 345 541 344 541 1128 540 345 540 1128 541 1126 541 345 541 346 540 346 540 345 540 1129 540 1128 540 344 541 346 540 346 540 346 540 346 540 345 541 346 540 344 540 346 540 346 539 346 540 346 540 346 540 346 539 344 540 346 540 346 540 346 540 346 540 346 540 345 539 346 540 346 540 346 540 346 540 346 539 346 540 345 540 346 540 346 540 347 539 346 540 346 540 346 540 345 539 346 540 346 540 346 540 346 540 346 539 1129 540 1127 539 347 539 347 540 1127 539 346 540 +data: 3092 3057 3092 4438 579 1675 545 534 576 1650 571 535 575 531 569 1656 575 1652 579 527 573 533 577 1648 572 1655 576 1651 580 526 573 532 578 1647 573 532 578 1647 573 1654 577 529 571 535 575 530 570 535 575 529 571 534 576 529 571 534 576 528 571 534 576 528 572 533 577 528 572 533 577 527 573 1651 580 526 573 532 578 527 572 532 568 537 573 531 568 536 574 1650 571 535 575 531 569 536 574 530 569 535 575 529 571 534 576 529 571 533 577 528 572 533 577 527 572 532 568 536 574 531 569 1655 576 530 570 535 575 530 570 535 575 529 571 534 576 528 572 533 577 527 573 532 578 527 572 531 569 536 574 531 569 535 575 530 570 534 576 529 571 534 576 528 571 533 577 527 573 532 567 537 573 531 569 536 574 530 570 535 575 529 571 534 576 528 571 533 577 527 572 532 578 526 573 531 569 536 574 530 570 535 575 529 571 534 576 528 572 533 577 1646 574 532 578 1646 574 1652 579 527 572 533 577 1647 573 1653 578 1675 545 534 576 1649 571 # -name: MODE +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3157 1552 601 1065 575 1093 598 330 554 330 530 340 545 1094 573 338 545 341 545 1094 572 1095 572 340 544 1097 570 342 543 341 543 1101 567 1123 543 342 542 1124 543 1124 543 344 542 342 542 1125 542 344 542 345 541 1125 541 344 542 344 542 344 542 344 542 344 542 343 541 344 541 345 541 344 542 344 542 344 541 345 541 343 541 344 542 344 541 344 542 344 541 1126 542 344 542 344 541 1126 542 344 542 345 541 1126 541 1126 541 345 541 343 541 345 541 345 541 344 542 344 541 1127 541 1126 541 1125 541 1127 541 345 541 344 541 344 541 344 541 1126 541 344 541 1126 542 344 541 344 541 344 541 344 542 344 542 343 541 345 541 345 541 344 542 344 542 345 540 343 541 344 541 344 541 344 542 344 541 344 541 344 542 343 541 344 542 344 541 345 541 345 541 344 542 344 541 343 541 344 542 344 542 344 542 344 542 344 542 344 542 343 541 344 542 344 542 345 541 344 542 345 541 345 541 343 542 345 542 1127 541 344 541 1126 542 344 542 -# OFF -name: POWER +data: 315 101050 3094 3056 3093 4437 580 1648 572 534 576 1649 582 525 574 530 580 1646 574 1653 578 529 570 534 576 529 571 534 576 529 570 1655 576 1651 580 527 572 532 578 1647 573 1654 577 1651 580 526 573 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 531 579 525 574 531 579 525 574 531 579 1646 574 532 578 526 573 531 579 526 573 531 579 526 573 1652 579 527 572 1653 578 528 571 534 576 528 571 533 577 528 571 533 577 528 572 533 577 528 572 532 578 527 572 532 578 527 572 532 578 526 573 1652 579 527 572 532 578 527 572 532 578 527 572 532 578 526 573 531 579 526 573 531 579 526 573 531 579 525 574 530 580 525 574 530 580 525 574 530 580 524 575 529 581 524 575 529 571 534 576 528 571 533 577 528 571 533 577 528 571 533 577 527 572 532 578 527 572 532 578 526 573 531 579 526 573 531 579 525 574 531 579 525 574 530 580 525 574 1650 581 525 574 1651 580 1647 573 533 577 527 572 1653 578 528 572 1654 577 1650 581 1646 574 71637 254 +# +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3306 1624 406 411 413 404 410 1224 414 403 411 1223 405 412 412 405 409 408 406 1228 410 1224 414 402 412 406 408 409 405 1229 409 1224 414 403 411 407 407 410 414 402 412 406 408 409 405 412 412 404 410 408 406 411 413 403 411 406 408 409 405 1230 408 408 406 411 413 404 410 407 407 410 414 403 411 406 408 1226 412 405 409 408 406 411 413 404 410 1224 414 403 411 406 408 409 405 412 412 405 409 408 406 1228 410 407 407 1227 411 1222 406 1229 409 1198 440 1220 408 1227 411 -# OFF -name: POWER +data: 284 19161 3098 3053 3096 4435 572 1656 575 532 578 1648 572 534 576 530 570 1682 549 1652 579 527 572 534 576 1649 571 1656 575 1652 579 1649 571 1656 575 531 579 527 572 1653 578 1649 571 1656 575 531 579 527 572 532 578 527 572 533 577 527 572 533 577 527 573 532 578 527 572 532 578 527 573 532 578 527 572 1652 579 527 572 533 577 528 571 533 577 528 571 533 577 1648 572 533 577 1649 571 535 575 530 569 536 574 531 569 536 574 530 569 536 574 530 570 535 575 530 570 535 575 530 569 535 575 530 569 535 575 1649 571 535 575 531 568 536 574 531 568 536 574 531 568 536 574 531 569 536 574 530 569 536 574 530 569 535 575 530 569 535 575 530 569 535 575 530 570 535 575 529 570 534 576 529 570 534 576 529 570 534 576 528 571 534 576 528 571 534 576 528 571 534 576 528 571 534 576 528 571 533 577 528 571 533 577 528 572 533 577 528 571 533 577 528 572 1652 579 527 572 1653 578 529 570 534 576 529 570 535 575 529 570 1654 577 1677 554 1673 547 +# +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3302 1618 435 393 436 391 438 1207 431 396 433 1213 435 392 437 391 438 388 441 1206 432 1214 434 392 437 389 440 388 431 1215 433 1213 435 392 437 390 439 388 431 396 433 395 434 392 437 390 439 388 431 396 433 394 435 392 437 390 439 388 441 1205 433 395 434 392 437 389 440 388 431 396 433 394 435 392 437 1209 439 388 431 397 432 394 435 393 436 1210 438 387 432 396 433 394 435 392 437 390 439 388 431 1215 433 394 435 1211 437 1208 440 1205 433 1213 435 1211 437 1209 439 +data: 3093 3058 3090 4441 576 1652 579 528 571 1654 577 531 579 526 573 1652 579 1649 582 525 574 1652 579 528 571 1654 577 1651 580 527 572 533 577 528 571 533 577 1649 582 1646 574 1653 578 529 581 525 574 530 580 525 574 530 580 525 574 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 532 578 1647 573 533 577 1648 572 535 575 530 569 535 575 530 580 525 574 531 579 525 574 531 579 526 573 531 579 526 573 531 579 526 573 531 579 526 573 1651 580 527 572 533 577 528 571 533 577 528 571 533 577 528 571 533 577 528 571 534 576 528 571 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 529 570 534 576 1649 582 525 574 1650 581 1647 573 1654 577 1651 580 1647 573 1654 577 531 579 1646 574 1653 578 # -# POWER_OFF -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 9048 4430 705 500 706 1602 705 1602 729 476 730 1579 728 478 728 1580 727 480 726 480 726 480 726 480 726 1606 702 505 701 481 725 481 724 505 701 481 725 504 702 505 701 504 701 505 701 1606 702 504 702 504 701 504 701 504 702 505 701 505 701 1606 701 504 702 1607 701 504 701 504 701 1607 701 505 701 19915 726 1582 726 481 725 504 701 505 701 1606 701 505 701 505 701 505 701 505 700 1606 701 505 701 505 701 505 701 504 702 1606 701 505 701 504 701 505 701 504 702 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 1606 701 505 701 1607 700 1606 701 39924 9075 4406 728 478 728 1581 727 1581 726 481 725 1582 725 480 725 1606 701 504 702 481 725 505 701 505 701 1606 701 504 702 505 701 505 701 505 701 505 701 505 701 505 701 505 701 505 701 1606 701 505 701 505 701 505 701 505 701 505 701 505 701 1606 701 1607 701 1607 701 505 701 505 701 1607 701 506 701 19913 726 480 726 480 726 480 726 480 726 479 727 479 727 480 725 479 727 479 726 480 726 480 726 480 726 480 726 480 726 480 726 504 701 480 726 480 725 505 702 481 725 1606 701 505 701 481 725 481 725 505 700 505 701 504 701 505 701 1607 701 504 701 505 700 1607 701 -# POWER_OFF -name: POWER -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 3086 3063 3089 4438 571 1657 575 529 571 1656 576 529 571 534 576 1650 571 1655 577 527 573 1654 578 526 574 1653 569 1657 575 530 570 536 574 530 570 534 576 1648 573 1653 569 1658 574 530 570 535 575 530 570 534 576 527 573 531 569 535 575 529 571 533 577 526 574 530 570 534 576 528 572 532 568 536 574 529 571 533 578 526 574 530 570 534 576 528 572 1652 569 534 577 1649 573 532 579 526 574 530 570 534 576 527 573 531 569 535 575 528 572 532 568 536 574 529 571 533 577 526 574 530 570 534 577 1647 574 530 570 535 575 529 571 532 568 536 575 529 571 533 577 526 574 530 570 533 577 527 573 530 570 534 576 527 573 531 569 535 575 528 572 532 568 535 575 529 571 532 568 536 574 529 571 533 577 526 574 530 570 533 577 527 573 530 570 534 576 527 573 531 569 534 576 527 573 531 569 535 575 528 572 531 569 535 575 528 572 532 568 535 576 1648 573 531 569 1655 577 1648 573 1651 570 1654 578 1647 574 1651 570 533 577 1648 573 1651 571 -# POWER_OFF -name: POWER +# Model: Daikin FTE35KV1. Doesn't have heat function. +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3821 1901 456 507 456 1424 430 490 484 1425 429 475 488 1420 434 471 482 1427 437 467 486 1420 434 486 457 1416 459 1432 432 487 456 1436 439 480 483 1425 439 1425 460 1420 455 1419 435 485 457 472 491 1417 458 1407 437 483 459 487 456 474 458 487 466 1432 432 471 461 485 457 472 491 1415 460 1378 466 480 483 1424 430 474 458 487 466 1424 461 1419 456 1426 438 465 457 489 464 466 456 489 464 1426 438 481 461 484 437 493 460 1429 435 482 460 485 458 1440 435 484 458 1438 437 467 465 480 462 467 465 481 461 468 464 481 461 469 463 481 461 468 485 1424 430 1434 462 1418 457 1425 439 465 457 489 464 465 457 489 464 466 456 490 463 467 465 480 463 467 465 480 463 467 486 1422 432 471 461 485 457 472 460 485 457 472 460 485 457 472 460 486 456 488 434 497 456 473 459 486 456 488 465 1414 461 1393 482 1423 462 1419 435 469 463 482 460 469 463 482 460 1436 439 1425 439 480 483 +data: 5045 2158 335 1768 358 690 357 723 335 716 331 1771 355 694 364 686 361 720 327 723 335 1767 359 690 357 1775 362 1770 356 692 366 1767 359 1772 354 1777 360 1771 355 1776 361 687 360 690 357 1776 361 687 360 690 357 693 365 716 331 719 328 692 366 1767 359 1772 354 1777 360 1771 355 1776 361 687 360 1773 364 1767 360 689 358 692 366 685 362 688 359 721 326 724 334 717 330 720 327 723 335 715 332 718 329 721 326 1777 360 1771 355 1776 361 1770 356 692 366 715 332 718 329 721 326 29460 5042 2161 332 1770 356 692 366 685 362 688 359 1774 363 685 362 688 359 721 326 694 364 1769 357 691 367 1767 360 1771 355 693 365 1769 358 1773 364 1768 359 1772 365 1766 361 688 359 691 367 1767 360 689 358 692 366 684 363 717 330 720 327 693 365 686 361 689 358 722 336 684 363 1770 357 1774 363 686 361 689 358 1774 363 686 361 1771 356 1776 361 1770 357 692 366 685 362 688 359 690 357 1776 361 687 360 690 357 1776 361 688 359 691 356 694 364 716 331 689 358 1775 362 686 361 689 358 692 366 685 362 688 359 691 356 724 334 716 331 689 358 722 336 685 362 688 359 721 326 693 365 716 331 689 358 692 366 684 363 718 329 690 357 693 365 716 331 689 358 722 336 1767 360 689 358 1774 363 686 361 1771 356 693 365 686 361 689 358 722 336 684 363 717 330 720 327 1776 361 687 360 690 357 693 365 716 331 1771 355 693 365 686 361 1772 355 1776 361 688 359 1773 364 1768 359 # -name: POWER +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 6149 7347 601 535 573 560 602 505 602 480 597 509 600 534 599 487 593 541 591 568 569 539 568 490 594 539 570 513 568 540 570 566 570 540 568 543 594 540 569 566 543 515 594 540 569 514 567 542 570 514 568 543 594 540 569 490 592 542 570 514 568 541 570 541 542 541 569 567 570 515 567 542 570 515 567 542 570 568 568 516 570 568 570 542 568 542 570 515 569 542 570 568 568 517 569 541 569 517 569 568 570 515 568 570 569 569 543 542 569 569 569 516 569 542 570 543 568 1640 570 516 568 543 570 569 543 1613 569 516 568 1613 570 569 543 570 569 542 543 543 569 543 542 544 569 516 569 544 570 543 570 570 570 543 543 544 569 1615 569 571 569 570 568 519 569 1615 569 544 569 1615 568 572 569 571 542 1642 569 571 568 1617 569 1642 542 1642 569 1589 568 545 569 1590 569 518 568 1617 569 545 568 7372 568 +data: 5038 2165 328 1772 365 686 361 689 358 692 366 1765 362 719 328 692 366 684 363 717 330 1771 366 684 363 1768 359 1774 363 686 361 1771 355 1776 361 1770 357 1775 362 1769 358 691 356 694 364 1767 360 691 356 694 364 686 361 689 358 692 366 685 362 1769 358 1775 362 1769 358 1774 363 1768 359 690 357 1776 361 1770 357 692 366 684 363 687 360 690 357 693 365 686 361 689 358 692 366 684 363 687 360 690 357 693 365 1766 361 1773 364 1767 360 1772 355 694 364 686 361 689 358 692 366 25151 319 3980 5041 2131 362 1769 358 693 365 686 361 689 358 1772 365 686 361 689 358 692 366 684 363 1768 359 692 366 1765 361 1772 354 694 364 1769 358 1774 363 1768 359 1773 364 1767 359 719 328 692 366 1796 331 719 328 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 685 362 1768 359 1775 362 686 361 689 358 1773 364 686 361 1770 357 1777 360 1771 355 693 365 686 361 689 358 1772 365 1769 358 690 357 694 364 1767 360 691 356 694 364 686 361 689 358 723 335 1766 361 690 357 693 365 685 362 688 359 691 356 694 364 687 360 690 357 693 365 685 362 688 359 691 356 694 364 687 360 690 357 693 365 685 362 688 359 691 367 684 363 687 360 1771 366 684 363 687 360 690 357 693 365 1767 360 690 357 1804 333 687 360 690 357 693 365 686 361 689 358 692 366 685 362 1768 359 692 366 685 362 688 359 690 357 1774 363 688 359 691 356 1774 363 1770 356 1775 362 1769 358 691 356 # -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 6145 7375 572 534 598 535 574 532 576 507 598 507 601 508 599 484 595 565 569 567 568 541 566 541 567 543 567 513 569 540 569 568 568 513 569 567 569 541 568 513 568 568 569 542 568 540 568 543 568 569 567 541 568 543 568 542 541 541 569 542 567 515 569 542 568 514 568 572 567 570 567 515 569 571 567 514 569 544 567 569 568 542 568 1641 566 543 541 595 568 546 567 515 568 573 566 571 566 517 568 572 567 515 568 571 542 543 568 571 567 569 541 519 568 569 516 570 569 1639 541 518 568 570 515 544 568 1666 542 518 568 1666 542 543 568 571 542 516 568 571 542 517 567 598 542 517 568 572 542 544 567 572 542 517 569 571 542 1615 568 1669 542 544 568 572 542 1615 568 599 542 1615 567 572 542 518 569 1642 515 571 542 1615 569 598 542 518 569 598 543 1670 514 1644 542 1616 567 1670 542 545 568 7374 567 -# High -name: TEMP+ -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 6143 7350 600 533 572 507 573 532 575 508 597 507 600 535 572 510 569 539 569 593 542 541 566 540 568 569 541 513 569 540 568 542 567 513 568 570 567 594 542 569 540 541 568 567 542 513 568 571 567 544 564 542 567 569 542 514 569 568 568 568 542 514 567 570 542 514 568 569 569 568 542 514 570 568 542 514 568 570 542 595 515 542 568 1664 542 514 568 1639 542 595 515 569 542 595 543 542 568 597 542 596 542 542 568 597 543 596 540 518 569 596 542 542 568 571 542 1612 568 1640 541 516 568 571 542 596 515 1640 542 516 568 1641 542 596 516 570 542 516 569 571 542 517 568 571 542 516 569 598 543 597 515 571 542 517 568 571 543 1614 568 1642 542 517 569 571 542 1615 569 598 542 1615 568 571 542 544 569 1669 542 518 568 1668 542 1619 565 571 540 1643 543 1668 516 1643 541 1616 567 1670 542 545 568 7371 568 -# Low -name: TEMP- +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 6144 7375 572 534 572 533 574 559 575 507 598 507 600 508 598 484 595 539 568 567 568 513 568 540 568 541 567 513 567 542 568 541 541 540 568 568 568 514 593 515 569 541 568 540 568 543 567 542 567 515 568 569 567 514 569 567 569 542 568 514 568 569 569 542 567 515 569 569 568 515 567 543 567 542 567 516 569 543 567 515 568 543 568 1610 568 569 542 1612 540 542 568 544 566 516 568 596 542 516 567 572 567 596 541 517 568 569 542 543 567 597 542 597 540 518 568 1667 541 1587 567 570 541 544 567 598 541 1587 567 1641 540 1614 567 598 540 598 541 519 566 571 541 519 567 598 541 518 567 572 541 545 566 573 541 519 566 573 541 1617 565 1670 541 545 541 572 541 1642 541 599 541 1642 540 600 541 571 542 1671 539 545 541 1671 540 1617 566 600 540 1642 541 1643 541 1642 540 1644 540 545 541 1643 514 7370 566 +data: 301 132136 5036 2167 337 1766 361 689 358 692 366 684 363 1770 357 692 366 684 363 718 329 690 357 1776 361 687 360 1773 364 1767 360 689 358 1775 362 1769 357 1774 363 1768 359 1773 364 684 363 718 329 1773 364 684 363 718 329 691 356 694 364 716 331 719 328 1775 362 1769 358 1774 363 1768 359 1772 365 714 333 1770 357 1774 363 716 331 719 328 722 336 715 332 718 329 721 326 724 334 716 331 719 328 722 336 715 332 718 329 1773 364 1767 360 1772 354 1777 360 719 328 721 326 725 333 717 330 29455 5036 2139 354 1777 360 688 359 691 367 714 333 1770 356 692 366 684 363 687 360 690 357 1776 361 688 359 1773 364 1768 359 689 358 1775 362 1769 357 1774 363 1768 359 1773 364 684 363 687 360 1773 364 685 362 688 359 691 356 694 364 686 361 689 358 692 366 685 362 688 359 691 356 1777 360 1771 355 693 365 685 362 1771 355 693 365 1768 359 1773 364 1767 360 689 358 692 366 685 362 1771 355 1775 362 687 360 690 357 1775 362 687 360 690 357 693 365 716 331 689 358 1774 363 686 361 689 358 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 685 362 688 359 691 356 694 364 686 361 689 358 692 366 685 362 1771 355 693 365 1768 358 1773 364 684 363 687 360 690 357 693 365 1768 359 690 357 1776 361 688 359 691 356 694 364 686 361 689 358 692 366 685 362 1770 356 693 365 685 362 688 359 691 356 1777 360 1771 355 693 365 686 361 689 358 692 366 685 362 1770 356 # -name: TIMER +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 6199 7295 628 530 604 504 601 480 573 534 600 482 596 537 570 538 595 541 593 540 568 541 569 567 568 566 568 518 590 1636 569 540 568 1582 566 569 569 540 568 514 569 541 569 567 542 541 569 567 570 514 567 569 568 541 568 515 568 541 569 1610 568 541 569 541 568 516 568 1636 569 515 567 542 569 515 568 542 569 541 568 516 569 541 570 1611 567 543 569 568 568 517 569 1637 569 516 568 542 569 542 568 569 570 569 569 542 568 543 570 516 567 544 569 543 568 543 570 1639 542 1639 568 542 568 518 568 542 569 1588 569 1639 543 1613 569 570 568 517 569 543 543 543 569 570 569 544 569 543 570 517 569 570 569 517 568 572 569 544 568 1642 569 1615 567 571 569 517 569 1642 569 518 567 1616 569 517 569 544 569 1616 568 571 569 1616 568 571 569 1616 568 571 569 1616 568 1642 569 1616 568 1642 568 545 569 7371 568 +data: 5043 2132 361 1770 356 723 335 715 332 718 329 1774 363 715 332 719 328 722 336 714 333 1770 356 722 336 1767 360 1772 354 724 334 1769 357 1774 363 1768 358 1773 364 1767 359 720 327 723 335 1768 359 720 327 723 335 716 331 719 328 722 336 714 333 1770 356 1774 363 1769 357 1773 364 1767 360 720 327 1775 362 1769 357 721 326 725 333 717 330 720 327 723 335 716 331 719 328 722 336 714 333 717 330 720 327 723 335 1768 359 1773 364 1767 360 1772 354 724 334 717 330 720 327 723 335 29451 5041 2134 359 1772 354 724 334 717 330 720 327 1775 362 717 330 720 327 723 335 715 332 1771 355 723 335 1768 358 1773 364 715 332 1770 357 1775 362 1769 357 1774 363 1768 359 720 327 723 335 1768 359 720 327 724 334 716 331 719 328 722 336 715 332 718 329 720 327 723 335 716 331 1771 355 1776 361 718 329 721 326 1776 361 718 329 1773 364 1767 360 720 327 723 335 715 332 718 329 1774 363 1768 359 720 327 723 335 1768 358 721 326 724 334 716 331 719 328 722 336 1767 360 719 328 722 336 715 332 718 329 721 326 724 334 717 330 720 327 723 335 715 332 719 328 722 325 725 333 717 330 720 327 723 335 716 331 719 328 1774 363 716 331 1771 355 1776 361 718 329 721 326 724 334 717 330 1772 365 714 333 1770 356 722 336 715 332 718 329 721 326 724 334 717 330 719 328 1775 362 717 330 720 327 723 335 715 332 718 329 1774 363 715 332 718 329 721 326 725 333 717 330 1772 365 # -name: POWER +# Model: Dyson Purifier Hot+Cool +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 1299 412 1270 412 426 1225 1299 412 1244 438 399 1279 400 1254 451 1253 426 1253 426 1253 426 1254 1268 7130 1266 416 1266 416 421 1258 1267 416 1267 416 422 1258 421 1258 422 1258 421 1259 421 1258 422 1258 1266 7132 1266 417 1266 417 421 1259 1266 417 1266 417 421 1259 421 1259 421 1259 421 1259 421 1259 421 1259 1266 7133 1265 417 1266 417 421 1259 1266 418 1266 417 422 1259 421 1260 420 1259 421 1259 421 1259 420 1259 1266 7133 1265 418 1266 418 421 1260 1265 418 1266 418 421 1260 420 1260 420 1260 420 1260 420 1260 420 1260 1266 7135 1265 418 1266 419 420 1260 1266 419 1266 419 420 1261 420 1261 420 1261 420 1261 420 1261 420 1261 1265 7137 1264 420 1265 420 419 1262 1266 420 1265 420 420 1262 420 1262 419 1262 420 1262 419 1262 419 1262 1265 7139 1264 421 1265 421 419 1263 1265 421 1265 421 418 1264 418 1264 418 1263 419 1264 417 1264 418 1264 1264 7142 1263 423 1263 422 418 1288 1241 446 1240 446 394 1288 394 1289 393 1288 394 1288 394 1288 394 1288 1241 7168 1240 446 1241 446 394 1289 1241 447 1241 447 394 1289 394 1289 394 1289 394 1289 394 1289 394 1289 1241 7171 1239 447 1240 447 393 1290 1240 447 1241 447 393 1290 393 1290 393 1290 393 1290 393 1290 393 1290 1241 7174 1239 447 1241 448 392 1291 1240 448 1241 448 393 1291 393 1292 392 1292 392 1291 393 1292 392 1291 1240 7177 1239 449 1240 449 392 1292 1240 449 1240 449 392 1293 392 1293 392 1292 392 1293 391 1293 392 1293 1239 7179 1239 450 1239 450 391 1294 1239 450 1240 451 391 1294 391 1294 391 1295 390 1294 391 1295 390 1294 1239 7184 1237 452 1238 475 367 1319 1215 476 1215 476 366 1320 366 1320 366 1320 365 1320 365 1320 366 1320 1215 7211 1213 476 1190 501 366 1321 1215 477 1214 477 365 1322 364 1321 365 1322 364 1321 365 1321 365 1322 1213 7214 1213 478 1213 478 364 1322 1189 503 1189 503 364 1323 339 1348 338 1348 364 1323 363 1324 362 1323 1213 7218 1187 528 1164 529 313 1374 1163 529 1164 529 313 1375 313 1375 312 1375 312 1374 313 1374 313 1375 1163 7271 1162 530 1163 530 312 1376 1163 531 1162 530 312 1377 311 1378 310 1402 285 1378 310 1402 285 1403 1136 7300 1136 557 1136 557 285 1404 1136 558 1136 559 283 1404 285 1431 257 1405 284 1431 257 1431 257 1431 1109 7330 1108 585 1109 586 256 1432 1109 586 1109 638 177 1486 222 1468 221 1468 221 1468 221 1467 221 1495 1055 7413 1028 666 1029 2500 885 +data: 2309 665 781 672 803 672 803 695 832 643 833 1355 804 694 836 640 781 695 804 1409 778 697 777 702 797 678 798 677 799 678 799 701 803 674 802 1412 801 674 801 674 801 674 802 674 801 51317 2284 670 775 1413 802 51252 2283 670 801 1412 775 51275 2258 673 798 1414 802 51248 2284 670 802 1412 774 51246 2259 695 775 1413 801 # -name: SWING +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 1333 359 1331 358 482 1200 1279 411 1279 411 430 1255 430 1256 1279 411 430 1257 428 1257 428 1258 452 7993 1276 390 1300 415 402 1285 1276 415 1276 416 425 1262 425 1262 1275 417 425 1262 425 1262 425 1262 424 8000 1274 417 1275 417 425 1262 1276 417 1276 417 425 1263 424 1263 1275 417 425 1263 424 1263 425 1263 424 8003 1274 417 1276 417 425 1263 1275 418 1276 417 425 1263 425 1263 1276 417 425 1263 425 1263 425 1263 425 8006 1275 418 1276 418 425 1264 1276 418 1276 418 425 1264 425 1264 1276 418 425 1264 425 1264 425 1264 424 8009 1276 418 1276 418 425 1265 1276 418 1277 419 424 1265 425 1265 1276 419 424 1265 424 1265 425 1265 424 8013 1275 419 1277 419 424 1266 1276 419 1277 419 425 1266 424 1266 1276 419 424 1266 424 1266 424 1266 424 8016 1276 419 1277 420 424 1267 1276 420 1277 420 424 1267 424 1267 1276 420 424 1267 424 1267 424 1267 424 8019 1276 420 1277 420 424 1267 1277 420 1277 421 423 1268 423 1268 1277 421 423 1268 424 1268 423 1268 423 8023 1275 421 1276 421 423 1268 1277 421 1277 421 424 1269 423 1269 1277 422 423 1269 423 1269 423 1269 423 8025 1276 422 1276 422 423 1270 1276 422 1277 422 423 1270 422 1270 1277 422 423 1271 422 1271 421 1271 422 8029 1275 423 1276 423 422 1271 1276 423 1276 447 398 1273 421 1273 1275 424 421 1296 397 1296 397 1296 397 8056 1252 447 1253 447 398 1296 1252 448 1253 448 398 1296 398 1296 1252 448 398 1297 397 1296 398 1296 398 8059 1252 448 1253 448 398 1297 1252 448 1253 448 398 1297 397 1297 1252 449 397 1298 397 1297 397 1297 397 8062 1252 449 1253 449 397 1298 1252 449 1253 449 397 1298 397 1298 1253 450 396 1298 397 1298 397 1298 397 8065 1252 449 1252 450 397 1299 1252 450 1253 450 396 1299 397 1299 1253 450 396 1299 397 1299 396 1299 396 8069 1251 450 1253 450 396 1300 1252 450 1253 451 396 1300 396 1300 1253 451 396 1301 396 1300 396 1301 395 8072 1251 451 1253 451 396 1301 1252 452 1252 452 395 1302 395 1302 1227 477 395 1302 395 1302 394 1302 395 8076 1251 452 1227 478 394 1302 1252 453 1227 478 370 1328 369 1328 1251 454 394 1304 369 1329 369 1329 369 8129 1201 503 1202 503 344 1353 1202 503 1203 503 345 1354 344 1354 1202 504 344 1354 345 1354 344 1354 344 8132 1201 503 1202 504 344 1354 1202 504 1202 504 344 1355 344 1355 1202 504 344 1355 344 1355 344 1355 344 8135 1201 504 1202 505 343 1355 1202 505 1202 505 343 1357 343 1357 1201 506 343 1358 342 1383 316 1383 316 8166 1173 533 1174 559 288 1412 1147 560 1148 561 287 1439 261 1440 1120 588 260 1441 259 1467 227 1474 225 +data: 2316 610 806 671 781 695 806 695 781 695 782 1405 782 694 808 694 780 693 808 1381 779 697 802 1412 776 1438 800 1437 776 1438 775 700 775 1412 776 700 801 701 775 700 776 1438 776 700 776 51695 2258 695 776 1437 776 51248 2258 672 798 1439 776 51240 2258 670 801 1436 776 # -name: TIMER +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 1275 413 1305 384 457 1226 1308 385 1329 385 430 1228 457 1228 457 1229 1304 411 429 1257 428 1258 427 7993 1275 416 1275 416 425 1262 1274 416 1275 417 425 1262 425 1262 425 1261 1276 416 426 1262 424 1262 425 7999 1274 417 1275 417 425 1262 1276 417 1276 417 425 1263 424 1262 425 1262 1276 417 425 1263 425 1263 424 8003 1274 417 1276 417 425 1263 1275 417 1277 417 425 1263 425 1263 425 1263 1276 418 425 1264 424 1263 425 8006 1276 418 1276 418 425 1263 1277 418 1277 418 425 1264 425 1264 425 1264 1276 418 425 1264 425 1264 425 8010 1276 418 1276 418 425 1264 1277 418 1277 418 425 1265 425 1265 424 1265 1276 418 425 1265 425 1265 425 8012 1276 418 1277 418 425 1265 1277 419 1277 419 425 1266 424 1266 424 1266 1277 419 425 1266 424 1266 424 8016 1276 419 1277 419 425 1266 1277 419 1278 419 425 1267 424 1266 425 1267 1277 420 424 1267 424 1267 424 8020 1275 420 1277 420 424 1267 1277 420 1277 420 424 1268 424 1268 423 1267 1277 420 424 1268 424 1268 424 8023 1276 420 1277 421 424 1268 1277 421 1277 421 424 1269 423 1269 423 1268 1278 421 423 1269 424 1269 423 8026 1276 421 1277 422 423 1269 1277 422 1277 422 423 1270 423 1270 423 1270 1276 422 423 1270 423 1271 422 8029 1276 423 1276 447 398 1272 1276 446 1254 447 399 1295 398 1272 422 1295 1252 447 398 1295 398 1295 398 8056 1252 447 1252 447 398 1296 1252 447 1253 447 399 1296 398 1296 398 1296 1253 448 398 1296 398 1296 398 8059 1252 447 1253 447 399 1296 1253 448 1253 448 398 1297 397 1297 398 1297 1253 448 398 1297 398 1297 397 8062 1252 448 1253 448 398 1297 1253 448 1254 448 398 1298 397 1298 397 1298 1253 449 397 1298 397 1298 397 8065 1252 449 1253 449 397 1298 1253 449 1254 449 398 1299 397 1299 397 1299 1253 449 398 1299 397 1299 397 8069 1252 450 1252 450 397 1299 1253 450 1254 450 397 1300 396 1300 396 1300 1252 450 397 1300 397 1300 396 8072 1252 450 1253 451 396 1300 1253 451 1253 451 396 1301 396 1301 396 1301 1253 451 396 1301 396 1301 396 8075 1251 452 1252 452 396 1301 1253 452 1253 452 395 1303 395 1303 394 1302 1254 453 395 1303 395 1303 395 8081 1250 477 1228 455 393 1304 1252 478 1227 478 370 1329 369 1329 369 1328 1228 478 370 1329 369 1329 369 8107 1227 478 1227 478 370 1329 1227 479 1227 479 369 1329 370 1329 370 1329 1227 479 369 1330 369 1330 369 8111 1225 479 1227 479 369 1330 1227 479 1228 480 368 1331 368 1331 368 1331 1227 480 368 1332 367 1332 367 8114 1225 480 1227 481 367 1332 1226 506 1201 507 342 1358 317 1383 342 1358 1200 507 317 1384 316 1384 316 8168 1174 532 1175 532 316 1384 1175 533 1175 533 315 1385 315 1385 315 1384 1175 533 315 1386 315 1385 315 8171 1174 534 1174 559 289 1387 1174 559 1149 560 289 1413 288 1412 289 1413 1148 560 289 1413 288 1413 288 8203 1147 561 1148 562 287 1414 1148 562 1147 588 260 1416 286 1441 260 1440 1122 588 260 1442 260 1442 260 8232 1120 589 1120 615 228 1474 1095 616 1094 642 182 1494 226 1476 226 1503 1067 643 181 3224 182 8314 1066 671 1039 2427 986 +data: 2342 612 781 695 805 668 810 666 810 665 811 1402 811 666 811 692 781 670 781 1432 781 696 778 1436 802 1412 802 1412 802 1413 801 1412 802 1412 801 1412 777 1411 776 1463 776 1412 800 1414 801 51041 2257 697 802 1411 777 51240 2283 671 776 1437 801 51209 2255 672 799 1412 801 # -name: POWER +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3110 1566 525 1084 497 356 471 1085 497 356 472 356 471 1085 497 356 470 357 474 1084 498 356 471 356 471 356 471 356 471 356 496 357 470 357 473 1061 520 357 470 1063 519 357 470 1064 518 1064 518 357 470 357 471 +data: 2317 637 832 644 830 669 805 670 805 672 803 1411 803 673 802 674 802 673 803 1411 803 674 801 1411 802 675 775 1415 800 701 774 1440 801 1412 775 702 799 1414 774 1413 801 701 801 675 800 51681 2257 695 803 1411 801 51226 2283 671 799 1412 803 51246 2257 696 803 1411 775 51255 2282 668 803 1410 802 51243 2258 695 802 1387 798 # -name: TIMER +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3128 1546 549 1032 549 356 471 1033 549 357 470 356 445 1085 496 356 471 357 498 1059 523 1059 522 1059 522 1061 520 356 470 357 470 357 470 357 474 1064 518 1065 517 357 470 357 471 357 470 357 470 1064 517 357 471 +data: 2315 618 853 643 832 644 834 641 833 643 833 1356 805 695 835 640 808 667 809 1404 808 668 806 1409 803 674 801 1412 802 1388 799 677 799 701 775 701 801 1389 799 677 799 676 800 1439 802 51426 2283 671 800 1412 802 51251 2258 697 801 1387 800 51248 2283 669 802 1411 802 51230 2258 696 799 1387 801 51225 2283 670 801 1411 801 51200 2280 695 775 1411 802 51227 2258 696 802 1411 775 51204 2281 669 801 1411 800 # -name: TEMP+ +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3107 1568 549 1034 524 356 471 1056 549 357 471 357 471 1031 525 356 471 358 473 1083 498 356 471 1083 498 356 494 357 471 357 469 357 470 358 472 1063 518 357 470 357 470 1064 518 1063 519 1064 517 357 470 357 471 +data: 2320 634 837 637 838 637 838 640 835 642 832 1378 836 645 826 670 809 667 808 1406 806 672 803 674 802 1412 802 1412 800 676 801 675 802 1412 802 674 802 1413 801 1412 801 1413 802 1412 802 50937 2285 671 801 1411 802 51225 2280 696 775 1412 801 51212 2283 671 775 1412 802 # -name: TEMP- +# Model: Daikin FTXM20M. +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3110 1567 551 1031 550 356 471 1032 550 356 471 356 445 1084 497 355 472 357 497 356 472 1058 523 1058 523 356 471 356 470 357 469 357 470 357 474 357 470 1063 519 357 470 1063 518 1063 519 1063 518 357 470 357 471 +data: 500 393 473 392 473 368 498 368 497 367 499 25050 3533 1662 502 1230 501 392 472 393 471 395 469 1263 467 400 465 401 465 401 465 401 465 1267 465 401 465 1268 464 1268 464 402 464 1268 464 1269 463 1269 463 1292 440 1269 463 404 462 426 439 1293 439 426 440 426 440 426 440 426 440 426 440 427 439 426 440 427 439 427 438 427 439 1294 438 427 439 1294 438 427 439 427 439 428 438 1294 438 1294 438 428 438 428 437 428 438 428 438 1294 438 428 438 428 438 429 437 429 437 429 436 429 437 429 437 429 437 429 436 429 437 430 436 1296 436 1296 436 1296 436 430 436 430 435 1297 435 1297 435 1298 434 35482 3500 1699 464 1268 464 402 463 402 463 403 463 1269 463 426 440 426 439 426 440 426 439 1293 439 426 440 1293 439 1293 439 427 439 1293 439 1293 439 1293 439 1293 439 1294 438 427 438 427 439 1294 438 427 439 428 438 428 438 428 438 427 438 428 438 428 437 428 438 428 437 428 438 428 438 1295 437 429 437 429 437 429 436 429 437 1296 436 429 437 429 436 429 437 430 436 430 436 430 435 430 436 430 435 431 435 431 435 431 435 455 410 456 409 1322 410 456 409 456 410 456 410 456 410 456 410 1323 409 457 409 457 409 1323 409 1323 409 457 409 35483 3500 1699 464 1268 464 402 464 402 463 403 463 1269 463 426 440 426 440 426 440 426 439 1293 439 426 439 1293 439 1293 439 427 439 1293 439 1293 439 1293 439 1294 438 1293 438 427 439 427 438 1294 438 428 438 427 438 428 438 428 438 428 438 428 437 428 438 428 438 428 438 428 438 428 438 428 438 429 437 429 437 429 437 429 437 429 437 429 437 429 437 429 437 430 436 1296 436 430 436 1297 435 430 436 430 436 431 435 431 435 456 410 456 410 456 410 456 409 1323 409 1322 410 456 410 456 409 457 409 457 409 457 409 457 409 457 408 457 409 1324 408 1324 408 1324 408 1324 408 458 408 1325 406 459 407 1351 356 1376 356 1376 356 1376 356 1377 355 510 355 510 356 511 355 511 354 511 355 537 328 537 329 538 328 538 327 538 328 539 327 565 300 566 300 1432 300 1433 298 593 272 594 271 621 245 621 244 622 243 # -name: POWER +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3087 1607 488 1064 517 335 492 1087 484 315 512 340 487 1091 490 336 491 338 489 1089 492 333 494 332 485 341 486 340 487 338 489 336 491 339 488 1090 491 334 493 1085 486 340 487 1091 490 1088 493 333 484 343 484 44227 178 +data: 500 368 498 369 497 367 499 366 499 367 499 25050 3533 1662 502 1230 501 392 472 393 471 395 469 1264 467 400 465 401 465 401 465 401 465 1267 465 401 465 1268 464 1268 464 402 464 1269 463 1269 463 1269 463 1292 440 1292 440 426 440 426 440 1293 439 426 440 426 439 426 440 426 440 427 439 427 438 427 439 427 439 427 439 427 439 1293 439 427 439 1294 438 427 439 427 439 428 437 1294 438 1294 438 428 437 428 438 428 437 429 437 1295 437 428 437 429 437 429 437 429 436 429 437 429 437 429 437 429 437 429 437 429 437 430 436 1296 436 1297 435 1297 435 431 435 455 410 1298 434 1322 410 1322 410 35482 3500 1700 464 1269 463 403 463 403 463 403 462 1292 440 426 440 426 440 426 440 426 439 1293 439 426 440 1293 439 1293 439 427 439 1293 439 1293 439 1293 439 1293 439 1293 439 427 439 427 439 1294 438 427 439 427 439 427 439 428 438 427 438 428 438 428 438 428 437 428 438 428 438 428 438 1295 437 429 437 429 436 429 437 429 437 1296 436 429 437 429 437 429 437 430 436 430 436 430 436 431 435 431 435 431 435 455 410 456 410 456 410 456 410 1322 410 456 410 456 410 456 409 457 409 456 409 1323 409 457 409 457 409 1323 409 1324 408 458 408 35483 3500 1700 464 1268 464 402 464 403 463 402 464 1292 440 426 440 426 440 426 439 426 440 1293 439 426 440 1293 439 1293 439 427 439 1293 439 1293 439 1293 438 1293 439 1293 439 427 439 427 438 1294 438 428 438 428 438 427 438 428 438 428 438 428 438 428 438 428 438 428 438 428 437 428 438 429 436 429 437 429 437 429 437 429 437 429 437 429 437 1296 436 430 435 430 436 1297 435 431 435 1297 435 431 435 456 409 456 410 456 409 456 410 456 410 456 410 456 410 1323 409 1323 409 457 409 457 409 457 408 457 409 457 409 458 408 458 407 458 408 1325 407 1326 405 1327 406 1351 381 485 356 1376 356 510 355 1377 355 1377 355 1377 355 1378 354 1378 354 512 354 512 354 538 327 538 328 538 328 539 326 565 300 566 300 566 299 567 299 593 272 621 244 596 270 1488 244 # -name: TIMER +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3092 1602 492 1059 512 341 486 1092 489 337 490 336 491 1087 494 332 485 344 493 1085 486 1093 488 1064 517 1061 520 333 494 332 484 341 486 343 484 1094 487 1091 490 336 491 335 492 334 493 333 484 1094 487 340 487 +data: 504 389 477 364 501 364 502 364 501 364 502 25048 3511 1684 505 1228 504 389 475 390 474 392 472 1260 470 396 469 396 470 396 469 397 469 1263 469 397 469 1263 469 1263 469 397 468 1263 469 1263 469 1264 468 1263 469 1264 468 397 468 398 468 1264 468 398 468 398 468 398 468 398 468 398 468 399 467 398 468 399 467 423 443 400 466 1289 443 423 443 1289 443 423 443 423 443 423 443 1289 443 1290 442 424 442 423 442 423 443 424 442 1290 442 424 442 423 443 424 442 424 441 424 442 424 441 424 442 424 442 424 441 424 442 424 442 1291 441 1291 441 1291 441 425 441 425 441 1291 441 1291 441 1291 441 35478 3505 1695 468 1264 468 398 467 398 468 398 468 1265 467 398 467 398 468 398 468 399 467 1265 467 399 467 1266 466 1266 466 423 443 1289 443 1290 442 1290 442 1290 442 1290 442 424 442 423 442 1290 442 423 443 424 442 424 442 424 442 424 441 424 442 424 442 424 441 424 442 424 442 424 442 1291 441 425 441 425 441 424 442 424 441 1291 441 425 441 425 440 425 441 425 441 425 441 425 441 425 441 425 440 425 441 425 441 425 440 426 440 426 440 1292 440 426 440 426 440 426 440 426 439 427 439 1293 439 427 439 427 438 1294 438 1294 438 428 437 35479 3504 1695 468 1264 468 398 468 398 468 398 467 1265 467 399 467 399 467 399 466 399 467 1265 467 399 467 1289 443 1290 442 423 443 1290 442 1290 442 1290 442 1290 442 1290 442 423 443 424 442 1290 442 424 442 424 442 424 441 424 442 424 442 424 442 424 442 424 442 424 442 424 442 424 442 424 442 425 441 425 440 425 441 425 441 425 441 425 441 1291 441 425 441 425 441 1292 440 1292 440 1292 440 426 440 425 441 426 440 426 440 1292 440 426 440 426 440 1292 440 426 440 426 440 426 440 427 439 426 440 426 440 427 438 427 439 427 439 427 439 1294 438 1295 437 1294 438 1319 413 453 413 1319 413 453 412 1320 412 1319 413 1319 413 1319 413 1320 412 453 412 453 413 453 412 454 412 454 411 454 412 454 412 454 412 454 412 454 412 455 411 454 412 455 411 1321 411 1321 411 456 409 456 410 481 384 482 384 482 383 482 359 506 360 507 359 507 359 507 358 1374 358 1374 358 508 357 508 358 509 357 534 332 534 332 534 332 534 332 535 331 535 331 535 331 535 330 536 330 536 330 562 303 563 303 563 302 564 302 1430 302 565 301 564 302 591 274 619 247 619 247 1512 219 1539 190 # -name: POWER +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 8838 3941 624 1427 514 500 515 497 541 473 540 1487 540 474 539 474 538 476 512 1538 514 1516 544 466 514 497 514 501 514 499 514 500 513 499 513 501 487 525 514 499 512 502 487 526 512 1517 542 470 487 1539 513 499 512 503 513 499 512 1513 512 +data: 502 390 476 365 501 365 500 365 500 365 501 25049 3535 1660 504 1229 502 390 474 391 473 393 471 1261 469 397 468 398 468 398 468 398 468 1264 468 398 468 1265 467 1265 467 399 467 1265 467 1265 467 1265 467 1266 466 1265 467 400 466 401 465 1266 466 401 465 401 465 401 465 424 442 424 441 424 442 424 441 424 442 424 442 424 442 1291 441 424 442 1291 441 424 442 425 440 425 441 1291 441 1291 441 425 441 425 441 425 440 425 441 1292 440 425 441 425 441 425 441 425 441 425 441 425 441 425 441 425 440 426 440 426 440 426 440 1292 440 1293 439 1293 439 426 439 427 439 1293 439 1293 439 1293 439 35480 3503 1696 467 1265 467 399 467 398 468 399 466 1266 466 399 467 399 467 399 467 399 467 1266 466 400 466 1267 465 1290 442 424 442 1290 442 1290 442 1290 442 1290 441 1291 441 424 442 424 442 1291 441 424 442 424 442 425 441 424 442 424 442 425 441 425 440 425 441 425 441 425 441 425 441 1292 440 425 441 425 441 425 440 426 440 1292 440 426 440 426 439 426 440 426 439 426 440 426 440 426 440 426 440 426 440 427 438 427 439 427 439 427 439 1293 439 427 438 427 439 428 438 428 438 428 438 1294 438 428 438 428 438 1295 437 1320 412 453 413 35480 3503 1696 467 1265 467 399 467 399 467 399 467 1266 466 399 467 399 467 400 466 400 466 1290 442 424 442 1289 443 1290 442 424 442 1291 441 1290 442 1290 442 1291 441 1291 441 424 442 424 442 1291 441 425 441 425 441 425 441 425 441 425 441 425 441 425 441 425 441 425 440 425 441 425 441 425 441 425 441 425 441 425 440 426 440 426 440 426 440 1292 440 426 440 426 440 1292 440 1293 439 1293 439 427 439 426 439 427 439 1293 439 1293 439 1293 439 427 438 1294 438 427 439 427 438 428 438 427 438 453 413 429 437 429 437 429 437 453 412 454 412 1320 412 1320 412 1320 412 1320 412 454 412 1321 411 454 412 1320 412 1321 411 1321 411 1321 411 1321 411 455 410 455 411 455 411 455 411 455 411 456 410 456 410 457 409 481 384 457 409 482 383 483 383 483 358 1374 358 1374 358 508 357 508 358 509 357 509 357 509 357 509 357 510 356 535 330 536 330 536 330 1402 330 1403 329 537 329 536 329 563 302 564 302 564 302 565 300 565 300 592 273 619 246 620 246 619 246 620 245 674 188 # -name: POWER +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 8364 4223 621 1958 1115 1478 593 1986 1082 1566 1072 1497 576 2003 1069 1513 1069 1541 1070 1505 1069 1505 1069 1497 1070 1550 1069 1530 1045 1522 551 2028 1045 1582 1044 1530 1044 1522 1045 1530 1044 1566 1045 1530 1045 1530 550 2021 550 2064 1044 1530 1044 1523 1043 1531 1044 1566 1045 1531 1043 1531 1044 1523 1044 1575 1043 1531 1044 1523 1044 1531 1044 1567 1044 1531 1043 1531 1044 1524 1043 1575 1043 1532 1043 1524 1043 1532 1043 1568 1042 1532 1043 1532 1043 1524 1043 1576 1042 1532 1043 1524 1043 1532 1042 1569 1042 1533 1016 1558 1042 1525 1042 1577 1016 1558 523 2048 1042 1525 547 2071 1041 1533 523 2049 522 2049 522 +data: 504 365 500 365 500 365 500 365 501 365 501 25049 3535 1660 504 1229 502 390 474 391 473 393 471 1261 470 397 468 397 469 398 468 398 468 1264 468 398 467 1265 467 1265 467 398 468 1265 467 1265 467 1265 467 1266 466 1266 466 399 466 399 467 1266 466 400 466 400 466 400 465 400 466 424 442 424 442 424 442 424 441 424 442 424 442 1291 441 424 442 1291 441 424 442 424 442 425 441 1291 441 1291 441 425 440 425 441 425 441 425 440 1292 440 425 441 425 440 425 441 425 441 425 441 425 441 425 441 426 440 426 440 426 440 426 439 1293 439 1293 439 1293 439 426 440 427 439 1293 439 1293 439 1293 439 35480 3503 1696 468 1264 468 398 468 398 468 398 467 1265 467 399 467 399 467 399 467 399 467 1267 465 400 466 1266 466 1267 465 424 441 1290 442 1290 442 1290 442 1290 442 1291 441 424 442 424 442 1291 441 424 442 424 442 424 442 424 442 424 441 425 441 425 441 425 441 425 441 425 441 425 441 1292 440 425 441 425 441 425 441 425 441 1292 440 426 440 426 439 426 440 426 440 426 439 426 440 426 440 426 439 427 439 426 440 427 439 427 439 427 438 1293 439 427 439 427 439 427 439 428 438 428 438 1295 437 428 438 429 436 1296 436 1296 436 453 412 35481 3502 1696 467 1265 467 399 466 399 467 399 467 1265 467 399 467 399 467 399 466 400 466 1266 466 400 466 1290 442 1267 465 424 442 1290 442 1290 442 1290 442 1290 442 1291 441 424 442 424 441 1291 441 424 442 424 442 424 442 424 441 425 441 425 441 425 441 425 441 425 441 425 441 425 441 425 441 425 440 426 440 425 441 425 441 425 441 426 440 1292 440 426 440 426 440 1292 440 426 440 426 439 1293 439 427 439 427 439 427 439 1293 439 1294 438 1294 438 1293 439 427 439 428 438 428 438 428 438 429 436 429 437 429 437 453 412 453 413 453 412 1320 412 1320 412 1320 412 1320 412 454 412 1320 412 454 412 1321 411 1321 411 1321 411 1321 411 1322 410 455 411 455 411 456 410 456 410 455 410 456 410 456 409 481 384 458 408 482 383 482 384 483 358 508 358 1374 358 1374 358 508 357 509 357 509 357 510 355 535 330 536 330 536 330 536 329 536 330 536 330 1403 329 1430 301 564 302 564 302 564 301 591 274 566 301 592 273 619 247 619 247 620 245 647 219 # -name: MODE -type: raw -frequency: 38000 -duty_cycle: 0.330000 -data: 8362 4223 595 1983 1116 1480 592 1987 1081 1567 1070 1524 550 2029 1043 1540 1042 1568 1043 1532 549 2030 1042 1540 1042 1568 1042 1532 1042 1532 549 2022 549 2065 1043 1528 1043 1532 1043 1524 1042 1576 1042 1532 1042 1525 548 2030 549 2082 1042 1524 1042 1533 1042 1525 1042 1576 1042 1533 1042 1525 1041 1533 1042 1569 1042 1533 1042 1533 1042 1525 1041 1577 1041 1533 1042 1525 1041 1534 1041 1569 1042 1533 1041 1534 1040 1526 1041 1578 1041 1534 1041 1526 1040 1534 1041 1570 1041 1534 1015 1560 1015 1552 1015 1604 1040 1535 1040 1527 1039 1535 1014 1597 1013 1561 1014 1561 1013 1554 519 2129 987 1554 544 2036 518 2093 987 -# POWER_OFF -name: POWER +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4453 4313 586 1554 585 483 586 1554 587 1552 587 483 587 484 586 1552 587 482 588 483 586 1553 586 483 587 483 586 1554 586 1553 585 484 587 1553 586 484 587 1553 586 1554 586 1553 586 1554 586 483 586 1553 586 1553 586 1555 585 483 586 482 588 483 585 484 585 1554 586 483 587 484 585 1553 587 1554 584 1554 585 484 586 484 586 483 586 483 586 484 586 482 588 483 584 484 586 1553 585 1555 584 1555 586 1553 586 1554 585 5129 4428 4312 585 1553 586 483 586 1555 584 1553 586 484 583 486 584 1555 585 484 585 483 586 1554 585 483 586 484 585 1554 585 1554 585 484 585 1554 585 484 584 1554 585 1554 584 1554 585 1554 586 483 585 1554 585 1555 584 1553 584 484 586 483 586 483 585 484 586 1554 583 484 586 483 585 1553 585 1553 585 1553 585 484 584 485 585 485 584 484 585 484 585 485 584 484 585 483 586 1554 585 1553 585 1554 584 1553 585 1553 585 -# TEMP_17 -name: TEMP- +data: 503 365 500 364 501 366 499 365 500 364 502 25049 3535 1660 504 1228 503 390 474 391 473 393 471 1261 469 397 468 397 469 397 469 397 469 1264 468 398 468 1264 468 1264 468 398 468 1265 467 1265 467 1265 467 1265 467 1265 467 399 467 399 467 1266 466 399 467 400 466 400 466 400 466 423 443 423 443 401 465 423 442 424 442 424 442 1290 442 424 442 1290 442 424 442 424 441 424 442 1290 442 1291 441 425 441 424 442 425 441 425 441 1291 441 425 440 425 441 425 441 425 441 425 441 425 440 425 441 425 441 425 441 425 441 426 440 1292 440 1292 440 1292 440 426 440 426 440 1292 440 1293 439 1293 439 35480 3503 1696 467 1264 468 398 468 398 467 398 468 1265 467 398 467 399 467 399 466 399 467 1265 467 399 467 1266 466 1267 465 400 466 1290 442 1290 442 1290 442 1290 442 1290 442 424 442 424 442 1290 442 424 441 424 442 424 442 424 442 424 442 424 441 424 442 425 441 424 442 425 441 425 441 1291 441 425 441 425 441 425 441 425 440 1292 440 425 441 425 440 426 440 426 440 426 440 426 440 426 440 426 440 426 440 426 439 427 439 426 440 426 440 1293 439 427 439 427 439 427 438 427 439 428 438 1294 438 428 437 428 438 1295 437 1319 413 453 413 35480 3503 1696 468 1265 467 398 468 398 468 398 468 1265 467 398 468 399 466 399 467 399 467 1266 466 399 466 1267 465 1290 442 401 465 1290 442 1290 442 1290 442 1290 442 1290 442 424 442 424 441 1291 441 424 442 424 442 424 442 424 442 424 441 424 442 425 441 424 442 424 441 425 441 425 441 425 440 425 441 425 441 425 441 425 441 425 441 425 441 1292 440 426 440 426 440 1292 440 426 440 426 440 1293 439 426 440 426 440 1293 439 1293 439 1293 439 427 439 1294 438 427 438 427 439 427 438 428 438 428 438 428 438 428 438 453 413 429 437 453 413 1319 413 1320 412 1320 412 1320 412 454 412 1320 412 454 412 1321 411 1321 411 1321 411 1321 411 1321 411 455 410 455 411 455 411 455 410 456 410 456 410 456 410 481 384 481 385 482 383 482 383 483 358 507 359 1374 358 1374 358 508 358 508 358 508 358 509 357 509 357 535 331 535 331 535 330 535 330 536 330 1403 329 1403 329 563 302 564 301 564 302 564 301 565 301 591 274 619 246 593 273 620 245 620 245 621 245 673 189 +# +# Model: Mitsubishi SRK63HE. +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4459 4311 588 1552 588 482 588 1552 589 1552 588 481 589 481 589 1552 588 482 587 483 587 1553 587 482 588 481 589 1553 588 1552 588 482 587 1554 586 483 587 1553 587 482 588 1552 588 1553 587 1553 588 1552 588 1552 588 1553 587 482 587 1553 588 481 589 482 587 482 587 483 587 482 587 483 588 482 587 483 587 482 587 483 587 482 587 483 586 483 587 1553 587 1553 587 1553 587 1554 586 1553 588 1553 587 1554 587 1553 587 5130 4431 4314 586 1553 588 482 588 1553 586 1554 587 483 587 483 587 1553 587 483 587 483 586 1554 587 483 586 483 587 1553 587 1553 587 482 588 1553 587 482 587 1553 587 483 587 1553 587 1554 586 1554 586 1554 586 1553 587 1554 587 482 588 1553 587 483 586 484 586 483 586 483 587 483 587 483 587 483 586 483 586 483 587 483 586 484 586 483 587 483 586 1554 586 1554 586 1554 586 1554 586 1554 586 1554 586 1555 586 1554 586 -# TEMP_30 -name: TEMP+ +data: 3232 1526 463 334 462 1127 464 334 460 334 461 1128 463 336 459 1128 464 359 436 359 436 1133 458 1156 434 1157 434 362 433 1159 432 363 432 1159 432 1159 432 1159 432 363 433 363 432 363 432 363 432 1160 431 1160 432 363 432 1160 431 1160 431 363 432 364 432 1160 431 363 432 363 432 1160 432 363 432 364 431 1160 431 1160 431 364 431 1160 431 1160 431 1160 431 1160 431 1160 431 1160 431 364 431 1160 431 1160 431 1160 431 364 432 364 432 364 431 364 431 1160 432 364 432 364 431 364 431 1160 431 1160 431 1160 431 364 431 1161 430 1161 430 1160 431 1161 430 364 432 364 431 365 431 1161 430 364 431 365 431 364 431 365 430 365 431 1161 430 1161 430 1161 430 365 430 1161 430 365 430 365 430 1161 430 365 430 365 431 365 430 1161 430 365 430 1161 430 1161 430 +# +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 4489 4254 647 1493 645 425 619 1521 619 1521 619 452 617 453 616 1526 613 478 591 479 590 1551 589 481 588 481 589 1552 588 1552 588 482 588 1552 588 482 588 1552 588 482 588 1552 588 1553 587 1553 587 1552 588 1553 588 1552 588 482 588 1553 587 482 588 482 588 482 588 482 588 482 588 1552 588 482 588 1552 588 1552 588 482 588 482 588 482 588 482 588 482 588 1553 587 482 588 482 588 1553 587 1553 587 1553 587 1553 587 5130 4432 4313 587 1553 587 483 587 1553 587 1553 587 483 587 483 587 1553 587 483 587 483 587 1553 587 483 587 483 587 1553 587 1554 586 483 586 1553 587 483 587 1553 587 483 587 1553 587 1553 587 1554 586 1554 586 1554 586 1554 587 483 587 1553 587 483 587 483 587 483 587 483 587 483 587 1554 586 483 587 1554 586 1554 586 483 587 483 587 483 587 483 586 484 586 1554 586 484 586 483 587 1554 586 1554 586 1554 586 1554 586 -# POWER_OFF -name: POWER +data: 3229 1528 461 335 461 1128 463 334 461 335 460 1129 463 337 458 1129 463 359 436 360 434 1156 434 1157 433 1159 432 364 431 1161 430 364 431 1161 430 1161 430 1160 431 364 431 364 431 365 430 365 430 1161 430 1161 430 365 430 1161 430 1161 431 365 430 365 431 1161 430 365 430 365 430 1161 430 365 430 365 431 1161 430 1161 430 365 431 1161 430 1161 430 1161 430 1161 430 1161 431 1161 430 365 430 1161 430 1161 430 1161 431 365 430 365 430 365 430 365 430 1162 430 365 430 365 430 365 431 1162 429 1162 429 1162 430 365 430 1162 429 1162 429 1162 429 1162 429 366 430 366 429 366 430 1162 429 366 429 366 430 366 429 366 429 1162 429 366 429 1163 428 366 429 1162 429 366 429 366 429 1162 429 366 430 1162 429 366 429 1163 429 366 430 1163 428 1163 428 367 428 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 479 397 30131 50087 3427 1674 447 1253 447 483 446 483 446 483 420 483 447 483 447 483 447 483 447 483 420 510 419 483 447 483 446 1254 446 483 420 510 419 484 446 483 447 484 445 483 446 484 419 1255 445 1254 446 484 445 484 445 484 419 484 446 484 446 484 445 484 446 484 445 1255 418 484 446 1255 445 1255 418 1255 445 1255 445 1254 446 1255 419 484 446 1255 445 1255 418 511 418 485 445 484 445 484 446 484 445 485 418 511 418 484 446 1255 445 1255 418 1255 445 1255 444 1256 444 1256 417 1256 445 1255 443 487 418 511 419 485 444 1255 445 485 445 485 420 509 418 485 445 1255 445 485 444 485 445 1256 417 512 418 485 444 485 445 1256 417 1256 444 485 444 485 420 509 444 486 418 511 418 485 445 485 444 1256 444 486 418 512 417 485 420 509 445 485 445 485 445 485 417 1256 444 486 444 485 445 1256 417 1256 443 486 444 485 444 486 444 485 444 485 418 485 444 485 444 485 444 486 443 486 417 1257 420 509 420 510 444 485 444 486 444 485 418 485 445 485 443 487 444 1256 444 1256 417 485 442 487 420 510 444 485 444 486 417 1256 420 1280 443 1257 417 512 393 510 444 486 442 487 443 486 419 510 417 513 419 484 419 510 444 486 419 510 419 510 393 537 415 488 420 510 418 510 419 510 419 510 392 537 392 511 445 484 419 511 418 511 418 511 392 538 391 511 419 511 419 511 418 511 418 511 391 511 419 512 418 511 418 511 419 511 418 512 391 512 418 512 417 512 417 512 418 512 417 512 391 512 418 512 417 512 417 512 417 512 391 539 390 513 416 513 417 512 417 513 417 537 366 564 365 514 416 537 392 537 392 538 392 538 365 564 365 538 392 538 392 538 391 538 391 538 365 564 365 538 392 538 391 1309 391 1308 365 538 391 538 392 538 391 538 392 538 365 565 364 538 392 538 391 539 391 1309 364 1309 391 538 391 539 391 538 391 538 391 539 364 538 392 539 390 539 391 539 390 539 364 565 364 539 391 539 390 1309 391 539 390 1309 364 539 391 539 390 539 391 539 498 +data: 3230 1526 463 335 460 1128 464 333 461 335 460 1128 463 337 458 1128 463 359 436 359 436 1155 435 1157 433 1158 432 363 432 1160 431 364 431 1161 430 1160 431 1160 431 364 431 364 431 364 431 364 431 1161 430 1161 430 364 431 1161 430 1160 431 365 430 364 431 1161 431 364 431 364 431 1161 430 365 430 365 431 1161 430 1161 431 364 431 1161 430 1161 430 1161 430 1161 431 1161 430 1161 431 365 430 1161 431 1161 430 1162 430 365 430 365 430 365 431 365 430 1161 430 365 430 365 430 365 431 1161 430 1162 430 1162 429 365 430 1162 429 1162 429 1162 429 1162 429 366 429 366 430 366 430 1162 429 366 430 366 429 366 429 366 430 366 429 1162 429 1163 429 366 429 366 429 1163 428 1163 428 1163 429 1163 428 366 429 366 430 1163 428 1163 428 367 428 367 429 366 429 # -name: MODE +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 479 396 30132 50085 3427 1674 446 1254 446 483 446 483 446 483 420 483 446 483 447 483 446 483 446 483 420 510 419 483 446 483 446 1254 446 483 420 510 419 483 446 484 446 483 446 484 446 483 420 1254 446 1254 446 484 445 484 446 483 420 484 446 484 445 484 446 484 445 484 419 1255 445 484 445 1254 446 1255 418 1255 446 1255 445 1255 445 1254 419 484 446 1255 445 1255 418 511 419 484 446 484 445 484 445 484 445 485 418 511 418 484 446 1255 445 1255 418 1255 445 1255 445 1255 446 1255 418 1256 445 1255 445 484 419 511 418 485 444 1256 444 485 445 484 445 485 417 485 445 1256 444 485 444 485 445 1256 417 485 445 485 444 486 443 1256 417 1283 417 1256 444 485 420 509 445 485 417 485 445 485 443 486 443 1257 443 487 417 485 420 510 444 485 443 487 419 510 416 513 417 1256 442 487 420 510 419 1281 392 1281 419 510 443 486 420 510 443 487 416 513 417 486 443 486 443 486 444 486 419 510 417 1257 419 511 443 487 418 511 418 511 392 511 419 511 419 511 418 511 443 1258 391 1282 443 487 418 511 418 511 418 512 391 538 418 1256 417 1282 418 1282 391 512 417 512 417 512 417 512 417 513 417 512 391 513 416 536 393 536 393 536 393 537 366 563 367 537 393 536 393 536 393 537 393 537 366 564 366 537 393 537 393 1308 392 537 366 563 366 537 393 537 393 537 392 537 393 537 366 564 366 537 393 537 392 537 393 537 392 537 366 564 365 537 393 537 392 537 392 537 392 537 366 564 366 537 392 537 392 537 393 537 392 537 366 564 365 538 392 538 392 538 391 538 392 538 365 538 392 537 392 538 391 538 391 538 391 538 365 565 364 538 392 538 391 538 392 538 391 538 365 538 391 538 392 538 391 538 391 1309 364 1310 390 539 391 539 390 539 390 539 364 566 363 539 391 539 390 539 390 539 390 1310 363 1310 391 539 390 539 390 540 363 567 362 540 390 539 390 540 390 541 388 564 338 568 362 565 364 565 364 565 365 1335 338 1336 364 565 364 565 364 565 364 566 364 1309 391 +data: 3231 1526 463 334 461 1127 465 333 461 334 460 1128 463 336 459 1129 463 359 436 359 436 1133 458 1156 434 1157 433 362 433 1159 432 363 432 1159 432 1160 431 1159 433 363 432 363 432 363 432 363 432 1159 433 1159 432 363 432 1159 432 1160 432 363 432 363 432 1159 432 363 432 363 433 1159 432 364 432 363 432 1160 431 1160 432 363 432 1160 431 1160 431 1160 431 1160 432 1160 431 1160 431 364 432 1160 431 1160 431 1160 431 364 431 364 431 364 432 364 431 1160 432 364 431 364 431 364 432 1160 431 1161 430 1161 430 364 431 1161 431 1161 430 1161 430 1161 430 364 432 364 431 364 431 1161 430 365 430 365 430 365 430 365 431 365 430 1161 430 1161 431 365 430 1161 430 365 430 365 431 1161 430 1161 430 365 431 365 430 1162 430 365 431 1161 430 1162 429 365 430 # -name: TEMP+ +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 531 372 30125 50084 3425 1651 471 1229 471 458 471 458 445 485 445 458 472 458 472 458 471 458 471 458 445 485 444 459 471 458 472 1229 471 458 445 485 444 459 470 459 471 459 471 459 470 459 444 1230 470 1230 470 459 471 459 470 459 444 459 470 459 471 459 470 459 470 460 470 1204 469 459 470 1230 470 1231 442 1231 469 1231 469 1231 469 1231 443 460 469 1231 469 1231 442 487 443 461 468 461 468 461 468 461 469 462 441 489 441 461 468 1255 445 1255 418 1282 418 1282 418 1256 444 1256 418 1256 444 1256 444 485 445 485 418 485 445 1256 444 485 444 485 444 485 418 485 444 1256 444 485 444 485 444 1256 417 485 445 485 444 485 444 485 444 485 418 512 417 1256 444 485 444 485 445 485 418 512 417 485 444 1256 444 486 443 486 416 513 417 486 444 486 443 486 443 486 444 486 417 1257 443 486 444 1257 443 1257 416 486 444 486 443 486 443 487 442 487 416 513 416 487 418 511 443 487 442 487 418 1282 440 462 442 487 442 488 442 487 443 487 416 514 415 487 418 512 442 1258 442 1258 414 489 418 512 417 512 417 512 440 490 440 1260 413 1260 417 1283 441 488 391 539 390 512 441 488 417 512 417 513 416 512 391 539 390 513 438 491 417 513 416 513 416 513 389 540 390 514 415 513 417 513 416 513 416 514 388 541 388 1285 415 538 391 514 415 538 365 541 389 538 391 538 391 538 391 538 391 539 364 565 364 538 392 538 391 538 391 539 390 539 364 539 390 538 391 539 390 539 390 539 391 539 363 539 390 539 390 539 390 539 390 539 390 539 363 540 390 539 390 539 390 539 391 539 364 566 363 540 390 540 390 540 390 539 390 540 362 566 363 540 390 540 389 540 389 540 390 540 362 567 362 540 390 540 389 1311 389 1311 362 566 363 541 389 566 363 566 363 566 363 566 337 566 363 566 363 566 363 1337 336 1363 337 566 363 566 363 566 363 566 363 566 363 540 363 567 362 567 362 567 362 567 336 594 335 567 363 1337 363 1338 362 568 334 594 335 568 362 568 362 568 361 1364 496 +data: 3230 1526 463 334 461 1128 464 333 461 334 461 1128 463 336 459 1129 463 359 436 359 436 1155 435 1156 434 1158 433 363 432 1159 432 363 432 1159 432 1160 431 1160 431 363 433 363 432 363 432 363 432 1160 432 1160 431 364 431 1160 431 1160 432 364 431 364 431 1160 431 364 431 364 432 1160 431 364 431 364 431 1160 431 1160 431 364 432 1160 431 1160 431 1160 431 1160 431 1160 431 1160 431 364 431 1160 432 1160 431 1160 431 364 432 364 431 364 431 364 431 1161 430 364 431 364 432 364 431 1161 430 1161 430 1161 430 365 430 1161 431 1161 430 1161 430 1161 430 365 430 365 430 365 430 1161 430 365 431 365 431 365 430 365 431 1161 430 1161 430 365 430 365 430 365 430 1162 430 365 430 365 430 365 431 365 430 1162 429 1162 430 1162 429 366 429 1162 429 1162 429 # -name: TEMP- +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 479 398 30129 50086 3427 1675 446 1254 446 483 446 483 420 510 420 483 446 483 447 483 446 483 446 483 420 510 419 483 447 483 446 1254 446 484 419 510 420 484 446 483 446 484 446 484 445 484 419 1254 446 1254 446 484 445 484 445 484 419 484 446 484 446 484 445 484 446 484 419 1281 419 484 446 1255 445 1254 419 1254 446 1255 445 1255 445 1255 418 484 446 1255 445 1255 445 484 419 485 445 484 445 484 445 484 445 484 418 511 419 484 445 1255 445 1255 418 1282 418 1255 445 1255 445 1255 418 1282 418 1256 444 485 444 485 418 485 444 1256 443 486 444 485 445 485 418 485 444 1256 444 485 444 485 420 1281 418 485 443 486 444 485 420 1280 444 485 418 485 420 1280 444 486 443 487 417 512 416 487 420 510 444 1256 444 485 417 513 416 487 443 486 420 510 419 510 420 510 417 1257 443 486 419 510 419 1281 417 1257 419 510 420 510 420 509 419 511 418 511 392 511 419 510 443 486 419 511 418 510 393 1308 392 511 419 510 419 510 419 511 418 511 391 511 419 511 418 511 418 1281 419 1281 416 487 418 511 418 511 418 511 419 511 392 1281 419 1282 418 1282 392 537 392 511 418 511 419 511 419 511 419 511 392 538 392 512 418 511 419 511 418 512 418 512 391 538 391 512 418 512 417 512 418 512 417 512 391 539 390 512 417 1283 417 512 417 512 391 539 390 513 416 513 417 513 416 513 416 537 366 540 390 537 393 537 392 537 392 537 392 537 366 564 365 537 393 537 392 537 392 537 392 537 366 564 365 538 392 537 392 537 392 538 391 537 366 538 392 538 391 538 392 538 392 538 391 538 365 538 392 538 392 538 391 538 391 538 391 538 365 538 392 538 391 538 392 538 391 538 364 565 364 538 391 538 392 538 391 1309 364 1336 364 538 392 538 391 538 391 538 391 538 364 539 391 538 391 539 390 539 391 1309 364 1309 391 538 391 539 391 539 390 539 363 566 363 539 391 539 390 539 390 539 390 539 363 566 364 539 391 539 391 539 390 1310 363 566 364 539 391 539 390 540 389 1310 497 +data: 3234 1525 463 333 462 1127 465 332 462 333 436 1153 518 307 488 1073 518 307 488 308 434 1131 459 1155 435 1156 434 362 433 1159 432 363 432 1159 432 1159 432 1159 433 363 432 363 432 363 433 363 432 1159 433 1159 432 363 432 1159 433 1159 432 363 432 363 432 1159 432 363 433 363 432 1159 432 363 432 363 432 1159 432 1159 432 363 432 1160 432 1160 431 1160 432 1160 431 1160 431 1160 431 364 431 1160 431 1160 431 1160 431 364 431 364 431 364 431 364 431 1160 431 364 431 364 431 364 431 1160 432 1160 431 1160 432 364 431 1160 431 1160 431 1161 431 1161 430 364 431 364 431 364 431 1160 432 364 431 364 431 364 432 364 431 1161 431 1161 431 364 431 364 431 1161 430 364 432 364 431 1161 430 365 431 365 431 1161 430 1161 430 365 431 1161 430 1161 430 365 430 # -name: POWER +# Model: Airwell Prime DCI Series +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 454 414 452 413 453 413 453 413 453 412 454 25103 3488 1708 454 1278 454 413 453 413 453 413 453 1278 454 413 453 413 453 412 453 413 453 1278 479 388 478 1254 478 1255 477 389 476 1257 475 1283 449 1283 449 1284 448 1284 448 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 418 448 417 449 418 448 417 449 418 448 418 448 1284 448 418 448 1284 448 418 448 418 448 418 448 1284 448 1284 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 447 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 1284 448 1285 447 418 448 418 448 1285 447 1285 447 1285 447 35478 3510 1713 449 1284 448 418 448 418 448 417 449 1284 448 418 448 418 448 418 448 418 448 1284 448 418 448 1284 448 1284 448 417 449 1284 448 1284 448 1284 448 1284 448 1284 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 447 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 1285 447 418 448 418 447 418 448 418 448 418 448 418 448 418 448 418 448 418 447 418 448 418 448 419 447 419 447 1285 447 418 448 418 448 418 448 418 448 418 448 1285 447 419 447 418 448 1285 447 1285 447 418 448 35479 3509 1713 449 1284 448 417 449 417 449 417 449 1284 448 418 448 418 448 418 448 418 448 1284 448 418 448 1284 448 1284 448 418 448 1284 448 1284 448 1284 448 1284 448 1284 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 447 418 448 418 448 1285 447 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 418 448 1285 447 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 419 447 418 448 418 448 1285 447 419 447 1285 447 418 448 418 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 1285 447 1286 446 419 447 419 447 419 447 419 447 419 447 419 447 419 447 420 446 419 446 420 446 1286 446 1286 446 420 446 420 446 419 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 1287 445 420 446 420 446 420 446 420 446 421 445 1287 445 1287 445 421 445 421 445 421 445 421 445 421 445 421 445 421 445 1288 444 421 445 421 445 421 445 422 444 421 445 422 444 421 445 422 444 422 444 1288 444 1288 444 422 444 422 444 422 444 422 444 1289 443 +data: 3078 3852 2004 888 1054 1824 1045 894 1051 865 2062 861 1078 860 1080 865 1046 894 1015 1883 1945 899 1013 901 1013 901 1012 902 1012 900 1042 927 986 902 1012 927 987 901 1012 902 1012 927 986 903 1011 902 1012 931 1011 931 1011 904 1010 933 1009 928 985 928 986 1885 1944 927 3017 3943 1943 927 985 1915 984 929 985 929 1943 957 984 929 985 928 985 929 985 1886 1943 899 984 930 983 930 984 957 986 929 985 929 985 930 984 930 983 930 984 930 1013 930 984 959 983 931 982 931 983 930 984 930 984 930 984 960 1011 931 984 1918 1939 929 3016 3917 1940 930 982 1916 954 959 954 959 1913 957 955 933 981 959 928 1015 954 1916 1913 959 953 960 957 986 927 1015 928 1015 953 961 927 987 927 986 927 987 927 986 927 1016 927 987 927 1016 926 1044 928 987 926 1015 928 988 926 987 926 988 926 1946 1883 987 3974 # -name: TEMP+ +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 453 414 452 413 453 412 454 414 452 413 453 25102 3490 1707 455 1278 483 384 482 383 482 383 482 1249 483 384 481 384 481 385 480 385 480 1251 481 387 478 1252 480 1253 478 414 451 1281 450 1282 449 1283 448 1283 449 1284 448 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 418 448 417 449 417 449 417 449 417 449 417 449 1284 448 417 449 1284 448 417 449 417 449 417 449 1284 448 1284 448 417 449 417 449 417 449 418 448 1284 448 418 448 417 449 418 448 418 448 417 449 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 1284 448 1284 448 418 448 418 448 1284 448 1284 448 1284 448 35479 3509 1713 449 1284 448 418 448 417 449 418 448 1284 448 417 449 418 448 417 449 418 448 1284 448 418 448 1284 448 1284 448 418 448 1284 448 1284 448 1284 448 1284 448 1284 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 447 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 447 418 448 1285 447 418 448 418 448 1285 447 1284 448 418 448 35478 3510 1713 449 1284 448 417 449 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 1284 448 418 448 1284 448 1284 448 417 449 1284 448 1284 448 1284 448 1284 448 1284 448 418 448 417 449 1284 448 418 448 418 448 418 448 418 448 418 448 417 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 447 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 447 418 448 1284 448 1285 447 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 419 447 418 447 419 447 418 448 418 448 418 448 418 448 1285 447 1285 447 419 447 1285 447 419 447 418 448 419 447 419 447 419 447 418 448 419 447 419 447 419 447 419 447 419 447 419 446 419 447 419 447 419 447 419 447 419 447 1285 447 1286 446 419 447 419 447 419 447 419 447 419 447 420 446 419 447 419 447 419 447 419 447 1286 446 1286 446 419 447 1286 446 419 447 420 446 419 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 445 1286 446 420 446 420 446 420 446 420 446 420 446 1287 445 1287 445 420 446 420 446 420 446 421 445 420 446 421 445 421 445 1287 445 421 445 420 446 421 445 421 445 421 445 421 445 421 445 421 445 1287 445 421 445 421 445 1287 445 1287 445 421 445 421 445 1287 445 +data: 3060 3870 1026 888 1984 886 1026 888 1053 888 1026 887 1055 858 1055 858 1052 860 1024 891 1044 1854 1016 897 1975 1853 1975 925 1015 898 1015 898 1016 897 1016 898 1015 898 1016 898 1015 898 1015 898 1015 899 1015 899 1014 899 1014 899 1016 927 1014 900 1014 899 1014 1856 1974 926 3048 3883 1015 898 1975 897 1014 899 1015 899 1014 900 1014 899 1015 900 1013 900 1014 899 1014 1857 1014 900 1973 1855 1973 899 1012 901 1013 902 1011 926 987 927 987 926 987 927 987 955 987 926 988 926 987 927 1015 927 987 927 987 926 988 926 1016 927 1015 1884 1945 925 3020 3911 986 928 1946 925 986 927 986 928 986 928 986 927 987 927 987 928 986 928 986 1884 987 956 1946 1882 1946 925 986 928 986 927 986 928 985 928 986 928 986 928 986 928 985 928 985 929 959 954 984 930 984 987 931 955 959 956 958 955 959 1968 1891 980 3982 # -name: TEMP- +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 454 414 451 413 453 413 453 413 453 413 453 25102 3489 1708 454 1277 455 413 452 413 453 413 453 1278 454 412 454 412 454 412 454 412 453 1278 454 413 478 1253 479 1254 477 389 476 1257 475 1283 448 1284 448 1284 448 1284 448 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 418 448 418 448 418 448 418 448 418 448 417 448 1284 448 417 449 1284 448 418 448 418 448 418 448 1284 448 1284 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 419 447 1285 447 1285 447 1285 447 419 447 419 447 1285 447 1285 447 1285 447 35505 3483 1713 449 1284 448 417 449 417 449 418 448 1284 448 417 449 417 449 417 449 418 448 1284 448 418 448 1284 448 1284 448 418 448 1284 448 1284 448 1284 448 1284 448 1284 448 417 449 418 448 1284 448 417 449 418 448 418 448 418 448 418 448 418 448 418 448 418 447 418 448 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 1285 447 418 447 418 448 1284 448 1285 447 418 448 35481 3508 1713 448 1284 448 417 449 418 448 418 448 1284 448 418 448 418 448 417 449 418 448 1284 448 418 448 1284 448 1284 448 418 448 1284 448 1284 448 1284 448 1284 448 1284 448 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 418 448 419 447 418 448 418 448 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 446 419 447 419 447 419 447 1286 446 419 447 419 447 419 446 419 447 419 447 419 447 1286 446 419 447 419 447 1286 446 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 446 419 447 419 447 419 447 419 447 419 447 1286 446 1286 446 420 446 1286 446 420 446 420 446 419 446 420 446 420 446 420 446 420 446 420 446 420 446 420 445 420 446 421 445 420 446 421 445 421 445 420 446 421 445 1287 445 1287 445 421 445 421 445 422 444 446 420 446 420 423 443 446 420 446 420 446 420 446 420 1312 420 1312 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 419 446 420 446 420 1313 419 446 420 446 420 447 419 447 419 446 420 1313 419 1313 419 447 419 447 419 446 420 447 419 446 420 447 419 447 419 1313 419 447 419 446 420 447 419 447 419 447 419 447 419 447 419 447 419 1313 419 447 419 1313 419 447 419 1313 419 447 419 447 419 1313 419 +data: 3054 3879 1977 892 1020 1846 1083 838 1073 840 2031 859 1051 864 1047 864 1077 896 1014 927 986 928 986 928 986 1885 1943 927 985 929 1013 928 986 929 985 928 985 928 985 928 985 929 985 929 985 957 985 928 1015 928 1015 928 985 929 984 929 985 929 985 1886 1943 927 3017 3914 1943 928 984 1886 985 958 984 929 1972 957 984 958 984 929 984 930 984 929 984 930 984 930 983 1887 1942 929 983 930 984 930 984 930 983 959 984 930 984 930 983 930 984 930 984 930 984 930 983 931 983 931 983 959 984 931 983 931 983 1888 1941 930 3014 3943 1914 931 981 1915 955 959 955 959 1913 958 955 959 954 959 955 959 955 959 955 988 955 960 953 1917 1941 959 953 960 953 961 953 961 953 961 927 987 927 987 927 987 926 987 927 1017 926 988 926 988 925 988 925 988 926 988 925 1018 925 1972 1857 1014 3946 # -name: MODE +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 484 410 456 385 481 385 481 384 482 385 481 25074 3521 1676 483 1249 483 410 484 382 485 381 485 1247 485 381 484 381 485 381 484 382 483 1248 484 383 482 1249 482 1250 481 385 480 1253 478 1254 478 1255 477 1256 476 1256 476 389 477 389 477 1256 476 390 476 390 476 390 476 389 477 390 476 390 476 390 476 390 476 390 476 389 476 1256 476 390 476 1256 476 390 476 390 476 390 476 1256 476 1256 476 390 476 390 476 390 476 390 476 1257 475 390 476 390 476 390 476 390 476 390 476 390 476 390 476 390 475 391 475 391 475 390 476 1257 475 1257 475 1257 475 391 475 391 475 1257 475 1258 474 1258 474 35476 3516 1682 476 1256 476 390 476 389 477 389 477 1256 476 389 477 389 477 389 477 389 477 1256 476 389 477 1256 476 1256 476 390 476 1256 476 1256 476 1256 476 1256 476 1256 476 390 476 390 476 1256 476 390 476 390 476 390 476 390 476 390 476 390 476 390 476 390 476 390 476 390 476 390 476 1256 476 390 476 390 476 390 476 390 476 1257 475 390 476 390 476 390 475 391 475 390 476 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 1257 475 391 475 391 475 391 475 391 475 391 475 1258 474 392 474 392 474 1258 474 1259 473 416 450 35476 3516 1682 477 1257 475 390 476 390 476 390 476 1256 476 390 476 390 476 390 476 390 476 1257 475 390 476 1257 475 1257 475 390 476 1257 475 1257 475 1257 475 1257 475 1258 474 391 475 391 475 1258 474 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 391 475 392 474 391 475 391 475 391 475 392 474 392 474 391 475 392 474 1282 450 416 450 1283 449 416 450 416 450 416 450 416 450 393 473 416 449 416 450 416 450 1283 449 1283 449 417 449 417 449 416 449 417 449 416 450 416 450 417 449 416 450 416 450 417 449 416 450 417 449 417 449 1283 449 417 449 1283 449 417 449 417 449 417 449 417 449 417 449 417 449 417 448 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 1284 448 1283 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 1284 448 1284 448 417 449 418 448 417 449 418 448 418 448 418 448 418 448 418 448 418 448 418 448 417 449 418 447 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 1284 448 1285 447 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1285 447 418 448 418 448 418 448 418 448 418 448 419 447 418 448 418 448 1285 447 418 447 419 447 419 447 418 448 419 447 1285 447 419 447 +data: 3080 3850 2007 863 1049 1851 1048 888 1054 887 2012 886 1026 887 1025 888 1050 865 1045 1854 2029 871 1041 872 1040 873 1042 899 1043 899 1043 872 1015 898 1016 899 1041 872 1042 872 1015 926 1017 898 1016 927 1016 926 1016 899 1014 898 1015 926 1016 899 1015 898 1015 1856 1973 897 3048 3910 1947 898 1015 1884 1015 925 988 899 2003 953 988 900 1014 954 988 926 987 1857 1972 896 988 899 1014 900 1014 900 1013 927 987 929 1014 929 1013 926 987 927 986 927 987 927 987 927 987 927 986 927 987 927 986 985 958 928 986 927 986 927 1012 1860 1943 927 3018 3914 1943 955 986 1914 986 929 984 928 1944 955 957 930 984 957 985 956 958 1913 1915 956 957 957 956 957 931 1012 957 930 983 958 955 931 982 958 956 960 983 958 956 958 955 958 930 984 930 984 930 984 930 984 930 1013 930 984 930 985 928 1942 1887 983 3977 # -name: MODE +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 536 335 510 363 509 363 509 335 565 311 505 25378 3540 1697 455 1317 427 418 455 417 455 417 455 1289 456 390 455 417 455 417 455 417 428 1317 454 392 480 1265 480 1265 480 393 479 1268 476 1269 476 1269 476 1269 476 1269 476 397 475 369 476 1269 476 396 476 397 476 396 449 397 476 396 476 397 448 396 476 397 475 397 476 370 475 1270 475 397 475 1270 475 397 475 397 448 397 475 1271 474 1271 474 398 474 398 474 371 474 398 475 398 474 398 447 398 475 398 474 398 447 399 474 400 472 423 449 371 474 399 473 399 473 423 422 1324 421 1324 421 1324 421 423 450 1296 449 423 449 1297 448 1297 448 34986 3534 1704 476 1269 476 396 476 369 476 396 476 1270 475 396 476 369 476 397 476 396 476 1270 475 397 448 1297 448 1297 449 397 476 1270 475 1270 475 1270 475 1270 475 1270 476 397 475 397 475 1270 475 370 475 397 476 397 475 397 448 398 474 397 475 397 476 370 475 398 474 397 475 398 447 1298 447 398 475 398 474 398 447 398 474 1272 473 399 473 398 474 372 473 399 473 399 474 423 422 399 474 423 449 423 449 396 449 423 450 423 449 1296 449 1296 449 423 422 424 449 423 449 423 422 423 449 1297 448 1297 448 424 448 1297 448 1297 448 423 450 34986 3535 1703 476 1269 476 369 476 396 476 396 477 1269 476 396 449 396 477 396 476 396 476 1270 475 369 476 1270 475 1270 475 397 476 1270 475 1270 475 1270 475 1270 475 1270 475 397 476 370 475 1270 475 397 476 397 475 397 448 397 475 397 476 397 475 370 475 398 474 398 475 398 447 398 474 398 474 398 474 371 474 398 474 399 473 371 474 422 451 1272 473 423 449 422 423 1323 422 423 450 1296 449 423 449 423 449 395 450 423 449 423 449 423 422 423 449 423 449 1296 450 1296 449 423 449 396 449 423 449 423 449 423 422 423 449 424 448 424 421 1324 421 1324 421 1324 421 1324 421 424 449 1297 448 424 448 1297 448 1297 448 1297 448 1297 448 1297 448 424 448 397 448 424 448 424 448 424 421 424 449 424 448 424 448 397 448 424 448 424 448 425 420 425 448 1298 447 1298 447 425 447 425 420 425 447 425 447 425 448 397 448 425 447 425 448 425 420 425 448 1298 447 1298 447 425 448 425 447 398 447 425 448 425 447 425 420 425 447 425 448 425 420 425 447 425 447 425 447 398 447 426 446 426 446 426 419 426 446 1299 446 426 446 426 447 398 447 426 446 426 446 1299 446 1299 446 426 419 426 446 426 446 426 447 399 446 427 446 426 446 1300 445 400 445 427 445 427 446 427 418 427 446 427 445 428 444 400 445 453 419 453 419 453 392 453 419 453 420 1326 419 1326 419 453 419 -# SWING_WIDE -name: SWING +data: 3083 3873 2012 1843 2013 1873 1054 888 2011 887 1025 887 1025 887 1052 890 1048 1852 1017 896 1018 895 1018 896 1976 895 1017 898 1016 898 1015 898 1016 897 1016 897 1016 897 1017 897 1016 897 1017 900 1043 899 1014 897 1016 897 1016 898 1016 898 1015 898 1015 1857 1972 896 3048 3911 1947 1853 1975 1854 1015 898 1973 897 1016 927 1015 926 987 926 1016 1857 1014 926 987 899 1015 901 1970 926 987 927 987 926 988 955 988 1013 958 900 1014 926 987 900 1014 900 1014 900 1013 927 986 927 987 927 1016 955 987 927 987 955 987 1884 1946 928 3045 3912 1974 1883 1974 1883 987 927 1974 926 986 927 987 928 987 956 987 1942 986 956 986 928 986 928 1944 926 986 928 985 929 984 929 985 928 986 956 987 928 986 958 984 929 984 930 984 930 983 929 985 958 984 930 984 957 957 956 957 1887 1971 956 4003 +# +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 484 362 510 363 482 390 454 391 457 416 456 25430 3517 1720 457 1287 458 416 484 387 486 387 458 1286 458 387 485 387 457 414 431 414 458 1286 457 415 459 1286 457 1288 457 415 458 1288 456 1290 455 1290 480 1267 478 1292 453 392 453 420 453 1293 451 421 452 420 425 420 452 420 452 420 452 392 453 420 453 420 452 420 425 420 453 1293 452 421 452 1293 452 421 452 393 452 420 452 1293 452 1294 451 421 452 393 452 420 452 420 452 420 425 420 453 420 452 420 452 393 452 420 452 420 452 420 425 420 452 420 453 420 452 393 452 1293 451 1294 452 1294 451 421 451 1294 451 421 452 1294 451 1294 451 34985 3537 1726 452 1294 451 393 452 420 453 420 452 1293 452 421 424 420 453 420 452 420 452 1293 452 393 453 1293 452 1294 451 421 452 1293 452 1294 451 1294 451 1294 451 1294 451 421 452 421 424 1321 424 421 452 421 452 420 425 421 452 420 452 421 451 393 452 421 452 420 452 421 424 421 452 1294 451 421 452 421 451 394 451 421 451 1294 451 421 452 421 424 421 452 421 451 421 424 421 451 421 451 421 451 394 451 421 451 421 451 421 424 1321 424 1322 423 422 451 421 452 421 451 394 451 421 451 1294 451 1295 450 422 451 1294 451 1295 450 422 423 34985 3536 1726 452 1293 452 420 452 420 453 420 425 1320 425 421 452 420 452 420 452 393 452 1293 451 421 452 1293 451 1294 451 421 452 1293 452 1294 451 1294 451 1294 451 1294 451 421 424 421 452 1293 452 421 452 420 452 393 452 420 452 420 452 420 425 420 452 420 453 420 425 421 452 420 452 420 452 393 452 421 452 420 452 420 425 421 452 420 452 1294 451 421 452 394 451 1294 450 421 452 421 452 421 424 421 451 421 452 421 424 1322 423 421 452 421 451 1294 451 421 452 394 451 421 452 421 451 421 424 421 452 421 451 421 451 394 451 421 451 421 451 421 424 421 452 421 451 1294 451 1295 450 422 423 422 452 1294 450 1295 451 1295 450 1295 450 422 450 422 451 394 451 421 452 421 452 421 424 422 451 421 451 421 451 394 451 421 451 421 452 421 424 1322 423 1323 422 422 451 422 451 421 451 394 451 421 451 422 450 394 451 421 451 422 450 422 423 1322 422 1323 422 423 450 1295 450 423 450 422 450 395 450 422 450 422 450 422 423 422 451 422 450 422 450 395 450 422 451 422 450 395 450 422 450 422 451 1295 449 423 422 422 451 422 450 422 450 395 450 1295 449 1295 450 423 450 422 451 422 423 422 451 422 450 422 450 395 450 1295 449 423 450 422 451 395 450 422 450 422 450 422 423 422 451 422 450 422 451 1295 449 1296 449 396 449 423 450 1296 448 423 450 423 422 +data: 3108 3851 2062 1793 2006 1821 1103 839 2031 859 1085 829 1081 833 1079 836 1045 1911 1973 897 1015 898 1016 899 1041 871 1016 899 1014 898 1015 899 1015 899 1014 899 1041 872 1015 899 1041 872 1041 872 1015 899 1015 899 1041 873 1014 899 1041 873 1014 899 1014 1883 1975 900 3045 3886 1997 1856 1945 1857 1012 927 1945 900 1013 901 1012 901 1013 901 1012 1859 1999 901 1012 930 1012 903 1011 903 1010 903 1011 902 1012 960 1011 928 986 932 1010 903 1011 928 1015 928 985 929 985 928 1014 928 985 929 985 929 984 929 985 928 986 1915 1971 928 3017 3915 1942 1885 1943 1885 985 930 1971 929 984 930 983 930 984 930 984 1887 1942 929 983 960 983 931 982 931 983 932 981 958 985 958 956 958 984 959 954 931 983 932 981 959 955 932 982 959 954 960 982 961 983 933 955 988 955 985 929 1943 1915 958 4003 # -name: TEMP+ +# Model: Danby DAC060EB7WDB +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 511 362 483 363 509 362 483 391 454 391 457 25457 3518 1719 457 1287 458 389 456 415 457 415 457 1287 485 389 456 388 457 415 457 415 457 1286 459 387 458 1286 459 1287 458 415 483 1262 483 1263 482 1264 481 1265 480 1291 454 419 453 420 425 1320 425 420 453 420 452 420 453 392 453 420 452 420 452 393 452 420 453 420 452 420 425 1320 425 420 453 1293 452 420 453 420 452 393 452 1293 452 1293 452 420 453 420 452 420 425 420 453 420 453 420 452 393 452 420 452 420 452 420 425 420 453 420 452 420 425 420 452 420 452 420 452 1293 452 1293 452 1293 452 393 452 1293 452 420 453 1293 452 1293 452 34983 3540 1724 452 1293 452 420 452 420 425 420 452 1293 452 420 453 420 453 392 453 420 452 1293 452 420 452 1293 452 1293 452 393 452 1293 452 1293 452 1293 452 1293 452 1294 451 420 452 421 452 1293 452 421 424 420 452 420 452 420 452 393 452 420 452 420 452 420 425 421 452 420 453 420 452 1293 452 394 451 421 451 421 451 393 452 1294 451 421 451 421 451 421 424 421 451 421 451 421 452 393 452 421 452 421 451 421 424 421 452 421 451 421 451 1294 451 394 451 421 452 421 451 394 451 421 451 1294 451 421 452 421 424 1322 423 1322 423 422 451 34985 3539 1724 452 1293 452 420 452 420 453 393 452 1293 452 421 452 420 452 420 425 420 452 1293 452 421 452 1293 452 1294 451 421 424 1321 424 1322 424 1321 424 1321 424 1321 424 421 451 421 452 1294 451 421 452 393 452 421 451 421 452 420 425 421 452 420 452 421 451 393 452 420 452 421 452 421 424 421 451 421 452 421 451 393 452 421 451 421 451 1294 451 394 452 421 451 1294 451 421 452 421 424 421 452 421 451 421 451 1294 451 1295 451 394 451 422 451 1294 450 422 451 421 424 421 451 421 451 421 452 394 451 422 451 422 450 394 451 421 451 421 451 421 424 422 451 422 450 1295 450 1295 450 422 450 395 450 422 450 422 450 422 423 422 450 422 450 422 451 394 451 422 450 422 450 395 450 422 450 422 450 422 423 422 451 422 450 422 450 395 450 1295 449 1296 449 423 449 423 450 423 422 423 450 422 450 423 449 396 449 423 450 423 449 423 422 1324 420 1324 422 424 449 1297 448 424 449 423 422 423 450 424 448 424 448 396 449 423 449 423 449 424 421 424 449 424 449 423 449 396 449 423 449 424 449 1297 447 425 420 425 448 424 449 424 421 425 448 1297 447 1298 447 425 447 425 448 397 448 425 447 424 448 425 420 426 447 1322 423 450 423 449 423 422 423 450 422 450 423 450 395 450 422 450 422 1323 421 451 395 450 423 1323 421 1324 421 451 421 451 422 423 422 +data: 4402 4442 527 1629 529 549 529 1628 530 550 529 548 531 549 530 550 529 1630 528 549 530 549 529 549 530 1630 527 1629 529 1630 528 548 530 550 529 547 531 1628 530 1629 529 1628 530 1628 529 1628 530 1628 530 549 530 1628 530 1628 530 1627 531 1628 530 1627 531 1631 527 1629 529 1628 530 1627 531 1628 530 1628 530 1629 529 1627 531 1627 531 1628 529 1627 531 1627 531 1629 529 1627 530 549 529 549 530 549 530 1628 529 1627 530 5234 4401 4440 530 550 528 1628 529 549 530 1628 529 1629 528 1626 531 1628 529 550 529 1628 530 1627 531 1629 529 549 529 548 530 549 530 1628 529 1628 530 1627 530 547 532 547 532 547 531 548 531 548 530 548 531 1626 531 549 530 547 531 547 531 548 530 548 530 549 530 548 531 546 532 578 500 547 532 548 531 548 531 548 530 548 531 548 530 548 531 547 531 547 532 547 531 1627 531 1627 530 1626 532 547 531 547 532 # -name: TEMP- +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 538 335 510 362 510 362 510 338 507 338 534 25377 3593 1642 510 1235 510 363 537 335 509 363 509 1209 537 335 510 361 511 362 510 362 483 1262 483 363 508 1236 508 1237 507 366 478 1268 477 1269 476 1269 476 1270 475 1270 475 397 475 370 475 1270 475 397 475 397 475 397 448 397 476 397 475 397 476 369 476 397 475 397 475 370 475 1270 475 397 475 1270 475 397 475 397 448 397 475 1271 474 1270 475 397 475 397 475 370 475 398 474 398 474 397 448 398 475 398 474 397 475 370 475 398 474 398 475 370 475 398 475 398 474 398 447 1299 447 1299 446 1299 446 398 474 1271 474 399 474 1271 474 1272 473 34986 3534 1703 476 1269 476 396 476 369 476 396 476 1269 476 396 476 397 448 397 476 396 477 1269 476 397 448 1297 448 1297 448 396 476 1270 475 1270 475 1270 475 1270 475 1270 475 397 475 397 475 1270 475 370 475 397 475 397 475 397 448 397 475 397 475 397 475 370 475 397 475 397 475 397 448 1298 447 398 475 398 475 398 447 398 474 1271 474 398 474 398 474 395 450 422 450 422 450 422 423 422 450 422 450 423 450 395 450 422 451 422 450 423 422 1323 422 423 449 423 449 422 450 395 450 423 449 1296 450 422 450 395 450 1296 449 1296 449 423 449 34986 3535 1703 476 1269 476 396 476 396 449 397 475 1270 475 396 477 396 476 369 476 397 476 1269 476 397 475 1270 476 1270 475 397 448 1298 447 1298 447 1297 448 1298 447 1298 448 398 474 398 474 1295 450 398 447 398 474 422 450 422 451 395 450 422 450 422 450 422 423 422 451 422 450 422 450 395 450 422 450 422 451 422 423 422 450 422 451 422 423 1323 423 422 450 422 451 1295 450 422 450 395 450 422 450 422 451 422 423 423 450 1295 450 422 450 422 451 1295 450 395 450 422 450 423 449 422 423 423 449 423 450 422 423 423 449 423 450 422 450 396 449 423 449 423 449 423 422 1324 421 1323 422 423 450 423 449 423 449 396 449 423 449 423 449 423 422 423 450 423 450 423 449 396 449 423 449 423 450 396 449 424 448 424 449 423 422 424 449 424 448 1297 448 1297 448 424 448 397 448 424 449 424 448 424 421 424 448 424 449 424 449 396 449 424 448 1297 448 1297 448 424 448 1297 448 397 448 424 448 424 449 424 421 425 448 424 448 424 448 398 447 424 448 424 448 425 420 425 447 425 447 425 448 397 448 1298 447 425 447 425 447 398 448 425 447 425 447 1298 447 1298 447 425 420 425 447 425 448 425 447 398 447 425 447 426 446 1299 446 426 419 426 447 425 447 426 446 399 446 426 446 426 447 426 419 1326 419 1327 418 1327 419 426 446 1300 445 426 446 426 419 427 446 -# SWING_WIDE -name: SWING +data: 4454 4387 586 1573 585 494 584 1571 586 494 584 493 585 524 554 493 531 1626 586 1573 585 494 585 492 586 492 586 494 585 493 585 493 586 1571 586 493 585 1572 531 1627 530 549 584 494 586 1571 587 1572 529 1628 529 1628 530 1627 530 1626 532 1627 531 1626 532 1628 529 1627 531 1626 531 1627 531 1627 587 1569 532 1625 533 1626 532 1626 532 1627 531 1627 530 548 531 1626 532 1627 531 548 531 1627 531 548 531 546 532 547 531 5233 4401 4443 530 548 530 1627 530 547 531 1627 531 1626 531 1626 531 1627 530 549 530 548 530 1627 531 1627 531 1627 530 1627 531 1627 531 1626 531 548 530 1627 530 547 532 547 532 1627 531 1627 532 546 531 547 531 548 530 548 530 548 531 548 531 548 530 548 530 549 530 548 531 548 531 548 530 547 532 549 529 548 530 548 531 547 532 548 530 548 531 1627 530 548 530 548 531 1626 533 546 531 1627 530 1627 532 1626 530 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 454 413 453 412 454 412 454 412 454 413 453 25102 3490 1707 483 1249 484 383 483 383 482 383 509 1222 483 383 482 384 481 385 480 385 480 1250 482 386 479 1252 479 1254 477 414 451 1281 450 1282 449 1283 449 1283 449 1284 448 417 448 417 449 1284 448 417 449 417 449 418 448 417 449 417 449 417 449 417 449 417 449 417 449 417 449 1284 448 418 448 1284 448 418 448 418 448 418 448 1284 448 1284 448 418 448 418 448 417 448 418 448 1284 448 417 449 417 448 418 448 417 449 417 449 417 449 418 448 417 449 418 448 418 448 418 448 1284 448 1284 448 1284 449 417 449 418 448 1284 448 1284 448 1284 448 35505 3485 1712 449 1283 449 417 449 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 1284 448 417 449 1284 448 1284 448 417 449 1284 448 1284 448 1284 448 1283 449 1284 448 417 449 417 449 1284 448 417 449 417 449 417 449 417 449 417 449 417 449 417 449 417 449 418 448 418 448 417 449 1284 448 417 449 417 449 417 449 417 449 1284 448 417 448 418 448 418 448 417 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 418 448 418 448 418 448 1284 448 418 448 418 448 1285 447 1285 447 418 448 35504 3486 1712 449 1283 449 417 449 417 448 417 449 1284 448 417 449 417 449 417 449 417 448 1284 448 417 449 1284 448 1284 448 417 449 1283 449 1284 448 1284 448 1284 448 1284 449 417 449 417 449 1284 448 417 449 417 449 418 448 417 449 417 449 417 449 418 448 417 449 417 449 418 448 418 448 418 448 417 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1284 448 1284 448 1284 448 418 448 418 448 418 448 1284 448 418 448 418 448 1284 448 1284 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 418 448 1285 447 1285 447 418 448 1285 447 1285 447 1285 447 1285 447 1285 447 419 447 418 448 419 447 418 448 418 448 418 448 419 447 419 447 418 448 418 448 419 447 419 447 419 447 1285 447 1285 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 1286 446 1285 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 419 447 1286 446 420 446 420 446 420 446 420 446 419 447 1286 446 1286 446 419 447 420 446 420 446 420 446 420 446 420 446 420 446 1286 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 420 446 1286 446 420 446 420 446 420 446 1287 445 1287 445 1287 445 +data: 4492 4354 619 1537 619 459 621 1537 622 455 623 456 623 457 622 456 623 1535 622 1536 622 458 621 456 623 1536 621 1535 623 456 622 456 623 457 621 456 531 1627 621 1536 622 456 622 457 622 455 623 458 621 458 621 1537 621 1536 620 1539 618 1538 531 1628 531 1627 530 1628 530 1628 530 1627 531 1628 530 1628 530 1628 531 1627 530 1629 529 1628 529 1628 530 549 530 1627 531 1628 530 1628 530 1627 586 494 530 1627 530 549 530 5232 4400 4443 586 492 587 1571 587 493 585 1572 530 1628 586 1572 586 1572 586 492 587 493 586 1572 586 1571 586 492 587 493 585 1572 531 1627 585 1573 585 1572 585 492 586 494 585 1572 586 1571 531 1627 531 1628 530 1627 587 491 531 548 587 492 530 548 530 547 532 548 531 547 532 547 531 548 531 547 532 547 531 548 588 491 530 547 589 490 531 547 532 1626 532 548 531 548 531 547 532 547 532 1627 531 548 531 1626 532 # -name: POWER +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 1373 348 1310 376 463 1190 1318 400 1286 401 439 1244 442 1244 1288 400 465 1218 468 1218 468 1219 467 7970 1307 404 1281 405 435 1252 1281 406 1280 406 434 1252 434 1252 1281 406 434 1253 434 1252 434 1252 434 8000 1280 406 1281 406 434 1252 1281 406 1280 406 434 1252 434 1252 1281 406 434 1253 433 1253 433 1253 434 8000 1280 406 1280 406 434 1253 1280 406 1280 406 434 1253 433 1253 1280 406 434 1253 433 1253 433 1253 433 8001 1279 406 1280 406 434 1253 1280 407 1279 407 433 1253 434 1253 1280 407 433 1253 433 1253 433 1253 433 8001 1279 407 1279 407 433 1253 1280 407 1280 407 433 1253 433 1253 1280 407 433 1253 433 1253 434 1253 433 -# OFF -name: POWER +data: 4401 4441 528 1629 529 550 528 1628 529 551 528 550 528 551 527 551 528 1629 529 1629 529 550 529 1630 528 551 528 549 530 550 529 551 528 549 529 550 529 1629 529 1628 530 549 530 1629 529 550 529 1628 529 1629 529 1631 527 1628 530 1628 529 1629 528 1628 530 1629 529 1629 529 1629 529 1629 528 1629 529 1629 529 1630 528 1629 529 1629 529 1628 529 1629 528 551 528 1629 529 550 529 550 530 548 529 1631 527 551 528 1629 529 5235 4402 4439 530 550 528 1629 529 549 530 1628 529 1629 529 1628 530 1629 529 549 530 550 529 1628 530 552 526 1628 529 1628 530 1628 530 1627 531 1628 529 1629 528 551 528 550 529 1628 530 550 528 1628 529 549 529 550 528 550 529 549 530 548 530 551 528 550 528 578 500 550 529 550 529 551 527 549 530 549 529 549 529 550 528 548 530 550 528 549 529 1629 528 550 529 1630 528 1628 530 1628 530 549 530 1628 529 549 529 +# +# Model: Carrier 42QHB12D8S +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3827 1854 505 433 507 1382 506 434 506 1383 505 434 506 1410 478 433 507 1381 507 433 507 1383 505 435 505 1382 505 1383 505 435 505 1382 506 435 505 1383 505 1382 506 1384 504 1381 507 434 506 434 506 1382 506 1382 506 432 508 434 506 436 504 433 507 1382 506 435 505 434 506 436 504 1381 507 1383 505 434 506 1382 506 1381 507 434 506 1381 507 1381 507 1383 505 435 505 434 506 435 505 433 507 1383 505 435 505 435 505 434 506 1381 507 433 507 435 505 434 506 1382 506 433 507 434 506 433 507 438 502 434 506 433 507 434 506 434 506 432 508 435 505 434 506 433 507 433 507 1387 501 435 505 436 504 433 507 433 507 435 505 433 507 434 506 434 506 435 505 435 505 432 508 1410 478 461 479 432 508 435 505 434 506 433 507 436 504 434 506 434 506 433 507 435 505 1383 505 435 505 1381 507 1381 507 1382 506 1382 506 1381 507 435 505 433 507 433 507 461 478 1383 505 433 507 434 506 +data: 4467 4363 599 1556 599 478 599 1556 599 1558 597 505 572 505 572 1583 571 505 572 506 624 1531 653 423 651 426 624 1530 622 1532 572 505 572 1583 571 506 571 1584 571 1583 571 1584 571 1584 571 507 570 1585 570 1585 570 1585 570 508 569 508 569 508 592 485 570 1585 593 484 570 508 569 1586 569 1586 592 1563 593 485 569 508 592 485 592 485 570 508 569 508 570 508 569 508 569 1586 569 1586 569 1586 569 1586 569 1586 569 5187 4461 4371 568 1586 569 508 593 1562 593 1563 569 509 591 486 591 1563 569 508 592 486 592 1563 592 485 592 486 591 1563 592 1563 591 486 592 1564 591 486 592 1563 593 1563 591 1563 592 1564 592 485 592 1563 592 1563 592 1564 591 486 591 486 592 485 592 485 592 1563 592 486 591 486 592 1564 591 1563 592 1563 592 486 592 485 592 486 591 486 592 485 592 486 591 486 591 486 591 1563 592 1563 593 1563 591 1564 591 1563 591 # -name: TEMP- +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3778 1905 506 434 506 1381 507 436 504 1381 507 435 505 1382 506 432 508 1380 508 433 507 1381 507 432 508 1380 508 1381 507 432 508 1380 508 432 508 1380 508 1380 508 1380 508 1380 508 433 507 432 508 1380 508 1380 508 432 508 431 509 432 508 433 507 1380 508 432 508 432 508 431 509 433 507 1380 508 434 506 1380 508 1380 508 434 506 1381 507 1380 508 1380 508 433 507 431 509 433 507 1381 507 1381 507 432 508 431 509 431 509 1381 507 431 509 432 508 432 508 1381 507 431 509 432 508 432 508 432 508 432 508 432 508 435 505 432 508 432 508 431 509 432 508 432 508 434 506 1379 509 432 508 432 508 433 507 431 509 433 507 432 508 433 507 432 508 432 508 432 508 431 509 1380 508 432 508 432 508 1380 508 431 509 433 507 432 508 432 508 432 508 431 509 432 508 1381 507 431 509 1382 506 1380 508 1380 508 1380 508 1380 507 434 506 433 507 433 507 431 509 1380 508 1380 508 432 508 +data: 4440 4390 571 1583 572 505 572 1583 596 1559 571 505 572 505 572 1583 596 481 596 481 597 1559 625 451 654 423 625 1529 595 1560 596 480 572 1583 572 505 596 482 594 483 571 1583 571 1584 571 1584 571 1584 571 1585 569 1585 593 1562 594 1561 593 485 569 508 593 484 592 485 593 484 592 485 592 1563 569 508 592 1562 592 485 570 1586 592 485 592 486 569 1586 592 485 569 1585 570 508 569 1586 569 508 569 1585 570 1586 569 5186 4438 4393 569 1585 593 485 592 1562 569 1585 569 508 569 508 569 1585 591 486 593 484 591 1563 591 486 591 486 590 1564 569 1585 569 508 593 1562 592 486 592 485 569 508 591 1563 592 1562 569 1586 569 1586 591 1563 592 1563 590 1564 591 1563 592 486 569 508 569 508 569 508 569 508 592 486 592 1563 568 508 593 1563 591 486 592 1563 569 508 592 486 592 1563 591 486 592 1563 592 485 592 1563 592 486 592 1563 591 1563 592 # -name: TEMP+ +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3828 1855 504 431 508 1382 506 434 506 1382 506 434 506 1381 507 432 508 1381 507 434 506 1381 560 381 506 1381 507 1410 478 433 507 1382 506 436 504 1381 507 1382 506 1409 479 1382 506 433 507 433 507 1381 507 1383 505 435 505 434 506 432 508 433 507 1381 507 433 507 435 505 432 508 1381 507 1382 506 433 507 1382 506 1380 508 433 507 1382 506 1379 509 1381 507 432 508 433 507 433 507 1381 507 1380 508 433 507 433 507 432 508 1380 508 432 508 432 508 434 506 1380 508 432 508 432 508 432 508 432 508 434 506 434 506 433 507 433 507 434 506 432 508 433 507 432 508 435 505 1383 505 433 507 433 507 434 506 433 507 433 507 432 508 433 507 434 506 433 507 433 507 432 508 1382 506 432 508 431 509 1381 507 433 507 434 506 434 506 432 508 433 507 434 506 433 507 1380 508 431 509 1381 507 1409 479 1382 506 1383 505 1381 507 435 505 433 507 433 507 1382 506 1380 508 1382 506 433 507 +data: 4465 4365 598 1557 598 479 598 1557 598 1557 598 479 598 479 598 1556 599 479 598 507 593 1562 652 424 624 452 595 1559 595 1560 594 483 571 1584 594 1561 593 484 593 1562 593 1562 593 1562 593 1562 593 1562 593 1563 592 485 592 1562 593 484 593 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 1562 592 1563 592 1562 593 1562 592 1563 592 1563 592 1562 592 1563 592 5165 4439 4394 569 1586 592 485 569 1586 569 1586 569 508 569 508 593 1562 592 485 570 508 592 1563 592 485 594 484 569 1586 569 1586 569 508 569 1586 592 1563 569 508 592 1563 569 1586 592 1563 592 1563 569 1586 569 1585 569 508 569 1586 569 508 569 508 569 508 569 508 592 485 569 508 592 485 569 508 593 485 569 508 569 508 569 508 593 484 570 508 569 1586 593 1562 570 1586 569 1586 592 1563 569 1586 592 1563 592 1563 592 # -name: MODE +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 3778 1903 508 432 508 1380 508 431 509 1379 509 430 510 1379 509 431 509 1382 506 432 508 1378 510 431 509 1379 509 1381 507 431 509 1379 509 432 508 1379 509 1379 509 1380 508 1381 507 431 509 431 509 1380 508 1379 509 430 510 431 509 431 509 432 508 1379 509 430 510 432 508 431 508 1379 509 430 510 1379 509 1381 507 430 509 432 508 431 509 431 509 1378 510 431 509 431 509 431 509 1380 508 1378 510 432 508 430 510 1379 509 1380 508 431 509 432 508 432 508 1379 509 432 508 431 509 431 509 432 508 431 509 431 509 431 508 431 509 432 508 431 509 431 509 431 509 431 509 1381 507 430 510 431 509 431 509 431 509 431 509 431 509 431 509 430 510 431 509 431 509 432 508 1378 510 431 509 431 509 430 510 431 509 432 508 431 509 431 509 430 510 431 509 431 509 1379 509 431 509 1379 509 1380 508 1379 509 1379 509 1379 509 432 508 431 509 431 509 1379 509 431 509 431 509 1379 509 -# -name: POWER -type: parsed -protocol: NEC -address: 04 00 00 00 -command: 04 00 00 00 -# -name: TEMP+ -type: parsed -protocol: NEC -address: 04 00 00 00 -command: 05 00 00 00 -# -name: TEMP- -type: parsed -protocol: NEC -address: 04 00 00 00 -command: 01 00 00 00 -# -name: MODE -type: parsed -protocol: NEC -address: 04 00 00 00 -command: 0D 00 00 00 -# -name: TIMER -type: parsed -protocol: NEC -address: 04 00 00 00 -command: 00 00 00 00 +data: 4465 4364 599 1556 599 479 598 1556 599 1556 599 478 599 479 598 1559 596 505 572 506 571 1584 653 424 624 452 571 1583 572 1583 571 506 571 1583 571 1584 571 506 571 1584 571 1585 570 1585 570 1585 592 1563 592 1562 593 485 592 1563 592 485 593 485 592 485 592 485 592 485 592 485 593 485 592 1563 592 485 592 1563 592 485 592 485 592 485 592 485 592 1563 592 485 592 1563 592 485 592 1563 592 1563 592 1563 592 1563 592 5164 4460 4372 592 1563 592 485 593 1563 592 1563 592 486 591 486 591 1563 592 485 592 485 592 1563 592 485 592 485 592 1563 592 1563 592 485 592 1563 592 1563 592 485 592 1563 592 1563 592 1563 592 1563 592 1563 592 1564 591 486 591 1563 591 485 592 485 592 485 592 485 592 485 592 485 592 485 592 1563 592 485 592 1563 591 486 591 485 592 486 591 485 592 1563 592 485 592 1563 592 485 592 1564 591 1563 592 1563 592 1563 592 # -name: TEMP+ +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 443 457 418 451 424 445 420 449 416 453 422 25403 3487 1758 421 1325 416 445 420 452 423 446 419 1319 422 447 418 450 415 456 419 449 416 1323 418 454 421 1316 414 1326 415 462 424 1307 423 1315 415 1323 418 1322 419 1321 420 449 416 452 423 1316 414 455 420 448 417 453 422 447 418 452 423 448 417 451 424 443 422 450 415 452 423 445 420 450 415 456 419 450 415 452 423 447 418 450 415 456 419 1318 423 447 418 454 421 445 420 450 415 453 422 446 419 451 424 1315 415 1324 417 454 421 446 419 1321 420 1319 422 448 417 452 423 445 420 449 416 453 422 448 417 452 423 445 420 449 416 455 420 1319 422 1314 416 1325 416 1322 419 1322 419 1318 423 1317 424 447 418 1320 421 1317 424 1317 424 1315 415 455 420 449 416 452 423 447 418 451 414 454 421 448 417 453 422 448 417 452 423 444 421 449 416 452 423 447 418 453 422 445 420 450 415 456 419 448 417 453 422 446 419 450 415 455 420 450 415 453 422 448 417 452 423 444 421 448 417 454 421 446 419 452 423 445 420 450 415 453 422 447 418 451 424 446 419 449 416 454 421 447 418 452 423 446 419 452 423 1315 415 451 424 1316 414 456 419 451 414 453 422 1317 424 1316 425 444 421 447 418 452 423 448 417 450 415 455 420 456 419 449 416 446 419 451 414 455 420 1320 421 447 418 452 423 453 422 439 415 1324 417 459 416 446 419 451 424 446 419 1320 421 446 419 1319 422 +data: 4440 4391 572 1583 572 505 572 1584 571 1583 572 505 572 505 572 1583 596 481 573 505 596 1559 626 451 655 422 625 1529 596 1559 572 505 572 1583 572 1582 572 505 572 1583 572 1583 571 1584 571 1584 571 1585 570 1584 594 484 593 1562 592 485 592 485 592 485 593 485 593 484 593 484 593 1562 593 484 593 1562 593 1563 592 1562 592 1563 592 485 593 484 592 485 593 1562 593 484 593 485 592 485 592 485 592 1562 593 1563 592 5163 4462 4370 592 1563 592 485 592 1563 592 1563 592 485 592 485 592 1563 592 485 592 485 593 1562 593 485 593 485 592 1563 592 1563 592 485 592 1562 593 1563 592 484 593 1563 592 1563 592 1563 592 1563 592 1563 592 1563 592 485 592 1563 592 485 592 485 592 485 592 485 592 485 593 485 592 1563 592 485 592 1563 592 1563 592 1563 592 1563 592 485 592 485 592 485 592 1563 591 485 592 486 591 485 592 485 593 1563 591 1563 593 # -name: TEMP- +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 444 455 420 449 416 454 421 448 417 451 424 25402 3487 1758 421 1317 424 445 420 452 423 443 422 1317 424 447 418 451 424 447 418 449 416 1324 417 452 423 1315 415 1324 417 452 423 1316 425 1315 415 1325 416 1323 418 1319 422 449 416 452 423 1318 423 445 420 448 417 453 422 447 418 452 423 446 419 449 416 455 420 447 418 453 422 446 419 452 423 446 419 451 424 444 421 447 418 451 424 445 420 1320 421 448 417 454 421 445 420 452 423 445 420 450 415 454 421 1316 414 1324 417 454 421 448 417 1321 420 1320 421 448 417 453 422 446 419 452 423 446 419 449 416 455 420 448 417 451 424 445 420 1321 420 1319 422 1316 414 1324 417 1324 417 1321 420 1320 421 449 416 1323 418 1323 418 1319 422 1317 424 446 419 453 422 445 420 450 415 453 422 448 417 452 423 447 418 450 415 455 420 448 417 454 421 445 420 451 414 455 420 449 416 454 421 448 417 452 423 446 419 449 416 454 421 447 418 452 423 445 420 450 415 454 421 450 415 454 421 447 418 452 423 444 421 451 424 442 423 449 416 451 424 445 420 450 415 455 420 448 417 454 421 447 418 450 415 457 418 1317 424 448 417 1320 421 448 417 453 422 449 416 1321 420 1320 421 448 417 452 423 449 416 451 424 446 419 448 417 454 421 449 416 452 423 447 418 452 423 1315 415 452 423 447 418 451 424 446 419 1319 422 448 417 451 424 446 419 449 416 1324 417 453 422 1316 414 -# SWING_HORIZONTAL -name: SWING +data: 4467 4390 571 1583 572 505 595 1560 572 1583 572 505 572 505 596 1559 596 482 596 481 597 1559 626 451 655 422 625 1529 596 1559 596 481 572 1582 573 1583 571 505 572 1583 595 1560 594 1561 592 1562 594 1561 593 1562 593 484 593 1563 592 485 592 485 592 485 592 485 593 484 593 485 592 485 592 1562 593 485 592 1563 592 1562 593 1562 594 483 593 485 593 1562 592 485 593 1561 593 484 593 484 593 484 593 1562 593 1562 592 5163 4462 4370 592 1563 593 484 592 1563 592 1563 592 485 592 485 593 1562 593 484 593 485 592 1562 593 484 593 485 592 1562 593 1562 593 485 592 1563 592 1563 592 485 592 1563 592 1562 593 1562 593 1563 592 1563 592 1562 592 485 593 1562 592 485 592 485 592 485 592 485 592 485 592 485 592 485 592 1563 592 485 592 1563 591 1563 592 1563 593 485 592 485 592 1563 592 485 592 1563 591 485 593 485 592 485 592 1563 592 1563 591 +# +# Model: Chigo AC +name: Off type: raw frequency: 38000 duty_cycle: 0.330000 -data: 446 455 420 449 416 461 393 467 419 454 421 25402 3484 1759 419 1319 422 449 416 454 421 447 418 1322 419 449 416 454 421 449 416 452 423 1317 424 444 421 1321 420 1316 425 446 419 1329 422 1308 422 1318 422 1317 424 1314 416 453 422 447 418 1323 418 451 424 444 421 448 417 454 421 449 416 458 417 444 421 449 416 454 421 447 418 453 422 446 419 456 419 445 420 448 417 452 423 446 419 451 424 1316 414 453 422 447 418 453 422 446 419 451 414 455 420 449 416 1324 417 1321 420 452 423 444 421 1318 423 1317 423 445 420 450 415 455 420 447 418 455 420 447 418 451 424 445 420 456 419 444 421 1317 424 1316 424 1315 415 1323 417 452 423 1316 414 456 419 1318 423 448 417 452 423 444 421 450 415 456 419 448 417 453 422 447 418 450 415 454 421 448 417 454 421 446 419 452 423 446 419 449 416 455 420 448 417 452 423 448 417 451 424 451 424 445 420 444 421 447 418 460 415 446 419 451 424 446 419 450 415 454 421 449 416 1321 420 451 424 444 421 449 416 453 422 447 418 454 421 445 420 449 416 456 419 449 416 452 423 447 418 451 424 444 421 451 424 1314 416 453 422 1324 417 445 420 449 416 453 422 1319 422 1315 415 455 420 448 417 452 423 453 422 442 423 451 424 439 415 454 421 447 418 451 424 447 418 1322 418 451 424 442 423 448 417 451 424 1317 423 1315 415 454 421 449 416 460 415 446 419 1320 421 1319 422 -# OFF -name: POWER +data: 6069 7329 602 533 605 506 602 508 576 533 604 507 603 507 603 507 602 508 601 510 599 511 598 512 573 537 597 514 573 537 573 537 573 537 573 537 573 538 572 537 573 538 572 538 572 538 572 538 572 538 572 537 573 537 573 538 572 537 573 538 572 1638 573 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 1639 571 538 572 538 572 1639 572 538 572 538 572 538 572 538 572 538 572 539 571 538 572 538 572 538 572 1639 571 538 572 539 571 538 572 538 572 539 571 1639 572 539 571 539 571 1639 572 539 571 1639 571 539 571 539 571 1639 572 539 571 1639 571 1639 572 539 571 539 571 1639 571 539 571 539 571 539 571 1639 571 7361 598 +# +name: Cool_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 445 455 421 449 416 453 422 447 418 451 424 25400 3494 1753 416 1322 419 450 415 456 420 449 416 1325 416 451 425 444 421 448 417 453 423 1318 423 444 421 1320 421 1316 414 457 419 1320 421 1318 423 1314 417 1322 419 1320 421 449 416 453 422 1317 424 445 420 450 415 456 419 447 418 451 414 456 420 449 416 452 424 448 417 453 422 445 420 450 415 456 419 448 417 452 423 447 418 449 416 453 423 448 417 453 423 446 419 449 416 453 423 447 418 1321 420 451 414 454 422 449 416 1322 419 1319 422 449 416 1322 419 451 424 445 420 449 416 455 421 445 420 449 416 455 420 448 417 452 424 446 419 1321 420 1317 424 1315 416 1324 417 1322 419 1320 421 1320 421 446 419 1319 422 1319 422 1318 423 1313 417 453 423 445 420 450 415 454 421 449 416 454 422 446 419 449 416 456 420 448 417 453 423 444 421 450 415 454 422 447 418 451 424 445 420 450 415 455 420 447 418 452 424 447 418 451 424 445 420 448 417 453 423 446 419 451 424 444 421 448 417 452 423 446 419 451 424 445 420 448 417 451 414 456 420 452 424 443 422 449 416 451 424 448 417 449 416 455 420 1318 423 446 419 1319 422 448 417 451 424 447 418 1320 421 1316 415 455 421 451 414 455 421 449 416 451 424 446 419 1319 422 448 417 454 422 446 419 451 414 1325 416 452 423 447 418 451 424 447 418 1318 423 446 419 449 416 1327 424 1312 419 449 416 455 421 449 416 -# OFF -name: POWER +data: 6073 7299 631 504 632 478 632 478 606 504 606 504 605 504 605 505 604 506 603 508 601 509 600 510 600 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 511 599 1612 598 512 598 511 599 511 599 511 599 512 598 512 598 512 598 512 598 512 598 512 598 1612 598 1612 599 512 598 512 598 511 599 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1612 598 1613 597 512 598 512 598 1613 598 512 598 512 598 512 598 512 598 512 598 512 598 513 597 512 598 512 598 1613 597 513 597 513 597 513 597 513 597 513 597 1613 597 513 597 513 597 1614 597 513 597 1614 596 513 597 513 597 1614 597 513 597 1614 597 513 597 1614 596 1614 596 1614 597 514 596 513 597 513 597 1614 596 7336 623 +# +name: Heat_hi type: raw frequency: 38000 duty_cycle: 0.330000 -data: 645 17766 3059 8884 533 461 557 1427 560 435 584 433 534 458 534 458 534 458 588 404 587 405 586 1399 586 407 584 408 558 1429 555 1457 502 491 525 1460 528 1458 554 1431 554 1431 555 1431 554 438 555 438 554 439 553 440 553 464 528 464 528 464 529 465 528 465 526 467 526 467 527 465 553 439 554 439 554 438 554 439 554 439 553 439 554 439 553 439 553 439 554 440 552 464 528 464 528 465 528 466 527 466 501 492 525 468 526 466 527 466 553 439 554 439 553 440 552 1433 553 1433 553 2936 3024 8893 552 1458 527 465 528 465 527 467 526 467 500 493 524 468 526 467 526 467 552 1434 552 441 552 441 552 1435 550 465 528 1458 527 1458 528 1459 527 1485 501 1485 500 1486 501 491 527 466 528 465 528 465 527 465 528 465 527 465 528 465 528 465 527 465 528 465 527 466 527 466 527 492 500 492 501 492 500 493 500 493 500 492 526 466 527 465 527 465 527 465 527 466 527 466 527 466 527 465 527 466 526 466 527 466 526 467 526 493 499 493 474 518 499 494 500 493 526 2936 3025 8918 526 1459 527 466 527 466 527 466 526 466 527 466 526 467 526 467 525 467 526 1460 525 493 499 493 498 495 498 495 499 493 500 493 525 1460 527 1460 525 1460 526 1460 525 1460 526 1460 526 468 525 1487 499 1487 497 495 498 495 499 493 500 1486 525 1460 525 1460 525 467 525 467 526 467 525 467 526 468 524 1462 524 468 524 494 498 1488 497 1488 499 494 499 493 525 468 525 1461 524 468 525 468 524 468 525 468 525 468 524 468 525 469 524 494 498 494 499 1488 473 1514 524 -# -name: POWER -type: parsed -protocol: NEC -address: 00 00 00 00 -command: 46 00 00 00 -# -name: TEMP+ -type: parsed -protocol: NEC -address: 00 00 00 00 -command: 07 00 00 00 -# -name: TEMP- -type: parsed -protocol: NEC -address: 00 00 00 00 -command: 0C 00 00 00 -# -name: TIMER -type: parsed -protocol: NEC -address: 00 00 00 00 -command: 42 00 00 00 -# -name: MODE -type: parsed -protocol: NEC -address: 00 00 00 00 -command: 09 00 00 00 +data: 6098 7325 631 478 606 504 606 504 606 504 606 504 606 505 604 505 604 507 602 508 601 510 600 510 600 511 599 511 599 511 599 512 598 511 599 511 599 511 599 512 598 511 599 511 599 512 598 512 598 511 599 511 599 511 599 512 598 511 599 512 598 1612 599 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1612 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1613 597 1613 598 512 598 512 598 1613 598 513 597 513 597 512 598 512 598 513 597 513 597 513 597 513 597 513 597 1613 598 513 597 1614 597 1613 597 1613 598 513 597 513 597 513 597 1614 597 1614 597 513 597 1614 596 514 596 513 597 1614 596 513 597 1614 597 1614 596 1614 597 514 596 1614 596 1614 597 1614 596 1614 596 1615 596 7336 623 # -name: POWER +name: Heat_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 9464 4442 637 583 601 584 601 584 601 584 600 582 603 580 604 580 630 555 629 1637 627 1665 598 1668 571 1696 569 1696 594 1672 594 1672 592 1674 593 1673 593 591 594 1673 593 1672 593 591 591 593 569 616 568 616 593 593 591 1674 593 592 593 593 592 1675 592 1675 592 1700 568 1700 568 39559 9409 2272 567 96244 9461 2246 594 +data: 6071 7300 630 504 605 505 605 505 604 505 605 505 605 506 603 507 602 508 601 509 601 510 600 511 599 511 599 511 599 512 598 512 598 512 598 511 599 511 599 511 599 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1612 599 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1613 598 1612 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 599 512 598 512 598 512 598 513 597 1613 598 1613 597 512 598 513 597 1613 598 513 597 512 598 513 597 513 597 513 597 513 597 513 597 513 597 513 597 1613 597 513 598 513 597 513 597 513 597 513 597 513 597 513 597 1613 598 1613 597 513 597 1614 596 513 597 514 596 1613 597 513 597 1614 597 513 597 1614 597 1614 596 1614 596 514 596 1614 597 1614 596 1614 597 7336 623 # -name: SWING +name: Cool_lo type: raw frequency: 38000 duty_cycle: 0.330000 -data: 9505 4415 688 531 602 584 602 585 601 584 601 581 604 580 605 580 605 581 628 1636 628 1665 599 1667 597 1670 595 1671 595 1671 596 1672 595 1673 595 1673 595 592 594 591 595 1672 595 590 595 590 595 591 594 591 594 590 595 1672 595 1672 595 591 594 1672 595 1672 595 1672 595 1672 595 39565 9410 2244 592 96225 9442 2244 592 +data: 6068 7327 603 509 600 534 604 506 576 533 577 533 603 506 603 507 602 507 601 509 600 510 599 511 597 513 573 537 573 537 573 537 573 537 573 537 573 538 572 537 573 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 1638 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 1638 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 1638 572 1638 572 538 572 538 572 1638 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 538 572 1639 571 538 572 1639 571 1639 571 1639 571 538 572 1639 571 539 571 539 571 1639 571 539 571 1639 571 539 571 539 571 1639 571 539 571 1639 571 1639 571 1639 571 539 571 1639 571 1639 571 539 571 539 571 1639 571 7360 597 # -name: TIMER +name: Dh type: raw frequency: 38000 duty_cycle: 0.330000 -data: 9515 4477 575 611 576 551 636 610 576 611 575 610 576 581 606 580 606 580 606 1661 631 1639 628 1666 600 1667 599 1671 596 1673 595 1673 595 1673 595 593 594 617 570 594 593 1674 594 617 570 617 570 617 570 617 570 1699 569 1699 569 1699 569 618 569 1699 569 1698 570 1698 570 1699 569 +data: 6094 7326 630 479 630 480 605 505 605 505 604 506 603 506 603 507 602 509 600 510 599 511 599 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 1613 597 512 598 512 598 512 598 512 598 512 598 512 598 512 598 512 598 513 597 512 598 1613 598 512 598 512 598 513 597 512 598 512 598 513 597 513 597 513 597 513 597 512 598 513 597 513 597 513 597 513 597 513 597 513 597 1614 597 1613 597 513 597 513 597 1614 597 513 597 513 597 513 597 513 597 513 597 513 597 513 597 513 597 513 597 1614 597 513 597 513 597 513 597 513 597 513 597 1614 597 1614 596 514 596 1614 597 513 597 1614 597 514 596 514 596 1614 596 514 596 1614 596 514 596 514 596 1614 596 1614 596 514 596 514 596 1615 596 1615 595 7336 623 diff --git a/assets/resources/infrared/assets/audio.ir b/assets/resources/infrared/assets/audio.ir index 14c18c04c2..0aa0dcebe8 100644 --- a/assets/resources/infrared/assets/audio.ir +++ b/assets/resources/infrared/assets/audio.ir @@ -1,2178 +1,3525 @@ Filetype: IR library file Version: 1 -# Last Updated 14th Apr, 2023 -# Last Checked 17th May, 2023 +# Last Updated 30th May, 2023 +# Last Checked 30th May, 2023 # -name: POWER +name: Power type: parsed protocol: NEC address: 77 00 00 00 command: F1 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 77 00 00 00 command: F3 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 77 00 00 00 command: FB 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 77 00 00 00 command: FC 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 1A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 10 E7 00 00 command: 46 B9 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 10 E7 00 00 command: 06 F9 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 10 E7 00 00 command: 47 B8 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 10 E7 00 00 command: 41 BE 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 10 00 00 00 command: 0C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5 address: 10 00 00 00 command: 0D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 10 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 10 00 00 00 command: 11 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 40 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 41 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 45 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 48 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 2D D3 00 00 command: 12 ED 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 2D D3 00 00 command: 11 EE 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 2D D3 00 00 command: 10 EF 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 2D D3 00 00 command: 13 EC 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC15 address: 44 00 00 00 command: 15 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC15 address: 44 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC15 address: 44 00 00 00 command: 13 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: SIRC15 address: 44 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 02 A0 00 00 command: 80 7F 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 02 A0 00 00 command: AA 55 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 02 A0 00 00 command: 6A 95 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 02 A0 00 00 command: EA 15 00 00 # Standby -name: POWER +name: Power type: parsed protocol: NEC address: 04 00 00 00 command: 16 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 04 00 00 00 command: 13 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 04 00 00 00 command: 0B 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 04 00 00 00 command: 06 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 29 A1 00 00 command: 7F 80 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 29 A1 00 00 command: 9B 64 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 29 A1 00 00 command: 9E 61 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 29 A1 00 00 command: 9F 60 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 7A 00 00 00 command: 1F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 1C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 0B 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 0F 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 05 00 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4617 4406 584 448 557 448 557 449 556 449 555 1430 580 1432 577 452 552 454 550 1460 549 1462 548 1462 549 1462 548 457 548 457 548 457 548 457 548 4463 548 457 548 457 548 457 548 458 548 1462 548 1462 548 1462 548 457 548 1463 547 1462 548 1462 548 458 547 458 548 458 548 458 547 1463 547 458 547 458 547 458 548 1463 547 55451 4606 4440 549 457 548 457 548 457 548 457 548 1462 548 1462 548 457 548 457 548 1462 548 1461 549 1462 548 1462 548 457 548 457 548 457 548 457 548 4462 548 457 548 457 548 457 548 457 548 1462 548 1462 548 1462 548 457 548 1462 548 1462 548 1462 547 457 548 458 547 458 547 458 547 1462 548 458 547 458 547 458 547 1462 548 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4614 4408 583 449 555 450 555 451 553 451 554 1432 577 1434 576 453 551 454 550 1460 549 1461 549 1461 549 1461 549 457 548 457 548 457 548 457 548 4461 548 457 548 457 548 457 548 457 548 457 548 457 548 457 548 1462 548 1461 549 1461 549 1461 548 457 548 1462 549 1461 549 1461 548 457 548 457 548 457 548 458 547 1462 548 55443 4606 4440 549 456 549 456 549 456 549 456 549 1461 549 1461 549 457 548 457 548 1461 549 1461 549 1461 549 1461 549 456 549 457 548 457 548 457 548 4461 549 456 549 457 548 457 548 457 548 457 548 457 548 457 548 1462 548 1461 549 1461 549 1461 548 457 548 1461 549 1461 549 1461 549 457 548 457 548 458 547 457 548 1462 548 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4588 4435 556 477 556 449 555 450 555 451 554 1428 582 1429 581 451 553 452 552 1457 552 1458 551 1461 548 1463 547 458 547 458 547 458 547 458 547 4464 547 458 547 458 547 458 547 458 548 458 547 458 547 458 548 458 547 1463 547 1463 547 1464 546 459 547 1464 546 1464 546 1463 547 1464 546 459 546 459 546 459 546 1464 547 55456 4581 4468 546 458 547 458 547 458 547 458 547 1463 547 1463 547 458 547 459 547 1463 547 1464 546 1464 546 1464 547 459 546 459 546 459 546 459 547 4465 546 459 546 459 546 459 546 459 546 459 547 459 546 459 546 459 546 1464 546 1464 546 1465 546 460 545 1465 545 1465 545 1465 546 1465 546 460 545 460 546 460 545 1466 544 # -name: POWER +name: Power type: parsed protocol: NECext address: 3F 5C 00 00 command: 18 E7 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 3F 5C 00 00 command: 55 AA 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 3F 5C 00 00 command: 59 A6 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 3F 5C 00 00 command: 15 EA 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 FB 00 00 command: 1E E1 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 FB 00 00 command: 1D E2 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 FB 00 00 command: 18 E7 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 FB 00 00 command: 0A F5 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 80 D9 00 00 command: 8A 75 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 80 D9 00 00 command: 88 77 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 80 D9 00 00 command: 8C 73 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 78 0E 00 00 command: 00 FF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 78 0E 00 00 command: 19 E6 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 78 0E 00 00 command: 1C E3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 78 0E 00 00 command: 18 E7 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 14 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 10 00 00 00 # # ON -name: POWER +name: Power type: parsed protocol: RC5 address: 10 00 00 00 command: 0E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 10 E7 00 00 command: 0C F3 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 10 E7 00 00 command: 09 F6 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 3309 1906 410 1178 411 1177 412 416 435 445 406 448 414 440 411 1150 439 415 436 1178 411 1177 412 442 409 444 407 1181 408 419 432 1182 407 420 442 1146 433 448 414 440 411 442 409 444 407 446 416 438 413 441 410 443 408 419 432 1182 407 446 405 422 440 414 437 416 435 445 406 1181 408 446 405 448 414 440 411 442 409 418 433 446 416 438 413 1175 414 413 438 1176 413 414 437 443 408 419 432 421 441 413 438 42493 3308 3343 355 43011 3309 3316 382 43009 3310 3314 384 43007 3303 3347 361 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 3307 1879 437 1177 412 1176 413 415 436 417 434 446 405 448 414 1174 415 412 439 1149 440 1147 442 438 413 440 411 1177 412 441 410 1178 411 442 409 1179 410 417 434 419 432 448 414 440 411 442 409 444 407 446 416 438 413 441 410 1151 438 415 436 444 407 446 416 412 439 414 437 1177 412 1176 413 414 437 416 435 1152 437 1177 412 416 435 444 407 446 416 1146 433 421 441 1173 406 422 440 413 438 442 409 444 407 40133 3308 3341 357 42862 3301 3347 361 42859 3304 3319 379 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 3310 1876 440 1174 415 1173 405 422 440 414 437 443 408 445 406 1182 407 420 442 1173 406 1182 407 420 442 412 439 1175 414 440 411 1150 439 415 436 1152 437 416 435 419 432 447 415 440 411 442 409 418 433 420 442 438 413 440 411 1177 412 415 436 418 433 420 442 438 413 441 410 1151 438 1150 439 415 436 1178 411 1150 439 1149 440 414 437 417 434 445 406 1155 434 420 442 438 413 1175 414 413 438 442 409 444 407 39503 3303 3320 388 42857 3304 3319 379 42867 3305 3317 381 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 3305 1907 409 1178 411 1177 412 442 409 418 433 447 415 439 412 1176 413 441 410 1177 412 1176 413 441 410 443 408 1180 409 445 406 1181 408 446 416 1172 406 448 413 440 411 442 409 445 406 447 414 439 412 442 409 444 407 447 414 1173 405 449 413 441 410 443 408 446 405 448 413 1174 415 440 411 442 409 1178 411 1177 412 1177 412 442 409 444 407 447 415 439 412 441 410 444 407 1180 409 445 406 448 414 440 411 41125 3303 3347 360 42906 3308 3315 382 # -name: MUTE +name: Mute type: parsed protocol: NECext address: BA A0 00 00 command: 01 FE 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: AC 02 20 00 command: D1 03 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Kaseikyo address: A0 02 20 00 command: 00 02 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Kaseikyo address: A0 02 20 00 command: 10 02 00 00 # -name: MUTE +name: Mute type: parsed protocol: Kaseikyo address: A0 02 20 00 command: 20 03 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 02 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 01 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 0B 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 06 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9150 4435 643 1608 643 468 644 469 642 364 749 468 643 447 665 449 663 469 643 452 660 470 642 450 662 442 670 449 662 469 643 1579 672 1608 642 1580 671 1609 641 1607 643 1578 672 1607 643 1608 642 1606 644 1606 644 1606 644 1607 643 1576 675 1579 671 1605 674 438 645 466 673 438 646 466 674 437 673 439 672 439 673 438 646 1604 673 1577 673 1578 673 1577 674 1577 673 23799 9095 4485 616 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC42 address: 01 00 00 00 command: 0C 00 00 00 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9151 4434 644 1608 643 376 737 379 733 446 666 449 663 468 644 469 643 468 644 468 644 468 644 447 665 448 664 468 644 450 662 1608 643 1607 644 1576 676 1607 644 1608 643 1578 674 1608 643 1577 674 1579 672 1607 643 1608 643 1607 644 1607 644 1608 643 448 664 1608 643 448 664 468 644 469 643 380 732 468 644 469 643 1607 644 468 644 1608 643 1608 644 1609 643 1608 643 23837 9152 4434 642 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8968 4344 670 460 670 460 670 1566 669 462 668 486 643 487 642 489 641 1595 640 490 640 491 640 1596 640 491 640 1596 640 1596 640 1596 640 491 640 1596 640 1596 640 1596 640 1596 640 1596 640 1596 640 1596 640 1622 640 491 640 491 640 491 640 491 640 491 640 491 640 491 640 491 639 # -name: POWER +name: Power type: parsed protocol: SIRC address: 10 00 00 00 command: 2E 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 FD 00 00 command: 01 FE 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 FD 00 00 command: 03 FC 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 FD 00 00 command: 09 F6 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 FD 00 00 command: 07 F8 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1042 1461 540 1460 541 1460 541 1460 541 1459 542 1459 542 454 536 460 540 456 544 452 538 458 542 454 546 450 540 456 544 1457 544 1456 545 1448 542 50531 1041 1462 539 1462 539 1461 540 1461 540 1460 541 1460 541 455 545 451 539 457 543 480 510 459 541 481 519 451 539 457 543 1457 543 1457 544 1449 541 50515 1037 1467 544 1456 545 1456 545 1455 546 1455 535 1465 536 486 514 483 517 479 511 485 515 481 509 487 513 483 517 478 512 1462 539 1462 539 1454 536 50537 1035 1467 544 1457 544 1457 544 1456 545 1456 544 1456 545 477 513 483 517 479 511 486 514 481 519 477 513 484 516 479 511 1464 536 1463 538 1455 546 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1010 1491 509 1490 510 1488 512 487 513 487 513 1486 514 1485 515 484 516 1483 517 482 518 482 518 1481 509 1489 511 488 512 487 513 1486 514 484 516 50963 1011 1489 511 1488 512 1487 513 485 515 486 514 1485 515 1484 516 484 516 1483 517 482 518 482 518 1481 509 1489 511 489 511 489 511 1487 513 486 514 50986 1008 1492 518 1480 510 1488 512 487 513 487 513 1486 514 1484 516 484 516 1483 517 482 518 481 519 1480 510 1488 512 487 513 487 513 1486 514 484 516 50972 1012 1488 512 1486 514 1484 516 483 517 483 517 1482 518 1480 510 489 511 1487 513 486 514 486 514 1485 515 1483 517 483 517 483 517 1481 509 490 510 50976 1008 1491 509 1489 511 1487 513 485 515 485 515 1484 516 1481 509 491 509 1489 511 488 512 488 512 1487 513 1485 515 484 516 484 516 1483 517 481 509 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1011 1479 517 477 516 481 512 1480 516 1473 513 482 511 485 518 1473 513 482 511 1481 515 1474 512 482 511 485 518 1473 513 1477 509 486 517 1473 513 50728 1014 1475 511 484 509 487 516 1475 511 1479 517 477 516 480 513 1478 508 487 516 1475 511 1479 517 478 514 480 513 1479 517 1473 513 508 484 1479 517 50725 1016 1473 513 481 512 484 519 1473 513 1477 509 485 518 478 515 1476 510 485 518 1473 513 1477 509 486 517 478 515 1476 510 1480 516 479 514 1476 510 50735 1069 1421 513 481 512 484 509 1483 513 1477 509 486 517 479 514 1477 509 486 517 1474 512 1479 507 488 515 480 513 1479 507 1483 513 482 511 1479 517 50733 1011 1478 508 513 490 506 486 1478 508 1483 513 508 485 511 482 1482 514 508 485 1480 516 1473 513 508 485 511 482 1483 513 1477 509 512 491 1473 513 50735 1008 1480 516 479 514 508 485 1480 516 1474 512 509 484 486 517 1472 514 508 485 1480 516 1474 512 509 484 512 481 1482 514 1477 509 512 491 1472 514 50738 1006 1509 487 508 485 486 507 1509 487 1503 483 513 490 505 488 1502 484 512 491 1473 513 1503 483 512 491 505 488 1476 510 1507 489 506 487 1503 483 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 1010 1479 517 1474 512 509 484 512 491 505 488 507 486 510 483 512 491 505 488 508 485 1505 491 1474 512 1478 508 1483 513 1477 509 1482 514 1475 511 50713 1005 1483 513 1475 511 511 482 513 490 505 488 507 486 483 510 511 482 487 516 505 488 1501 485 1478 508 1483 513 1476 510 1479 507 1483 513 1474 512 50707 1012 1501 485 1479 506 513 490 505 488 507 486 509 484 511 482 487 516 505 488 508 485 1504 482 1482 514 1476 592 1396 590 1400 513 1476 510 1478 508 50715 1015 1473 513 1476 510 484 508 513 490 504 489 480 513 508 485 483 510 511 482 488 515 1473 513 1477 509 1480 516 1474 512 1477 591 1397 516 1472 514 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1041 1462 538 1462 538 485 515 481 519 478 512 484 516 1458 542 1458 542 1459 541 481 519 1481 519 1455 545 1482 518 1456 544 479 511 486 514 474 516 50532 1039 1464 536 1490 510 487 513 483 517 480 510 486 514 1460 540 1486 514 1460 540 483 517 1457 543 1484 516 1458 542 1458 542 481 519 477 513 476 513 50534 1036 1467 543 1457 543 480 509 460 540 483 517 479 511 1463 537 1463 537 1464 536 486 514 1487 513 1461 539 1461 539 1462 538 484 516 481 519 469 510 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1042 1461 539 457 543 1458 542 1458 542 1458 542 1458 542 454 536 461 539 457 543 1457 543 453 537 460 540 456 544 452 538 1463 537 1463 537 1456 544 50530 1065 1438 572 424 566 1434 566 1435 565 1435 565 1436 544 452 537 459 572 424 545 1456 544 451 539 458 542 454 536 460 540 1461 539 1461 539 1454 536 50538 1036 1467 543 452 537 1464 536 1464 536 1464 536 1465 545 450 540 456 544 452 537 1464 536 460 540 455 545 452 538 458 542 1459 541 1460 540 1452 538 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1044 1456 544 455 545 455 534 1464 536 1462 538 1460 540 1458 542 1456 544 1455 545 1453 537 1461 539 460 540 459 541 459 561 437 542 457 543 456 544 50915 1016 1483 517 482 518 482 518 1481 509 1489 511 1487 513 1486 514 1485 515 1483 517 1482 508 1490 510 489 511 488 512 487 513 487 513 486 514 485 515 50956 1047 1452 538 462 538 462 538 1461 539 1460 540 1458 542 1457 543 1456 544 1454 546 1453 547 1451 539 461 539 460 540 460 540 459 541 459 541 457 543 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1017 1484 516 1482 518 481 519 1480 510 1489 511 1487 513 1486 514 1485 515 1483 517 482 518 1480 510 490 510 489 511 489 511 488 512 488 512 486 514 50956 1015 1486 514 1484 516 484 516 1483 517 1482 518 1480 510 1489 511 1488 512 1486 514 486 514 1485 515 484 516 484 516 483 517 483 517 482 518 481 509 50960 1011 1488 512 1486 514 486 514 1485 515 1483 517 1482 518 1480 510 1488 512 1486 514 486 514 1484 516 483 517 483 517 482 518 481 519 481 508 489 511 50961 1040 1461 539 1459 541 459 541 1458 542 1456 544 1455 545 1454 546 1452 538 1460 540 460 540 1458 542 457 543 456 544 456 544 455 545 455 545 453 547 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1006 1485 511 1479 517 1473 513 509 484 511 482 514 489 506 487 508 485 511 482 513 490 505 488 1477 509 1481 515 1475 511 1480 516 1474 512 1477 509 50734 1007 1483 513 1477 509 1482 514 507 486 509 484 511 492 503 490 506 487 508 485 510 483 513 490 1474 512 1479 517 1473 513 1477 509 1481 515 1474 512 50729 1012 1477 509 1481 515 1474 512 509 484 512 491 504 489 506 487 508 485 511 482 513 490 506 487 1477 509 1481 515 1475 511 1479 517 1473 513 1476 510 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1012 1503 483 514 489 1475 511 483 510 486 517 478 515 481 512 483 510 486 517 1473 513 508 485 1480 516 1475 511 1479 507 1483 513 1477 509 1480 588 50646 1012 1476 510 512 491 1473 513 508 485 485 508 488 515 480 513 482 511 512 481 1482 514 482 511 1480 516 1473 513 1478 508 1482 514 1476 510 1479 590 50651 1007 1507 489 507 485 1478 508 514 489 506 487 509 484 485 508 488 515 506 487 1503 483 513 490 1474 512 1478 508 1483 513 1477 509 1481 515 1473 513 50721 1009 1505 491 478 515 1475 511 510 483 486 517 478 515 507 486 483 510 512 491 1472 514 508 485 1505 491 1473 513 1477 509 1481 587 1403 510 1478 508 50733 1008 1506 490 479 514 1477 509 512 481 514 489 506 487 508 485 484 509 513 490 1473 513 509 483 1481 515 1474 512 1479 507 1482 514 1476 510 1478 590 50642 1006 1508 488 508 485 1478 508 487 516 479 514 481 512 510 483 486 517 504 489 1474 512 510 483 1482 514 1475 511 1479 507 1483 513 1477 509 1480 516 # -name: POWER +name: Power type: parsed protocol: NEC address: 20 00 00 00 command: 09 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 1F 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 0E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 1A 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 02 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 05 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 20 00 00 00 command: 0C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 12 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 1E 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 03 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 01 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 1F 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 09 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 10 E7 00 00 command: 01 FE 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 10 E7 00 00 command: 00 FF 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 10 E7 00 00 command: 2B D4 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 78 0E 00 00 command: 09 F6 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 78 0E 00 00 command: 01 FE 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 78 0E 00 00 command: 02 FD 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 06 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 02 00 00 00 command: 0A 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 02 00 00 00 command: 0D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 02 00 00 00 command: 1C 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 02 00 00 00 command: 07 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 14 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 08 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 86 FF 00 00 command: 14 EB 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 86 FF 00 00 command: 13 EC 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 86 FF 00 00 command: 1B E4 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 86 FF 00 00 command: 2A D5 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 07 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 00 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 40 AF 00 00 command: 19 E6 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 02 BD 00 00 command: 26 D9 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 02 BD 00 00 command: 28 D7 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 02 BD 00 00 command: 53 AC 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 02 BD 00 00 command: AD 52 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 10 00 00 00 command: 2F 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC address: 10 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC address: 10 00 00 00 command: 13 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 85 23 00 00 command: 99 66 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 85 23 00 00 command: 97 68 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 85 23 00 00 command: 57 A8 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 85 23 00 00 command: 47 B8 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 08 00 00 00 command: 10 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 08 00 00 00 command: 16 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 86 FF 00 00 command: 21 DE 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 86 FF 00 00 command: 2B D4 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: BA 4B 00 00 command: 03 FC 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: BA 4B 00 00 command: 02 FD 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: BA A0 00 00 command: 03 FC 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: BA A0 00 00 command: 02 FD 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1014 1477 517 478 514 509 483 487 515 480 512 484 508 488 514 1479 515 1476 508 1483 511 1481 513 1478 516 1475 509 1482 512 1479 515 480 512 483 509 50775 1014 1477 517 504 488 508 484 513 489 506 486 510 482 514 488 1478 516 1475 509 1483 511 1480 514 1477 517 1474 510 1482 512 1478 516 505 487 509 483 50770 1009 1481 513 508 484 512 490 506 486 510 482 514 488 508 484 1481 513 1478 516 1475 509 1483 511 1480 514 1477 517 1475 509 1482 512 509 483 513 489 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1010 1508 486 509 483 513 489 507 485 512 490 505 487 510 482 1509 485 511 491 1501 483 1509 485 1507 487 1504 490 1502 482 1509 485 511 491 1500 484 50779 1010 1506 488 508 484 512 490 505 487 509 483 513 489 506 486 1506 488 507 485 1506 488 1503 481 1510 484 1508 486 1505 489 1503 481 514 488 1503 491 # -name: POWER +name: Power type: parsed protocol: NECext address: BA A0 00 00 command: 4C B3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: BA A0 00 00 command: 01 FD 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1004 1513 481 515 487 1478 516 505 487 510 482 1484 510 1481 513 508 484 512 490 1475 509 513 489 1477 507 1484 510 511 481 515 487 1479 515 1474 510 50774 1005 1484 510 513 489 1476 508 513 489 508 484 1482 512 1479 515 506 486 511 481 1483 511 512 490 1475 509 1483 511 510 482 515 487 1504 490 1475 509 50777 1013 1503 491 506 486 1505 489 507 485 512 490 1501 483 1508 486 510 482 514 488 1503 481 515 487 1504 490 1500 484 512 490 506 486 1506 488 1502 482 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 1014 1477 507 514 488 508 484 512 490 505 487 509 483 513 489 507 485 1480 514 1477 517 1475 509 1483 511 1480 514 1477 517 1475 509 1482 512 508 484 50774 1004 1486 508 513 489 507 485 511 491 504 488 508 484 513 489 505 487 1479 515 1476 508 1484 510 1481 513 1478 516 1475 509 1482 512 1480 514 507 485 50771 1007 1507 487 509 483 513 489 507 485 511 481 515 487 508 484 513 489 1502 482 1483 511 1481 513 1479 515 1476 508 1484 510 1481 513 1478 516 506 486 # -name: POWER +name: Power type: parsed protocol: NECext address: BA 4B 00 00 command: 4C B3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: BA 4B 00 00 command: 01 FE 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 83 22 00 00 command: 0A F5 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 83 22 00 00 command: 01 FE 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 35 00 00 00 command: 45 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 35 00 00 00 command: 1B 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 35 00 00 00 command: 09 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 35 00 00 00 command: 51 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 22 00 00 command: 08 F7 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 0A 1D 00 00 command: 08 F7 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 0A 1D 00 00 command: 0A F5 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 0A 1D 00 00 command: 03 FC 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 0A 1D 00 00 command: 01 FE 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 06 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 07 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 1E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 80 00 00 00 command: 01 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 80 00 00 00 command: 03 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 80 00 00 00 command: 06 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 2C 00 00 00 command: 17 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 2C 00 00 00 command: 16 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 83 22 00 00 command: 16 E9 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 83 22 00 00 command: 0F F0 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 22 00 00 command: 0C F3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 83 22 00 00 command: 15 EA 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: A0 02 20 00 command: D0 03 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: C8 91 00 00 command: 00 FF 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: C8 91 00 00 command: 20 DF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: C8 91 00 00 command: 1E E1 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: C8 91 00 00 command: 1F E0 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC6 address: 10 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC6 address: 10 00 00 00 command: 11 00 00 00 # -name: POWER +name: Power type: parsed protocol: RC6 address: 10 00 00 00 command: 0C 00 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4559 4461 546 490 515 495 521 490 515 495 489 1484 516 1482 550 486 519 491 493 1480 520 1478 522 1477 523 1475 546 490 515 495 521 490 515 495 489 4493 545 491 525 486 519 491 514 496 488 1484 516 1483 517 1481 551 486 488 1485 515 1483 517 1482 550 486 519 491 525 486 519 491 493 1479 542 494 522 489 516 467 517 1482 550 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4550 4469 548 462 543 467 549 461 544 466 518 1481 520 1479 542 468 548 462 522 1477 523 1476 514 1485 515 1483 549 461 544 466 550 461 544 466 518 4491 547 463 542 468 548 462 543 467 549 462 543 467 549 461 523 1476 514 1485 515 1484 516 1482 550 461 513 1486 514 1485 515 1483 549 461 544 466 550 461 544 493 491 1481 540 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4496 4442 513 503 488 502 489 501 490 500 491 1505 487 1508 484 505 486 504 487 1508 484 1511 492 1503 489 1499 514 484 486 504 487 502 489 501 490 4449 517 499 492 499 492 497 483 507 484 1511 492 1504 488 1499 514 483 487 1509 483 1512 491 1504 488 503 488 501 490 500 491 499 492 1504 488 501 490 500 491 492 509 1494 488 55126 4496 4446 541 482 488 502 489 501 490 500 491 1505 487 1508 484 505 486 504 487 1508 484 1503 510 1493 489 1480 512 504 487 503 488 502 489 500 491 4449 517 498 493 497 483 507 484 505 486 1502 511 1492 490 1504 488 502 489 1507 485 1509 483 1512 491 473 518 498 493 496 484 505 486 1510 483 499 512 484 486 504 487 1508 484 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4492 4434 510 505 486 505 486 504 487 503 488 1481 511 1484 518 499 492 498 493 1476 516 1479 513 1483 519 1469 596 402 516 500 491 499 492 498 493 4447 518 498 493 497 483 507 484 506 485 504 487 503 488 494 517 1485 486 1483 519 1476 516 1480 512 504 486 1508 484 1486 517 1479 565 425 513 502 488 501 490 492 509 1467 515 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4500 4436 516 504 486 510 490 505 485 510 490 1500 491 1474 517 505 485 484 516 1501 490 1501 490 1501 490 1501 490 505 485 511 489 506 484 485 515 4449 513 482 508 513 487 508 482 514 486 1504 487 1504 487 1504 487 482 508 1509 482 1509 492 1499 492 504 486 509 491 504 486 509 491 1500 491 504 486 510 490 478 512 1505 486 55017 4492 4444 508 512 488 508 482 513 487 508 482 1508 483 1482 509 513 487 508 482 1509 482 1509 482 1483 508 1483 508 513 487 508 482 514 486 509 481 4457 515 506 484 511 489 506 484 511 489 1501 490 1475 516 1501 490 506 484 1480 511 1507 484 1480 511 511 489 506 484 512 488 507 483 1507 484 512 488 507 483 512 488 1503 488 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4493 4443 509 512 488 507 483 512 488 507 483 1482 509 1482 509 512 488 507 483 1482 509 1482 509 1482 509 1482 509 512 488 507 483 513 487 508 482 4457 516 505 485 510 490 505 485 510 490 505 485 511 489 505 485 1480 511 1480 511 1480 511 1481 510 484 516 1476 515 1476 515 1476 515 481 509 486 514 481 509 486 514 1476 515 55014 4498 4438 514 482 508 487 513 482 508 488 512 1477 514 1477 514 482 508 487 513 1477 514 1477 514 1477 514 1477 514 482 518 477 513 482 518 477 513 4451 511 485 515 479 511 485 515 480 510 485 515 480 510 485 515 1475 516 1475 516 1476 515 1476 515 480 510 1481 510 1481 510 1481 510 486 514 481 509 486 514 481 509 1482 509 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4524 4473 512 516 491 511 486 516 491 511 496 1482 522 1482 522 506 491 512 495 1483 521 1483 521 1483 521 1483 521 506 491 512 495 507 490 512 495 4475 521 507 490 513 494 508 489 513 494 1484 520 1484 520 1483 521 507 490 1488 516 1488 516 1488 516 511 496 506 491 511 496 506 491 1488 516 511 496 506 491 512 495 1483 521 55356 4533 4463 512 516 491 511 486 516 491 511 496 1507 487 1492 512 515 492 510 487 1492 512 1492 512 1491 513 1491 513 515 492 510 487 515 492 510 487 4484 512 516 491 511 496 506 491 512 495 1483 521 1482 522 1482 522 506 491 1488 516 1487 517 1487 517 511 496 506 491 512 495 506 491 1488 516 512 495 507 490 512 495 1483 521 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4533 4464 521 507 490 512 495 507 490 513 494 1484 520 1484 520 508 489 513 494 1484 520 1484 520 1483 521 1483 521 506 491 511 496 506 491 512 495 4475 521 507 490 512 495 507 490 513 494 508 489 513 494 508 489 1490 514 1490 514 1490 514 1490 514 514 493 1485 519 1485 519 1485 519 509 488 515 492 510 487 516 491 1487 517 55369 4531 4465 520 508 489 514 493 509 488 515 492 1486 518 1486 518 509 488 514 493 1486 518 1485 519 1485 519 1485 519 509 488 514 493 509 488 515 492 4478 518 511 486 516 491 511 496 506 491 512 495 507 490 512 495 1483 521 1483 521 1483 521 1483 521 507 490 1488 516 1488 516 1488 516 512 495 507 490 513 494 508 489 1490 514 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4530 4465 521 507 490 513 494 507 490 513 494 1509 496 1483 521 506 491 512 495 1508 486 1492 512 1492 513 1491 513 514 493 509 488 514 493 509 488 4483 513 514 493 509 488 515 492 510 487 515 492 510 487 515 492 510 487 1517 488 1491 513 1490 515 513 494 1510 494 1484 520 1483 521 1483 521 506 491 512 495 506 491 1487 517 55357 4528 4468 518 510 487 515 492 510 487 515 492 1512 493 1485 519 509 488 514 493 1510 494 1483 522 1483 521 1482 512 516 491 511 486 516 491 511 486 4484 512 516 491 511 486 516 491 511 486 516 491 511 486 516 491 511 496 1507 487 1491 513 1491 514 514 493 1510 495 1484 521 1483 522 1483 522 506 491 511 486 516 491 1513 491 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4495 4440 512 509 491 504 486 509 491 504 486 1478 513 1479 512 509 491 504 486 1478 513 1479 512 1479 512 1479 512 509 491 504 486 509 491 504 486 4452 511 511 489 506 484 511 489 506 484 511 489 506 484 511 489 506 484 1480 511 1480 511 1480 511 510 491 1500 491 1475 516 1475 516 1475 516 504 486 510 490 505 485 1479 512 55017 4497 4439 513 507 483 513 487 507 483 513 487 1476 515 1477 514 507 483 513 487 1476 515 1476 515 1477 514 1477 514 481 509 512 488 507 483 512 488 4451 512 509 491 504 486 509 491 504 486 483 517 504 486 509 492 504 486 1504 487 1504 487 1478 513 508 482 1509 482 1509 482 1509 482 1483 508 513 487 508 482 513 487 1504 487 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 4501 4435 517 504 486 510 490 505 485 510 490 1475 516 1475 516 506 484 511 489 1476 515 1476 515 1476 515 1477 514 507 483 512 488 507 483 513 487 4451 511 510 490 479 511 484 516 506 484 1481 510 511 489 506 484 511 489 1476 515 1476 515 1477 514 507 483 512 488 1477 514 1477 514 1478 513 508 482 513 487 508 482 1484 517 55011 4496 4440 512 509 491 478 512 483 517 504 486 1480 511 1480 511 484 516 505 485 1480 511 1480 511 1481 510 1481 510 484 516 506 484 511 489 506 484 4455 517 504 486 509 491 504 486 483 517 1474 517 505 485 510 490 505 485 1480 511 1480 511 1481 510 511 489 480 510 1481 510 1481 510 1482 509 485 515 507 483 512 488 1477 514 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 2C 00 00 00 command: 1E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 2C 00 00 00 command: 1F 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4504 4432 511 509 492 504 486 509 492 504 486 1478 514 1477 515 507 484 512 489 1476 516 1475 517 1475 517 1474 518 503 487 509 492 503 487 508 493 4446 508 513 488 507 483 512 489 507 483 512 489 506 484 511 490 506 484 1481 511 1480 512 1479 513 509 492 1473 519 1473 519 1472 509 1482 510 511 490 506 484 511 490 1475 517 54985 4498 4437 517 504 486 509 492 504 486 509 492 1473 519 1472 509 512 489 506 484 1481 511 1480 512 1480 512 1479 513 508 493 502 488 507 483 512 489 4449 516 506 485 511 490 505 485 510 491 505 485 510 491 504 486 509 492 1473 519 1473 508 1483 561 434 515 1476 516 1475 517 1474 518 1473 519 502 488 507 483 512 489 1476 516 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 4531 4406 516 478 512 484 538 457 544 452 538 1453 518 1473 519 476 546 450 540 1451 509 1482 510 1481 511 1480 512 483 539 457 544 452 538 457 544 4420 513 482 540 456 545 450 540 455 546 1445 547 449 541 454 536 458 543 1449 543 1449 543 1448 544 451 539 456 545 1445 547 1445 547 1444 537 458 543 453 537 457 544 1448 544 54957 4495 4440 514 481 520 477 513 482 519 476 514 1476 516 1475 517 478 512 484 517 1474 518 1473 519 1472 520 1471 521 474 516 479 511 484 517 479 511 4452 512 509 492 503 487 508 493 503 487 1477 515 507 483 512 489 506 484 1481 511 1481 511 1480 512 509 492 503 487 1478 514 1478 514 1477 515 506 484 511 490 505 485 1480 512 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4551 4468 549 461 544 493 523 460 545 466 518 1480 520 1479 542 468 548 489 495 1477 523 1475 515 1484 516 1483 549 461 544 493 523 487 518 466 518 4490 548 462 543 493 523 488 517 466 550 461 544 466 550 460 545 465 519 1480 520 1478 522 1477 544 465 519 1480 520 1479 521 1477 523 1476 545 464 541 496 520 490 494 1479 542 55901 4554 4465 542 494 522 489 516 494 522 488 496 1477 523 1476 545 490 515 495 489 1484 516 1483 517 1481 519 1479 542 494 522 489 516 494 522 488 496 4487 541 495 521 490 515 495 521 489 516 494 522 488 517 493 523 488 496 1476 525 1475 515 1483 549 488 496 1476 524 1475 515 1484 516 1482 550 486 519 491 525 486 488 1485 547 55897 4548 4470 548 462 543 468 548 462 543 467 517 1482 518 1480 541 469 547 490 494 1478 575 1423 515 1485 515 1483 549 461 544 466 550 461 544 466 518 4491 547 462 543 467 549 462 543 467 549 461 544 466 539 497 519 492 492 1480 520 1478 522 1477 544 465 519 1480 520 1479 521 1477 513 1486 546 464 541 469 547 464 520 1478 543 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 4553 4467 550 459 546 464 541 469 547 464 520 1479 521 1477 544 492 524 486 498 1475 515 1484 516 1482 518 1481 540 496 520 490 515 495 521 490 494 4488 550 486 519 491 525 486 519 491 493 1479 542 494 522 489 516 494 490 1482 518 1481 519 1480 541 494 522 489 495 1478 522 1476 514 1485 547 489 516 494 522 489 495 1477 544 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4555 4483 516 516 488 519 495 512 492 515 489 1525 493 1519 489 518 496 511 493 1521 487 1525 493 1520 488 1524 494 513 491 517 487 520 494 514 490 4501 519 513 491 516 488 520 494 513 491 517 487 521 493 514 490 518 486 1527 491 1522 496 1517 491 516 488 1525 493 1520 488 1525 493 1520 488 519 495 512 492 516 488 1525 493 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 13 00 00 00 command: 0D 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 13 00 00 00 command: 0E 00 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 13 00 00 00 command: 0B 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5 address: 13 00 00 00 command: 0C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC address: 01 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC address: 01 00 00 00 command: 13 00 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4552 4468 574 436 566 444 568 442 570 441 540 1458 546 1453 572 439 573 437 544 1455 539 1460 544 1456 548 1450 575 436 566 444 568 442 570 440 541 4468 594 416 565 445 567 443 569 441 540 1459 545 1453 541 1459 566 444 547 1452 542 1457 547 1452 593 417 564 446 566 444 568 442 539 1460 565 446 566 444 568 442 539 1460 565 55957 4581 4437 543 467 545 466 546 464 538 472 519 1480 514 1485 540 471 541 469 512 1486 518 1481 513 1486 518 1481 575 436 566 444 568 442 570 440 541 4468 543 468 544 465 547 464 538 472 519 1480 514 1485 519 1479 546 465 516 1483 511 1488 516 1483 542 468 544 466 546 464 538 473 519 1480 545 466 546 464 538 472 519 1480 545 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4546 4473 538 473 539 470 542 469 543 467 514 1484 520 1479 545 465 547 463 518 1481 513 1486 518 1481 513 1487 538 472 540 470 542 469 543 466 515 4495 546 463 539 472 540 470 542 468 544 466 546 491 521 462 519 1480 513 1485 519 1480 514 1486 539 472 519 1479 515 1484 520 1479 546 464 548 463 539 471 541 469 512 1487 548 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4549 4469 542 468 544 467 545 465 537 473 519 1481 513 1485 540 471 541 469 512 1487 517 1482 512 1487 517 1482 543 467 545 465 547 463 539 472 519 4489 543 468 544 466 546 464 538 473 539 470 542 468 544 466 546 465 516 1482 512 1487 517 1482 543 468 513 1485 519 1480 514 1485 519 1480 545 465 547 463 539 472 520 1479 546 55899 4549 4470 541 469 574 436 566 445 546 463 549 1450 513 1486 539 471 572 438 543 1456 548 1451 543 1456 548 1451 574 436 566 445 567 443 569 441 540 4469 573 437 575 435 567 443 569 441 571 439 573 437 565 445 567 443 549 1451 543 1456 548 1451 574 436 545 1454 540 1459 545 1454 540 1459 566 444 568 442 570 440 541 1458 567 55878 4580 4439 572 439 573 437 565 445 567 443 548 1451 543 1456 569 441 571 439 542 1457 547 1452 542 1457 547 1452 573 437 575 435 567 443 569 442 539 4469 573 438 574 436 566 444 568 442 570 440 572 438 574 436 566 444 547 1452 542 1457 547 1452 573 437 544 1455 539 1460 544 1455 539 1460 575 435 567 444 568 442 539 1459 566 55879 4578 4442 569 441 571 439 573 437 575 435 546 1453 541 1458 567 444 568 441 540 1459 545 1454 540 1459 545 1454 571 439 573 437 575 435 567 444 548 4461 571 440 572 438 574 436 566 444 568 442 570 440 572 438 574 436 545 1454 540 1459 545 1454 571 439 542 1457 547 1452 542 1457 547 1452 573 437 575 435 567 444 547 1451 574 55871 4554 4465 546 464 538 473 539 471 541 469 512 1487 517 1481 544 467 545 465 516 1483 511 1488 516 1483 511 1488 547 463 539 472 540 470 542 468 513 4496 546 464 538 472 540 470 542 468 544 466 546 464 538 473 539 471 510 1488 516 1483 511 1488 547 463 518 1481 513 1486 518 1481 513 1486 539 472 540 470 542 467 514 1485 540 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 4555 4465 546 464 538 472 540 470 542 468 513 1486 518 1481 544 467 545 465 516 1483 511 1488 516 1483 511 1488 537 473 539 472 540 470 542 468 513 4496 546 464 538 473 539 471 541 469 512 1487 538 472 540 470 542 469 512 1486 518 1481 544 1455 570 441 571 439 542 1457 547 1452 542 1457 568 442 570 440 572 438 543 1456 569 55920 4555 4464 547 464 538 472 540 470 542 468 513 1486 518 1481 544 466 546 464 517 1482 512 1487 517 1482 512 1487 538 473 539 471 541 469 543 467 514 4495 547 463 539 472 540 470 542 468 513 1486 539 471 541 469 543 467 514 1485 519 1479 515 1485 540 470 542 468 513 1486 518 1481 513 1486 539 471 541 469 543 467 514 1485 540 # -name: POWER +name: Power type: parsed protocol: SIRC15 address: 10 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 01 00 00 00 command: 15 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: SIRC address: 01 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 10 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC15 address: 30 00 00 00 command: 15 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: SIRC15 address: 30 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 86 FF 00 00 command: 1C E3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 86 FF 00 00 command: 1D E2 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 80 00 00 00 command: 0D 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 80 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 12 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 80 00 00 00 command: 1E 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: EF 01 00 00 command: 25 DA 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: EF 01 00 00 command: 14 EB 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: EF 01 00 00 command: 13 EC 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: EF 01 00 00 command: 28 D7 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1048 580 597 1165 596 582 595 1167 594 875 599 578 599 1455 593 585 592 1171 600 577 600 576 601 13191 1042 586 591 1170 601 576 601 1161 600 869 595 582 595 1459 599 578 599 1163 598 580 597 579 598 13195 1048 580 597 1165 596 581 596 1167 594 875 599 578 599 1456 592 585 592 1171 600 577 600 577 600 13192 1052 576 601 1162 599 578 599 1163 598 871 593 584 593 1462 596 581 596 1166 595 582 595 582 595 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1048 553 624 1138 623 554 623 1139 622 848 626 551 626 1427 621 556 652 1403 655 522 655 814 650 12579 1050 552 656 1106 624 553 624 1138 623 847 627 550 627 1427 621 556 621 1434 624 553 624 845 619 12612 1079 523 623 1139 622 555 622 1139 622 848 626 550 627 1427 621 556 621 1434 624 553 624 845 619 12613 1047 556 621 1141 620 556 621 1141 620 850 624 552 625 1429 619 558 619 1435 623 554 623 846 628 12600 1050 552 625 1137 624 553 624 1137 624 846 618 558 619 1435 623 554 623 1431 627 550 627 842 622 12609 1051 551 626 1136 625 551 626 1136 625 844 620 557 620 1434 624 554 623 1431 627 550 627 843 621 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1073 528 649 1114 647 530 647 1116 645 825 649 527 650 1405 653 1402 625 552 646 1409 649 1113 648 11417 1077 524 653 1110 651 526 651 1112 649 820 654 523 654 1400 648 1407 651 526 651 1404 654 1109 652 11414 1079 523 654 1109 652 524 653 1111 650 819 624 554 654 1401 647 1408 650 529 648 1406 652 1111 650 11416 1077 525 652 1110 651 526 651 1112 649 820 654 523 654 1401 647 1408 650 528 649 1405 622 1141 651 11414 1080 521 646 1116 624 553 645 1117 654 816 648 529 648 1406 652 1403 655 523 644 1410 648 1114 647 11418 1075 526 651 1111 650 527 650 1112 649 820 623 554 654 1400 648 1407 651 526 651 1403 655 1107 654 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 1051 550 627 1135 626 551 626 1136 625 845 619 850 624 553 675 794 629 842 622 555 622 555 622 13780 1047 555 622 1140 621 557 620 1141 620 850 624 845 619 558 619 850 624 846 618 559 618 559 618 13782 1045 558 619 1143 618 559 618 1144 627 842 622 847 627 550 627 842 622 848 626 551 626 551 626 13774 1053 549 618 1144 627 550 627 1135 626 843 621 849 625 551 626 844 620 850 624 553 624 552 625 13776 1051 551 626 1137 624 553 624 1138 623 846 618 851 623 554 623 846 628 841 623 554 623 554 623 13776 1051 551 626 1136 625 552 625 1137 624 845 619 850 624 553 624 846 618 852 622 555 622 554 623 13778 1049 554 623 1139 622 555 622 1140 621 849 625 844 620 557 620 850 624 846 618 559 618 558 619 # -name: POWER +name: Power type: parsed protocol: NEC address: 78 00 00 00 command: CC 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 78 00 00 00 command: 9C 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 7E 00 00 00 command: 2A 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 7A 00 00 00 command: 1C 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 274 789 254 1792 275 814 250 787 246 816 248 1798 279 784 249 813 251 785 248 788 245 1827 281 1791 275 1825 272 790 253 783 250 43886 277 786 278 1795 272 791 252 783 281 782 251 785 269 1804 273 1800 277 1822 275 1798 279 783 270 766 277 759 274 1825 272 1800 277 43886 277 759 274 1825 272 764 279 756 277 786 278 1795 282 781 272 763 280 755 278 785 279 1794 273 1827 270 1802 275 761 272 791 273 43888 276 761 272 1800 277 786 278 758 275 760 273 790 274 1799 278 1821 276 1796 281 1792 275 788 276 760 273 789 275 1798 279 1794 273 43889 278 785 248 1825 272 790 253 782 272 764 279 1793 274 790 274 761 282 781 273 763 280 1793 273 1825 272 1800 277 813 220 789 275 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 270 793 250 1795 272 818 246 791 252 809 244 766 277 1795 282 781 272 790 253 809 224 1822 275 1797 280 1820 277 785 248 788 245 43889 273 790 274 1799 278 785 248 788 276 787 246 1826 271 792 251 1794 273 1827 270 1802 275 788 245 791 273 790 253 1819 278 1794 273 43889 274 789 254 1818 269 767 276 786 247 789 275 788 245 1827 270 792 251 785 248 814 250 1796 281 1819 248 1825 272 790 253 783 271 43889 245 791 273 1799 278 786 278 784 249 787 246 1827 281 781 252 1821 276 1796 281 1792 274 814 250 786 247 789 244 1829 279 1793 274 43888 275 815 218 1828 280 783 250 786 278 785 248 788 245 1827 280 782 251 785 268 794 249 1797 280 1819 278 1794 272 791 252 810 254 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 277 759 274 1799 278 784 280 783 250 812 242 1804 273 816 227 808 246 791 252 1819 248 1825 273 1826 251 1822 276 786 247 789 244 43888 274 815 249 1797 280 783 250 812 252 784 249 813 241 1805 272 1827 250 1822 275 787 246 816 217 819 255 807 226 1820 278 1795 272 43888 273 789 254 1817 270 793 251 785 248 814 250 1795 282 807 247 790 253 783 250 1822 276 1796 281 1818 249 1824 274 814 229 807 247 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 275 762 271 1800 277 786 278 784 249 813 241 795 248 1824 253 784 270 792 251 1821 246 1826 272 1801 276 1823 275 762 271 790 243 43889 274 789 275 1797 280 783 250 812 252 784 249 1823 275 762 271 1827 250 1822 276 787 246 816 217 818 246 790 253 1819 268 1804 273 43886 277 786 247 1825 273 764 280 783 250 811 253 784 249 1822 276 761 272 816 228 1819 279 1794 273 1826 251 1821 277 786 247 815 249 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 275 762 271 1800 277 786 278 784 249 813 241 795 248 814 219 817 247 789 254 1818 249 1824 274 1798 279 1820 278 759 274 788 245 43887 274 789 275 1798 279 783 250 812 252 784 249 1823 274 1798 279 1820 247 1826 271 765 278 809 224 812 252 784 249 1823 275 1798 279 43880 281 782 251 1821 277 760 273 789 244 818 246 790 253 808 246 791 252 809 224 1822 275 1797 280 1819 248 1825 273 790 253 808 246 # -name: POWER +name: Power type: parsed protocol: NECext address: 87 7C 00 00 command: 80 7F 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 87 7C 00 00 command: 88 77 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 87 7C 00 00 command: 8C 73 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 87 7C 00 00 command: 94 6B 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: D2 6C 00 00 command: CB 34 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: D2 6D 00 00 command: 02 FD 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: D2 6D 00 00 command: 03 FC 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: D2 6D 00 00 command: 05 FA 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: D2 03 00 00 command: 04 FB 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: D2 03 00 00 command: 02 FD 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: D2 03 00 00 command: 03 FC 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: D2 03 00 00 command: 05 FA 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 14 00 00 00 command: 0C 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 14 00 00 00 command: 11 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 14 00 00 00 command: 10 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC15 address: 10 00 00 00 command: 60 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC15 address: 30 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC15 address: 30 00 00 00 command: 13 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC15 address: 10 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC15 address: 10 00 00 00 command: 13 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 7E 81 00 00 command: 2A D4 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 7A 85 00 00 command: 1C E2 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 78 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 78 00 00 00 command: 4F 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 7A 00 00 00 command: 1A 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 7A 00 00 00 command: 1B 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 7A 85 00 00 command: 1A E4 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 7A 85 00 00 command: 1B E5 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 78 00 00 00 command: 1E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 78 00 00 00 command: 1F 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5X address: 0A 00 00 00 command: 2F 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8437 4188 538 1565 539 1565 539 513 544 508 538 513 544 1559 545 507 539 1564 540 1564 540 1563 541 1563 541 511 546 1557 547 505 542 511 546 505 542 20497 597 1507 545 1559 545 507 539 512 545 507 539 1564 540 512 545 1558 546 1558 546 1558 546 1557 547 505 542 1562 542 510 547 505 542 510 547 20492 540 1564 540 1564 540 512 545 506 540 511 546 1558 546 505 542 1562 542 1562 542 1562 542 1561 543 509 548 1555 538 514 543 509 537 514 543 20495 547 1558 546 1557 547 505 541 511 546 505 542 1562 542 510 547 1556 548 1556 548 1556 548 1556 537 514 543 1560 544 508 538 514 543 508 538 20501 541 1562 542 1562 542 510 547 505 541 510 547 1556 548 504 543 1561 543 1561 543 1560 544 1560 544 508 538 1565 539 513 544 507 539 513 544 20494 548 1556 548 1556 548 504 543 509 548 504 543 1560 544 508 539 1565 539 1565 539 1564 540 1564 540 512 545 1559 545 506 540 512 545 506 540 20499 543 1560 544 1560 544 508 539 513 544 508 538 1564 540 512 545 1559 545 1558 546 1558 546 1558 546 506 541 1563 541 510 547 505 542 510 547 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 8430 4194 542 1562 542 1562 542 510 547 505 541 510 547 1556 548 504 542 1561 543 509 548 1556 548 1556 548 1556 548 1556 548 504 542 509 537 514 543 20496 545 1559 545 1559 545 507 539 512 545 507 539 1564 540 512 545 1559 545 507 539 1564 540 1564 540 1563 541 1563 541 511 546 506 540 511 546 20494 546 1557 547 1557 547 505 541 510 547 505 541 1562 542 510 547 1556 548 505 541 1562 542 1562 542 1561 543 1561 543 509 548 504 542 509 537 20501 540 1565 539 1565 539 512 545 507 539 512 545 1559 545 507 539 1564 540 512 545 1559 545 1558 546 1558 546 1558 546 506 540 511 546 506 540 20498 543 1562 542 1562 542 510 547 505 541 510 547 1557 547 505 541 1562 542 509 548 1556 548 1556 548 1556 548 1556 548 504 542 509 548 504 542 20497 543 1560 544 1560 544 508 538 513 544 508 538 1565 539 513 544 1560 544 508 538 1565 539 1565 539 1565 539 1564 540 513 544 507 539 512 545 20495 545 1558 546 1558 546 506 540 511 546 506 540 1563 541 511 546 1558 546 506 540 1563 541 1563 541 1563 541 1562 542 510 547 505 541 510 547 20493 548 1556 548 1556 548 504 542 509 548 504 542 1561 543 509 537 1566 538 514 543 1560 544 1560 544 1560 544 1560 544 508 538 513 544 508 538 20501 539 1564 540 1564 540 512 545 507 539 512 545 1559 545 507 539 1564 540 512 545 1559 545 1558 546 1558 546 1558 546 506 540 511 546 506 540 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 8434 4191 545 1559 545 1559 545 534 512 513 544 507 539 1564 540 538 519 1559 545 1558 546 1558 546 1558 546 1558 546 1558 546 533 513 511 546 506 540 19446 547 1557 547 1557 547 532 514 511 546 532 514 1562 593 459 546 1557 547 1557 547 1557 547 1557 547 1557 547 1557 547 531 515 510 547 505 541 19446 548 1556 548 1556 548 530 516 509 548 504 543 1561 543 535 512 1566 538 1565 539 1565 539 1565 539 1565 539 1565 539 540 517 509 537 514 543 19444 539 1565 539 1565 539 513 544 508 538 513 544 1559 545 534 512 1564 540 1564 540 1564 540 1564 540 1564 540 1564 540 539 518 507 539 513 544 19442 541 1563 541 1563 541 538 519 507 539 512 545 1558 546 506 540 1563 541 1563 541 1563 541 1563 541 1563 541 1562 542 537 520 505 541 511 546 19440 595 1509 543 1561 543 536 521 504 542 509 548 1555 538 540 517 1560 544 1560 544 1560 544 1560 544 1560 544 1560 544 534 512 513 544 508 538 19448 546 1559 545 1559 545 533 513 512 545 507 539 1563 541 538 519 1558 546 1558 546 1558 546 1557 547 1558 546 1558 546 533 513 512 545 506 540 19447 546 1557 547 1557 547 532 514 511 546 506 540 1562 542 537 520 1557 547 1557 547 1557 547 1557 547 1557 547 1557 547 505 542 510 547 505 541 19445 548 1556 548 1556 548 531 515 510 547 504 542 1561 543 536 521 1555 538 1566 538 1566 538 1566 538 1566 538 1565 539 514 543 509 537 514 543 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 8435 4189 547 1557 547 1557 547 505 541 510 547 505 541 1562 542 510 547 1557 547 505 541 510 547 1557 546 1557 547 1557 547 505 541 510 547 505 541 21550 547 1558 545 1558 546 506 540 511 546 506 540 1563 541 511 546 1558 545 506 540 511 546 1558 546 1558 546 1558 546 506 540 511 546 506 540 21551 546 1558 546 1558 546 506 540 512 545 506 540 1563 540 512 545 1558 546 506 540 512 545 1558 546 1558 546 1558 546 506 540 512 545 506 540 21551 546 1559 545 1559 545 507 539 512 545 507 539 1564 539 512 545 1559 545 507 539 512 545 1559 545 1559 545 1559 545 507 539 512 545 507 539 21552 545 1559 545 1559 545 507 539 513 544 507 539 1564 540 512 545 1559 545 507 539 512 545 1559 545 1559 545 1559 545 507 539 512 545 507 539 21552 545 1559 545 1559 545 507 539 513 544 507 539 1565 538 513 544 1559 545 507 539 513 544 1559 545 1559 544 1559 545 534 512 513 544 507 539 21553 544 1560 544 1560 544 534 512 513 544 508 538 1565 539 539 518 1560 544 534 512 513 544 1560 544 1560 544 1560 544 534 512 513 544 508 538 # -name: POWER +name: Power type: parsed protocol: NEC address: 20 00 00 00 command: 41 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 42 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 43 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 1B 00 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 8498 4205 651 1471 576 530 550 1572 547 535 545 536 544 1578 541 540 550 1572 547 535 545 1576 543 539 541 1580 549 1572 547 534 546 1576 543 539 541 540 550 1571 548 533 547 1574 545 537 543 539 541 541 549 532 548 1574 545 536 544 1578 541 540 550 1571 548 1572 547 1574 545 1576 543 26533 8497 4203 653 1468 569 538 542 1579 550 531 549 533 547 1573 546 535 545 1576 543 538 542 1579 550 531 549 1571 548 1573 546 536 544 1576 543 539 541 540 550 1571 548 533 547 1574 545 536 544 538 542 540 550 530 550 1572 547 534 546 1575 544 537 543 1578 541 1579 550 1570 549 1572 547 26524 8496 4207 576 1570 549 533 547 1574 545 537 543 539 541 1580 549 532 548 1573 546 536 544 1577 542 539 551 1570 549 1572 547 534 546 1575 544 538 542 540 550 1571 548 534 546 1575 544 538 542 540 550 531 549 533 547 1575 544 537 543 1579 550 531 549 1571 548 1572 547 1574 545 1576 543 26529 8491 4211 573 1573 546 535 545 1576 543 539 551 530 550 1571 548 533 547 1574 545 536 544 1578 541 540 550 1570 549 1572 547 534 546 1575 544 538 542 539 541 1580 549 532 548 1572 547 535 545 537 543 539 541 540 550 1571 548 533 547 1574 545 537 543 1578 541 1579 550 1571 548 1574 545 26522 8498 4202 571 1574 545 537 543 1578 541 541 549 532 548 1573 546 534 546 1575 544 537 543 1577 542 540 550 1570 549 1571 548 533 547 1574 545 537 543 538 542 1579 550 531 549 1572 547 534 546 536 544 537 543 538 542 1579 550 531 549 1572 547 535 545 1575 544 1577 542 1579 550 1571 548 26522 8498 4203 570 1575 544 537 543 1578 541 541 549 532 548 1573 546 535 545 1575 544 538 542 1579 550 531 549 1571 548 1572 547 535 545 1575 544 538 542 539 541 1580 549 532 548 1572 547 534 546 536 544 537 543 539 541 1579 550 531 549 1571 548 533 547 1573 546 1574 545 1575 544 1577 542 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 8490 4211 573 1573 546 535 545 1576 543 539 541 540 550 1571 548 532 548 1573 546 535 545 1576 543 539 541 1579 550 1571 548 533 547 1574 545 536 544 1576 543 1578 541 540 550 1570 549 533 547 534 546 536 544 537 543 539 541 540 550 1570 549 532 548 1572 547 1573 546 1574 545 1576 543 26528 8492 4208 648 1475 572 534 546 1575 544 537 543 539 541 1580 549 532 548 1573 546 535 545 1576 543 538 542 1579 550 1571 548 533 547 1575 544 537 543 1577 542 1579 550 532 548 1573 546 535 545 537 543 539 541 541 549 532 548 533 547 1575 544 537 543 1578 541 1579 550 1571 548 1573 546 26523 8496 4203 622 1499 569 537 543 1578 541 541 549 532 548 1572 547 534 546 1574 545 537 543 1578 541 540 550 1570 549 1571 548 534 546 1575 544 538 542 1578 541 1580 549 532 548 1573 546 536 544 538 542 540 550 532 548 533 547 535 545 1576 543 539 541 1579 550 1571 548 1573 546 1574 545 26521 8498 4201 572 1573 546 536 544 1577 542 540 550 531 549 1571 548 533 547 1573 546 536 544 1576 543 539 541 1579 550 1570 549 532 548 1573 546 535 545 1576 543 1578 541 540 550 1571 548 533 547 535 545 537 543 538 542 540 550 531 549 1572 547 534 546 1575 544 1576 543 1577 542 1579 550 26522 8498 4203 570 1575 544 538 542 1579 550 532 548 533 547 1575 544 537 543 1578 541 540 550 1570 549 533 547 1573 546 1575 544 537 543 1578 541 540 550 1571 548 1573 546 536 544 1578 551 531 549 533 547 535 545 537 543 539 541 540 550 1571 548 533 547 1575 544 1576 543 1578 541 1580 549 26521 8498 4203 570 1576 543 538 542 1580 549 532 548 533 547 1574 545 536 544 1577 542 540 550 1570 549 533 547 1573 546 1575 544 538 542 1579 550 531 549 1571 548 1573 546 536 544 1576 543 539 551 531 549 532 548 534 546 536 544 538 542 1579 550 531 549 1572 547 1573 546 1574 545 1576 543 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8500 4203 653 1468 569 538 542 1579 550 532 548 534 546 1575 544 536 544 1578 541 540 550 1572 547 534 546 1575 544 1577 542 539 541 1580 550 532 548 534 546 535 545 1576 543 1577 542 1579 551 532 548 534 546 536 544 1577 542 1578 552 531 549 533 547 534 546 1574 545 1575 544 1577 542 26533 8492 4211 573 1573 546 535 545 1576 543 539 551 530 550 1571 548 533 547 1574 545 536 544 1577 542 540 550 1570 549 1572 547 534 546 1576 543 539 541 541 549 532 548 1573 546 1574 545 1576 543 539 551 531 549 533 547 1573 546 1576 543 539 541 541 549 532 548 1573 546 1574 545 1576 543 26532 8493 4209 575 1571 548 533 547 1575 544 537 543 539 541 1580 550 531 549 1572 547 534 546 1576 543 538 542 1579 551 1570 549 532 548 1574 545 537 543 538 542 540 550 1570 549 1572 547 1575 544 537 543 539 541 540 550 1571 548 1573 546 536 544 538 542 539 551 1570 549 1572 547 1574 545 26530 8496 4207 567 1579 551 531 549 1572 547 535 545 536 544 1576 543 538 542 1579 551 530 550 1571 548 534 546 1574 545 1576 543 538 542 1579 551 532 548 533 547 534 546 1576 543 1577 542 1579 551 532 548 534 546 535 545 1576 543 1578 541 540 550 532 548 533 547 1574 545 1575 544 1577 542 26531 8495 4210 574 1571 548 534 546 1575 544 538 542 539 551 1569 550 531 549 1572 547 535 545 1576 543 539 541 1579 550 1571 548 534 546 1575 544 538 542 540 550 531 549 1572 547 1549 570 1551 568 539 551 531 549 532 548 1573 546 1550 569 538 542 540 550 531 549 1571 548 1548 571 1550 569 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 EF 00 00 command: 1C E3 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 EF 00 00 command: 00 FF 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 EF 00 00 command: 04 FB 00 00 # -name: POWER +name: Power type: parsed protocol: NEC42 address: 6E 00 00 00 command: 00 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC42 address: 6E 00 00 00 command: 4D 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC42 address: 6E 00 00 00 command: 4E 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC42 address: 6E 00 00 00 command: 0E 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8441 4184 542 1562 541 1562 542 511 546 506 540 511 546 1557 546 506 540 1563 541 1563 540 1563 541 512 545 507 539 512 545 507 539 512 545 507 539 22605 538 1565 539 1565 538 514 543 509 537 514 543 1560 543 509 548 1555 548 1556 548 1556 547 504 542 510 547 505 541 510 547 505 541 510 547 22597 546 1559 544 1559 545 507 539 513 544 507 539 1564 539 513 544 1559 544 1559 545 545 508 549 513 508 538 513 544 508 538 513 544 22601 542 1562 542 1561 543 510 547 505 541 510 547 1557 547 505 541 1562 542 1562 542 1562 542 510 547 505 541 510 547 505 541 511 546 505 541 22603 540 1564 539 1565 538 513 544 508 538 513 544 1560 544 508 538 1565 538 1565 538 1566 537 514 543 509 548 504 542 509 548 504 542 509 548 22597 546 1558 546 1558 546 506 540 512 545 507 539 1564 540 512 545 1559 545 1559 544 1559 544 507 539 513 544 508 538 513 544 508 538 513 544 22600 543 1561 542 1562 542 510 547 505 541 510 547 1557 547 505 541 1562 541 1563 540 1563 541 511 546 506 540 511 546 506 540 511 546 506 540 22604 539 1565 538 1566 537 514 543 509 548 504 542 1561 543 509 548 1556 548 1556 548 1556 547 504 542 510 547 505 541 510 547 505 541 510 547 22598 545 1559 544 1559 545 507 539 512 545 507 539 1564 540 512 545 1559 544 1559 545 1559 545 508 538 513 544 508 538 513 544 508 538 513 544 22601 542 1562 542 1562 542 511 546 505 541 511 546 1557 546 506 540 1563 541 1563 540 1563 541 511 546 506 540 511 546 506 540 512 545 506 540 22604 539 1565 538 1566 537 514 543 509 548 504 542 1561 543 509 548 1556 547 1556 547 1556 548 504 542 510 547 505 541 510 547 505 541 510 547 # -name: POWER +name: Power type: parsed protocol: SIRC address: 10 00 00 00 command: 60 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 08 00 00 00 command: 0E 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 08 00 00 00 command: 1A 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 57 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 4D 00 00 00 command: 04 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 4D 00 00 00 command: 05 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 4D 00 00 00 command: 02 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 4D 00 00 00 command: 03 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 4D 00 00 00 command: 00 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 19 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 16 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 44 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 12 36 00 00 command: 0A F5 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 12 36 00 00 command: 0B F4 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 12 36 00 00 command: 09 F6 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 12 36 00 00 command: 01 FE 00 00 # # OFF -name: POWER +name: Power type: parsed protocol: RC5 address: 10 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 02 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 0A 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 0E 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 0F 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 10 00 00 00 command: 1E 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 10 00 00 00 command: 17 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 10 00 00 00 command: 16 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 10 00 00 00 command: 1F 00 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: 51 54 32 01 command: 03 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Kaseikyo address: 51 54 32 01 command: 04 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Kaseikyo address: 51 54 32 01 command: 05 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Kaseikyo address: 51 54 32 01 command: 06 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4567 4454 549 481 522 481 523 480 498 506 498 1509 499 1509 523 480 499 505 523 1484 523 1484 523 1485 521 1487 520 484 519 485 519 485 519 471 519 4488 518 485 519 485 518 485 519 485 518 485 519 485 519 485 519 485 519 1489 519 1489 518 1489 518 485 519 1489 518 1490 518 1490 517 1490 518 486 518 486 518 486 518 1490 518 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4571 4453 552 478 525 478 526 478 500 504 500 1507 501 1506 526 478 525 477 526 1481 526 1481 526 1482 524 1483 523 481 522 482 521 481 522 468 522 4484 521 482 521 482 521 482 522 481 522 1486 521 1486 521 1486 521 482 521 1486 522 1486 522 1486 522 482 522 482 522 482 522 482 522 1486 522 483 521 482 521 483 521 1487 521 55474 4547 4477 524 479 524 480 524 480 523 480 523 1485 523 1484 524 481 523 481 523 1485 523 1485 522 1485 523 1485 523 480 524 480 524 481 523 467 524 4484 523 481 523 481 523 481 523 481 523 1485 523 1485 523 1485 523 481 523 1485 523 1485 523 1485 523 481 523 481 523 481 523 481 523 1485 523 481 523 481 523 481 523 1486 522 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 4572 4453 552 456 548 479 524 479 500 504 500 1482 526 1482 551 478 526 478 525 1483 524 1484 523 1486 521 1487 521 483 521 483 521 483 521 470 520 4487 521 483 521 483 521 483 521 483 521 483 521 483 521 483 521 1488 520 1488 520 1488 520 1488 520 483 521 1488 520 1488 520 1488 520 483 521 483 521 483 521 483 521 1488 520 55457 4565 4483 521 483 521 483 521 483 521 483 520 1488 520 1487 521 483 521 483 520 1488 520 1488 520 1488 520 1488 520 483 520 484 520 484 520 470 521 4487 520 484 520 483 520 484 520 484 520 484 520 484 519 484 520 1488 520 1488 520 1488 519 1488 520 484 520 1488 520 1488 520 1488 520 484 520 484 520 484 520 484 520 1489 519 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 4573 4451 552 477 527 478 526 477 526 478 501 1507 501 1506 502 502 527 477 526 1481 527 1481 527 1481 526 1482 525 479 524 480 523 481 523 468 523 4485 522 481 522 482 522 482 522 482 522 1486 522 482 521 482 522 482 522 1486 522 1486 522 1486 522 482 522 482 521 1487 521 1487 521 1487 521 482 521 483 521 483 521 1487 521 55462 4547 4474 524 478 525 479 524 480 523 480 523 1484 523 1484 523 480 523 480 523 1484 523 1484 524 1484 523 1485 522 480 523 480 524 480 523 467 523 4484 522 480 524 481 523 481 523 481 523 1485 523 481 522 481 523 481 523 1485 522 1485 523 1485 523 481 523 481 522 1485 522 1485 522 1485 523 481 522 481 522 481 523 1485 523 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 10 E7 00 00 command: 49 B6 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 10 E7 00 00 command: 05 FA 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 50 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 0C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 47 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 02 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 80 00 00 00 command: 05 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 80 00 00 00 command: 04 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC42 address: 6E 00 00 00 command: 4C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 10 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4555 4463 532 473 532 473 531 474 530 474 530 1478 531 1478 531 475 529 476 528 1482 551 1480 529 1480 528 1481 528 477 527 478 527 478 526 478 527 4498 526 477 527 477 527 478 526 478 526 478 526 478 526 478 527 478 526 1483 527 1483 526 1483 526 478 526 1483 527 1483 527 1483 526 1483 526 478 526 478 527 478 527 1484 526 55527 4527 4492 526 478 526 478 526 478 526 479 526 1483 527 1483 526 478 526 478 526 1483 527 1483 526 1483 526 1483 526 478 527 478 526 479 526 478 526 4497 526 478 526 478 526 478 526 478 526 478 526 478 526 478 526 478 526 1484 525 1483 526 1484 525 478 526 1484 525 1484 525 1484 525 1484 525 478 526 479 526 479 525 1484 525 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4552 4463 531 474 530 474 530 474 530 474 530 1478 531 1478 531 475 529 476 553 1455 554 1478 530 1479 529 1481 527 477 527 478 526 478 526 478 526 4497 526 478 526 478 526 478 526 477 527 1483 526 1482 527 1482 527 478 526 1483 526 1483 526 1483 526 478 526 478 526 478 526 478 526 1483 526 478 526 478 526 478 526 1483 526 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 325 50440 173 137541 4551 4465 530 475 529 475 529 474 530 474 530 1479 530 1479 529 476 528 477 527 1480 554 1457 551 1480 528 1481 527 477 527 478 526 478 526 478 526 4497 525 478 526 478 526 478 526 478 526 479 525 479 525 479 525 1484 525 1483 526 1484 525 1483 526 479 525 1483 526 1483 526 1483 526 479 525 479 525 479 525 479 525 1484 525 # -name: POWER +name: Power type: parsed protocol: NECext address: 30 FC 00 00 command: 10 EF 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 30 FC 00 00 command: 0C F3 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 30 FC 00 00 command: 0D F2 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 30 FC 00 00 command: 17 E8 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 04 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: FD 00 00 00 command: E2 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: FD 00 00 00 command: E1 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: FD 00 00 00 command: E7 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: FD 00 00 00 command: B9 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2760 833 499 418 470 419 416 887 445 872 893 468 416 469 414 442 443 441 444 440 446 440 446 440 446 440 892 882 445 444 466 446 439 447 438 448 437 449 884 447 437 450 437 894 436 449 437 449 437 449 437 449 437 449 884 448 436 894 437 450 436 116126 2673 887 445 473 440 449 439 893 438 880 884 448 437 449 437 449 437 449 437 449 437 449 437 449 437 449 884 890 437 449 437 449 437 450 436 449 437 449 884 448 436 451 437 894 436 449 437 450 436 450 436 449 437 450 883 448 436 894 436 449 437 116123 2672 888 469 449 439 450 437 893 438 881 883 448 437 449 437 449 437 449 437 449 438 449 437 449 437 449 884 891 437 449 437 449 437 449 437 449 437 449 884 448 436 451 437 894 437 449 437 449 437 449 437 449 437 449 884 448 436 894 437 449 437 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 2701 861 496 420 445 444 444 885 446 871 892 441 444 441 444 441 471 415 471 415 470 417 467 444 440 446 883 891 436 449 437 449 437 450 436 450 436 449 883 448 437 451 436 894 436 450 436 450 436 450 436 450 436 450 882 449 436 894 883 116552 2698 862 469 448 438 449 438 894 437 880 884 448 437 449 437 448 438 449 437 449 437 449 437 449 437 449 884 890 437 449 437 449 437 449 437 449 437 449 884 448 437 450 437 893 437 449 437 449 437 449 437 449 437 449 884 448 436 894 883 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 10 E7 00 00 command: 3C C3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 10 E7 00 00 command: 4D B2 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: 52 54 32 00 command: 83 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Kaseikyo address: 52 54 32 00 command: 86 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Kaseikyo address: 52 54 32 00 command: 84 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Kaseikyo address: 52 54 32 00 command: 85 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 46 00 00 00 +# +# Audio_Receivers +# +name: Prev +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 2C 00 00 00 +# +name: Next +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 2B 00 00 00 +# +name: Next +type: parsed +protocol: NECext +address: D2 03 00 00 +command: 1D E2 00 00 +# +name: Next +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 34 00 00 00 +# +name: Prev +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 30 00 00 00 +# +name: Next +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 31 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 78 00 00 00 +command: 03 00 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 7F 01 00 00 +command: 6B 94 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 09 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 15 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 07 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 04 00 00 00 +command: 12 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 04 00 00 00 +command: 04 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 04 00 00 00 +command: 5E 00 00 00 +# +name: Pause +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 30 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 5F A0 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 5F A0 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 02 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 00 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 30 FC 00 00 +command: 02 FD 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 30 FC 00 00 +command: 02 FD 00 00 +# +name: Play +type: parsed +protocol: NECext +address: D2 03 00 00 +command: 1B E4 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: D2 03 00 00 +command: 1F E0 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: D2 02 00 00 +command: 90 6F 00 00 +# +name: Next +type: parsed +protocol: NECext +address: D2 02 00 00 +command: 8F 70 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: D2 02 00 00 +command: 91 6E 00 00 +# +name: Play +type: parsed +protocol: NECext +address: D2 02 00 00 +command: 8D 72 00 00 +# +name: Play +type: parsed +protocol: NECext +address: D2 19 00 00 +command: 5C A3 00 00 +# +name: Play +type: parsed +protocol: Kaseikyo +address: AA 02 20 00 +command: A0 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: D2 19 00 00 +command: 5C A3 00 00 +# +name: Pause +type: parsed +protocol: Kaseikyo +address: AA 02 20 00 +command: A0 00 00 00 +# +name: Next +type: parsed +protocol: Kaseikyo +address: AC 02 20 01 +command: A1 00 00 00 +# +name: Prev +type: parsed +protocol: Kaseikyo +address: AC 02 20 01 +command: 91 00 00 00 +# +name: Next +type: parsed +protocol: Kaseikyo +address: AC 02 20 00 +command: 31 00 00 00 +# +name: Prev +type: parsed +protocol: Kaseikyo +address: AC 02 20 00 +command: 21 00 00 00 +# +name: Play +type: parsed +protocol: Kaseikyo +address: AC 02 20 00 +command: 61 00 00 00 +# +name: Play +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 35 00 00 00 +# +name: Prev +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 21 00 00 00 +# +name: Next +type: parsed +protocol: RC5 +address: 14 00 00 00 +command: 20 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 4D 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 54 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 40 00 00 00 +command: 59 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 40 00 00 00 +command: 18 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 40 00 00 00 +command: 58 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 40 00 00 00 +command: 5B 00 00 00 +# +name: Play +type: parsed +protocol: SIRC20 +address: 3A 07 00 00 +command: 32 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC20 +address: 3A 07 00 00 +command: 39 00 00 00 +# +name: Play +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 3A 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 3A 00 00 00 +# +name: Play +type: parsed +protocol: RC5X +address: 0A 00 00 00 +command: 31 00 00 00 +# +name: Pause +type: parsed +protocol: RC5X +address: 0A 00 00 00 +command: 0F 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 78 00 00 00 +command: 02 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 7F 01 00 00 +command: 68 97 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 7F 01 00 00 +command: 67 98 00 00 +# +# CD Players +# +name: Next +type: parsed +protocol: Kaseikyo +address: 51 54 32 01 +command: 0E 00 00 00 +# +name: Play +type: parsed +protocol: Kaseikyo +address: 51 54 32 01 +command: 0A 00 00 00 +# +name: Play +type: parsed +protocol: Samsung32 +address: 10 00 00 00 +command: 07 00 00 00 +# +name: Pause +type: parsed +protocol: Kaseikyo +address: 51 54 32 01 +command: 0A 00 00 00 +# +name: Pause +type: parsed +protocol: Samsung32 +address: 10 00 00 00 +command: 07 00 00 00 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8546 4227 563 511 563 1558 566 511 563 483 566 508 567 1558 566 509 566 1558 566 1586 564 483 566 1561 588 1558 566 1560 564 536 539 1558 566 535 539 1558 566 1586 564 1557 567 486 589 1560 564 511 563 510 539 508 567 485 589 484 565 508 567 1559 565 509 566 1560 564 1560 590 1585 539 25430 8575 4251 538 485 590 1557 567 486 588 511 538 536 539 1557 567 509 566 1558 566 1560 590 483 566 1560 589 1559 565 1562 562 536 539 1560 564 509 566 1558 566 1564 586 1586 538 484 590 1559 565 487 588 482 567 509 566 511 563 483 566 508 567 1558 566 509 566 1560 564 1559 591 1586 538 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 8571 4226 564 509 540 1587 563 510 539 510 565 510 564 1558 566 510 565 1584 540 1585 539 535 540 1587 537 1586 564 1585 539 510 564 1584 540 511 563 482 567 535 539 485 590 1584 540 1585 539 509 566 510 564 510 539 1586 564 1585 539 1585 539 536 539 510 564 1585 539 1557 567 1558 592 25434 8571 4199 591 510 539 1586 564 509 540 535 540 485 590 1585 539 484 591 1561 563 1584 540 507 568 1585 539 1586 564 1585 539 486 589 1585 539 484 591 425 624 535 540 486 589 1585 539 1585 539 511 564 511 563 486 563 1586 564 1558 566 1558 566 508 567 486 589 1560 564 1558 566 1561 589 +# +name: Next +type: parsed +protocol: SIRC15 +address: 64 00 00 00 +command: 3B 00 00 00 +# +name: Play +type: parsed +protocol: NEC42 +address: 6E 00 00 00 +command: 40 00 00 00 +# +name: Pause +type: parsed +protocol: NEC42 +address: 6E 00 00 00 +command: 44 00 00 00 +# +name: Prev +type: parsed +protocol: Kaseikyo +address: 51 54 32 01 +command: 47 00 00 00 +# +name: Next +type: parsed +protocol: Kaseikyo +address: 51 54 32 01 +command: 46 00 00 00 +# +name: Play +type: parsed +protocol: Samsung32 +address: 81 00 00 00 +command: 01 00 00 00 +# +name: Pause +type: parsed +protocol: Samsung32 +address: 81 00 00 00 +command: 01 00 00 00 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 8546 4227 563 511 563 1558 566 511 563 483 566 508 567 1558 566 509 566 1558 566 1586 564 483 566 1561 588 1558 566 1560 564 536 539 1558 566 535 539 1558 566 1586 564 1557 567 486 589 1560 564 511 563 510 539 508 567 485 589 484 565 508 567 1559 565 509 566 1560 564 1560 590 1585 539 25430 8575 4251 538 485 590 1557 567 486 588 511 538 536 539 1557 567 509 566 1558 566 1560 590 483 566 1560 589 1559 565 1562 562 536 539 1560 564 509 566 1558 566 1564 586 1586 538 484 590 1559 565 487 588 482 567 509 566 511 563 483 566 508 567 1558 566 509 566 1560 564 1559 591 1586 538 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 8571 4226 564 509 540 1587 563 510 539 510 565 510 564 1558 566 510 565 1584 540 1585 539 535 540 1587 537 1586 564 1585 539 510 564 1584 540 511 563 482 567 535 539 485 590 1584 540 1585 539 509 566 510 564 510 539 1586 564 1585 539 1585 539 536 539 510 564 1585 539 1557 567 1558 592 25434 8571 4199 591 510 539 1586 564 509 540 535 540 485 590 1585 539 484 591 1561 563 1584 540 507 568 1585 539 1586 564 1585 539 486 589 1585 539 484 591 425 624 535 540 486 589 1585 539 1585 539 511 564 511 563 486 563 1586 564 1558 566 1558 566 508 567 486 589 1560 564 1558 566 1561 589 +# +name: Pause +type: parsed +protocol: NEC +address: 4D 00 00 00 +command: 0F 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 4D 00 00 00 +command: 10 00 00 00 +# +name: Play +type: parsed +protocol: SIRC15 +address: 64 00 00 00 +command: 32 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC15 +address: 64 00 00 00 +command: 39 00 00 00 +# +name: Play +type: parsed +protocol: SIRC +address: 0F 00 00 00 +command: 2A 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC +address: 0F 00 00 00 +command: 29 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 86 61 00 00 +command: 08 F7 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 86 61 00 00 +command: 05 FA 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 00 EF 00 00 +command: 03 FC 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 00 EF 00 00 +command: 03 FC 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 00 EF 00 00 +command: 02 FD 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 00 EF 00 00 +command: 01 FE 00 00 +# +# SoundBars +# +# +name: Play +type: parsed +protocol: NECext +address: 29 A1 00 00 +command: 9A 65 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 29 A1 00 00 +command: 9A 65 00 00 +# +name: Next +type: parsed +protocol: Samsung32 +address: 2C 00 00 00 +command: 07 00 00 00 +# +name: Prev +type: parsed +protocol: Samsung32 +address: 2C 00 00 00 +command: 06 00 00 00 +# +name: Next +type: parsed +protocol: NECext +address: C8 91 00 00 +command: 24 DB 00 00 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4572 4451 552 478 526 478 526 478 500 503 501 1483 525 1482 551 478 525 478 525 1481 526 1482 524 1483 523 1485 522 482 521 482 522 482 522 469 521 4486 521 482 522 482 522 483 521 483 521 483 521 1487 521 483 521 1487 521 483 521 483 521 483 521 1487 521 1487 521 483 520 1487 521 483 521 1488 520 1487 521 1487 521 483 521 55487 4544 4482 522 482 522 482 522 482 522 482 522 1487 521 1487 521 482 522 482 522 1487 521 1487 521 1487 521 1487 521 482 522 483 521 483 521 469 522 4486 521 483 521 483 520 483 521 483 521 483 521 1487 521 483 521 1487 521 483 521 483 521 483 521 1488 521 1487 521 483 521 1488 520 483 521 1488 521 1488 521 1488 520 483 521 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4497 4438 513 508 492 503 487 509 491 504 486 1479 512 1479 511 510 490 505 485 1481 510 1481 510 1481 509 1482 509 512 488 507 483 513 487 508 482 4457 515 506 484 511 489 506 484 512 488 507 483 1482 509 513 487 1478 513 508 482 513 487 509 491 1473 518 1474 517 504 486 1479 512 510 490 1475 515 1475 516 1476 514 480 510 55019 4494 4442 509 511 489 507 483 512 488 507 483 1508 483 1508 483 513 487 508 482 1482 509 1483 508 1509 492 1499 492 504 486 510 490 505 485 510 490 4449 513 508 482 487 513 508 482 488 512 483 517 1499 492 504 486 1505 486 510 490 479 511 510 490 1501 490 1501 490 506 484 1506 485 511 489 1502 489 1476 515 1476 515 507 483 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4572 4451 552 478 526 478 526 478 500 503 501 1483 525 1482 551 478 525 478 525 1481 526 1482 524 1483 523 1485 522 482 521 482 522 482 522 469 521 4486 521 482 522 482 522 483 521 483 521 483 521 1487 521 483 521 1487 521 483 521 483 521 483 521 1487 521 1487 521 483 520 1487 521 483 521 1488 520 1487 521 1487 521 483 521 55487 4544 4482 522 482 522 482 522 482 522 482 522 1487 521 1487 521 482 522 482 522 1487 521 1487 521 1487 521 1487 521 482 522 483 521 483 521 469 522 4486 521 483 521 483 520 483 521 483 521 483 521 1487 521 483 521 1487 521 483 521 483 521 483 521 1488 521 1487 521 483 521 1488 520 483 521 1488 521 1488 521 1488 520 483 521 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4497 4438 513 508 492 503 487 509 491 504 486 1479 512 1479 511 510 490 505 485 1481 510 1481 510 1481 509 1482 509 512 488 507 483 513 487 508 482 4457 515 506 484 511 489 506 484 512 488 507 483 1482 509 513 487 1478 513 508 482 513 487 509 491 1473 518 1474 517 504 486 1479 512 510 490 1475 515 1475 516 1476 514 480 510 55019 4494 4442 509 511 489 507 483 512 488 507 483 1508 483 1508 483 513 487 508 482 1482 509 1483 508 1509 492 1499 492 504 486 510 490 505 485 510 490 4449 513 508 482 487 513 508 482 488 512 483 517 1499 492 504 486 1505 486 510 490 479 511 510 490 1501 490 1501 490 506 484 1506 485 511 489 1502 489 1476 515 1476 515 507 483 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4503 4434 517 504 486 510 490 505 485 510 490 1475 515 1476 514 507 483 512 488 1477 513 1477 513 1478 512 1479 511 483 517 479 511 484 516 479 511 4455 516 478 512 483 517 479 511 485 515 480 510 486 514 1477 513 1477 513 482 518 477 513 483 517 1474 516 1474 516 1475 515 480 510 485 515 1476 514 1477 513 1477 513 483 517 55012 4497 4440 511 484 516 480 510 485 515 480 510 1481 509 1482 509 487 513 482 518 1473 517 1474 516 1474 516 1475 515 480 510 486 514 481 509 486 514 4451 510 485 567 428 510 486 514 481 509 487 565 430 570 1421 518 1473 518 478 512 483 517 478 512 1479 511 1480 510 1480 510 486 514 481 509 1481 510 1481 509 1482 509 487 513 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4583 4441 575 454 550 455 549 457 548 456 549 1461 550 1460 549 456 549 457 549 1461 548 1462 549 1461 549 1461 548 457 548 457 549 457 547 457 549 4462 548 458 548 457 548 457 548 457 548 457 548 1462 548 457 548 1461 549 457 548 457 548 457 548 1462 548 1461 549 457 548 1461 549 457 548 1461 549 1461 548 1462 547 458 547 55448 4580 4465 550 456 549 456 549 456 550 456 549 1461 549 1460 549 457 549 456 549 1461 549 1461 549 1461 548 1461 549 457 548 457 549 457 548 457 548 4462 549 457 548 457 548 458 548 457 548 457 548 1462 549 457 547 1462 549 457 548 457 548 457 548 1462 548 1462 549 457 548 1462 548 457 548 1462 548 1461 549 1462 548 457 548 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4583 4441 575 454 550 455 549 457 548 456 549 1461 550 1460 549 456 549 457 549 1461 548 1462 549 1461 549 1461 548 457 548 457 549 457 547 457 549 4462 548 458 548 457 548 457 548 457 548 457 548 1462 548 457 548 1461 549 457 548 457 548 457 548 1462 548 1461 549 457 548 1461 549 457 548 1461 549 1461 548 1462 547 458 547 55448 4580 4465 550 456 549 456 549 456 550 456 549 1461 549 1460 549 457 549 456 549 1461 549 1461 549 1461 548 1461 549 457 548 457 549 457 548 457 548 4462 549 457 548 457 548 458 548 457 548 457 548 1462 549 457 547 1462 549 457 548 457 548 457 548 1462 548 1462 549 457 548 1462 548 457 548 1462 548 1461 549 1462 548 457 548 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4582 4465 551 454 550 455 550 455 549 456 549 1460 550 1460 549 457 548 456 549 1461 549 1461 548 1461 549 1460 549 457 549 456 548 457 548 457 548 4461 549 456 548 457 548 457 548 457 548 457 548 457 548 1462 548 1461 547 457 549 457 548 456 549 1460 549 1461 547 1461 549 457 547 457 548 1461 549 1461 548 1461 548 457 548 55436 4578 4464 549 455 549 456 549 455 549 456 550 1460 549 1460 549 456 550 455 550 1460 550 1460 549 1460 550 1460 549 456 549 457 548 457 548 457 549 4461 548 457 548 457 548 457 548 457 547 457 549 457 547 1462 548 1461 549 457 548 457 548 457 548 1461 548 1461 548 1462 548 457 548 457 549 1461 549 1461 548 1461 548 457 548 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4554 4466 540 469 547 490 515 495 521 490 494 1478 522 1477 544 466 539 471 513 1512 488 1484 516 1483 570 1429 540 497 519 465 540 470 546 491 493 4490 548 462 543 467 549 488 517 493 491 1481 519 1480 541 495 489 1510 522 462 543 494 521 489 495 1476 545 466 539 471 513 1485 547 464 520 1505 495 1477 513 1487 545 465 540 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4555 4464 542 468 548 462 543 467 549 488 496 1477 523 1476 545 465 551 459 525 1475 515 1484 516 1483 517 1482 550 486 519 465 551 459 546 464 520 4490 547 488 517 467 549 462 543 467 548 462 543 467 517 1482 518 1481 540 496 520 464 541 469 515 1484 516 1483 517 1482 550 460 545 465 519 1480 520 1479 521 1478 543 493 522 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4549 4471 546 464 541 469 547 463 542 469 515 1484 516 1483 549 461 544 466 518 1481 519 1480 520 1479 521 1477 544 466 550 461 544 467 549 461 523 4486 541 469 546 464 541 469 547 464 541 469 515 1483 549 462 522 1477 544 465 540 471 545 465 572 1428 520 1479 542 468 569 1430 549 462 522 1476 514 1486 514 1485 547 463 542 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4552 4464 586 420 584 420 584 420 612 392 529 1478 531 1478 531 476 553 451 553 1455 554 1479 528 1480 528 1481 527 478 526 478 526 478 526 478 526 4497 526 478 526 478 526 478 526 478 526 478 526 1483 526 478 526 1483 526 478 526 478 526 478 526 1483 526 1483 526 478 526 1483 526 479 525 1483 526 1483 526 1483 526 478 526 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4548 4471 540 471 541 468 544 467 545 465 516 1482 512 1488 537 473 539 472 519 1479 514 1484 520 1479 515 1485 539 470 542 468 544 466 546 464 517 4493 538 472 540 470 542 468 544 466 546 464 517 1482 543 468 513 544 471 469 574 436 514 1485 519 1480 545 465 547 1452 573 438 543 1456 548 1451 543 1456 569 442 570 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4549 4471 546 464 541 469 547 463 542 469 515 1484 516 1483 549 461 544 466 518 1481 519 1480 520 1479 521 1477 544 466 550 461 544 467 549 461 523 4486 541 469 546 464 541 469 547 464 541 469 515 1483 549 462 522 1477 544 465 540 471 545 465 572 1428 520 1479 542 468 569 1430 549 462 522 1476 514 1486 514 1485 547 463 542 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4552 4464 586 420 584 420 584 420 612 392 529 1478 531 1478 531 476 553 451 553 1455 554 1479 528 1480 528 1481 527 478 526 478 526 478 526 478 526 4497 526 478 526 478 526 478 526 478 526 478 526 1483 526 478 526 1483 526 478 526 478 526 478 526 1483 526 1483 526 478 526 1483 526 479 525 1483 526 1483 526 1483 526 478 526 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 4548 4471 540 471 541 468 544 467 545 465 516 1482 512 1488 537 473 539 472 519 1479 514 1484 520 1479 515 1485 539 470 542 468 544 466 546 464 517 4493 538 472 540 470 542 468 544 466 546 464 517 1482 543 468 513 544 471 469 574 436 514 1485 519 1480 545 465 547 1452 573 438 543 1456 548 1451 543 1456 569 442 570 +# +name: Next +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 34 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 1B 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 1B 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 1F 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 41 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 41 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 86 FF 00 00 +command: 2A D5 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 86 FF 00 00 +command: 13 EC 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 86 FF 00 00 +command: 14 EB 00 00 +# +name: Next +type: parsed +protocol: NECext +address: BA A0 00 00 +command: 5A A5 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: BA A0 00 00 +command: 59 A6 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: BA A0 00 00 +command: 56 A9 00 00 +# +name: Play +type: parsed +protocol: NECext +address: BA 4B 00 00 +command: 55 AA 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 35 00 00 00 +command: 46 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 83 22 00 00 +command: 09 F6 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: BA 4B 00 00 +command: 55 AA 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 35 00 00 00 +command: 46 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 83 22 00 00 +command: 09 F6 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 83 22 00 00 +command: 07 F8 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 83 22 00 00 +command: 06 F9 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 00 FB 00 00 +command: 1C E3 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 1B 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 06 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 00 FB 00 00 +command: 1C E3 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 1B 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 06 00 00 00 +# +name: Play +type: parsed +protocol: Samsung32 +address: 2C 00 00 00 +command: 4F 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 20 00 00 00 +command: 1A 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 20 00 00 00 +command: 4F 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: C8 91 00 00 +command: 21 DE 00 00 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4583 4441 575 454 550 455 549 457 548 456 549 1461 550 1460 549 456 549 457 549 1461 548 1462 549 1461 549 1461 548 457 548 457 549 457 547 457 549 4462 548 458 548 457 548 457 548 457 548 457 548 1462 548 457 548 1461 549 457 548 457 548 457 548 1462 548 1461 549 457 548 1461 549 457 548 1461 549 1461 548 1462 547 458 547 55448 4580 4465 550 456 549 456 549 456 550 456 549 1461 549 1460 549 457 549 456 549 1461 549 1461 549 1461 548 1461 549 457 548 457 549 457 548 457 548 4462 549 457 548 457 548 458 548 457 548 457 548 1462 549 457 547 1462 549 457 548 457 548 457 548 1462 548 1462 549 457 548 1462 548 457 548 1462 548 1461 549 1462 548 457 548 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4583 4441 575 454 550 455 549 457 548 456 549 1461 550 1460 549 456 549 457 549 1461 548 1462 549 1461 549 1461 548 457 548 457 549 457 547 457 549 4462 548 458 548 457 548 457 548 457 548 457 548 1462 548 457 548 1461 549 457 548 457 548 457 548 1462 548 1461 549 457 548 1461 549 457 548 1461 549 1461 548 1462 547 458 547 55448 4580 4465 550 456 549 456 549 456 550 456 549 1461 549 1460 549 457 549 456 549 1461 549 1461 549 1461 548 1461 549 457 548 457 549 457 548 457 548 4462 549 457 548 457 548 458 548 457 548 457 548 1462 549 457 547 1462 549 457 548 457 548 457 548 1462 548 1462 549 457 548 1462 548 457 548 1462 548 1461 549 1462 548 457 548 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4582 4465 551 454 550 455 550 455 549 456 549 1460 550 1460 549 457 548 456 549 1461 549 1461 548 1461 549 1460 549 457 549 456 548 457 548 457 548 4461 549 456 548 457 548 457 548 457 548 457 548 457 548 1462 548 1461 547 457 549 457 548 456 549 1460 549 1461 547 1461 549 457 547 457 548 1461 549 1461 548 1461 548 457 548 55436 4578 4464 549 455 549 456 549 455 549 456 550 1460 549 1460 549 456 550 455 550 1460 550 1460 549 1460 550 1460 549 456 549 457 548 457 548 457 549 4461 548 457 548 457 548 457 548 457 547 457 549 457 547 1462 548 1461 549 457 548 457 548 457 548 1461 548 1461 548 1462 548 457 548 457 549 1461 549 1461 548 1461 548 457 548 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4554 4466 540 469 547 490 515 495 521 490 494 1478 522 1477 544 466 539 471 513 1512 488 1484 516 1483 570 1429 540 497 519 465 540 470 546 491 493 4490 548 462 543 467 549 488 517 493 491 1481 519 1480 541 495 489 1510 522 462 543 494 521 489 495 1476 545 466 539 471 513 1485 547 464 520 1505 495 1477 513 1487 545 465 540 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4555 4464 542 468 548 462 543 467 549 488 496 1477 523 1476 545 465 551 459 525 1475 515 1484 516 1483 517 1482 550 486 519 465 551 459 546 464 520 4490 547 488 517 467 549 462 543 467 548 462 543 467 517 1482 518 1481 540 496 520 464 541 469 515 1484 516 1483 517 1482 550 460 545 465 519 1480 520 1479 521 1478 543 493 522 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4549 4471 546 464 541 469 547 463 542 469 515 1484 516 1483 549 461 544 466 518 1481 519 1480 520 1479 521 1477 544 466 550 461 544 467 549 461 523 4486 541 469 546 464 541 469 547 464 541 469 515 1483 549 462 522 1477 544 465 540 471 545 465 572 1428 520 1479 542 468 569 1430 549 462 522 1476 514 1486 514 1485 547 463 542 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4552 4464 586 420 584 420 584 420 612 392 529 1478 531 1478 531 476 553 451 553 1455 554 1479 528 1480 528 1481 527 478 526 478 526 478 526 478 526 4497 526 478 526 478 526 478 526 478 526 478 526 1483 526 478 526 1483 526 478 526 478 526 478 526 1483 526 1483 526 478 526 1483 526 479 525 1483 526 1483 526 1483 526 478 526 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4548 4471 540 471 541 468 544 467 545 465 516 1482 512 1488 537 473 539 472 519 1479 514 1484 520 1479 515 1485 539 470 542 468 544 466 546 464 517 4493 538 472 540 470 542 468 544 466 546 464 517 1482 543 468 513 544 471 469 574 436 514 1485 519 1480 545 465 547 1452 573 438 543 1456 548 1451 543 1456 569 442 570 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4549 4471 546 464 541 469 547 463 542 469 515 1484 516 1483 549 461 544 466 518 1481 519 1480 520 1479 521 1477 544 466 550 461 544 467 549 461 523 4486 541 469 546 464 541 469 547 464 541 469 515 1483 549 462 522 1477 544 465 540 471 545 465 572 1428 520 1479 542 468 569 1430 549 462 522 1476 514 1486 514 1485 547 463 542 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4552 4464 586 420 584 420 584 420 612 392 529 1478 531 1478 531 476 553 451 553 1455 554 1479 528 1480 528 1481 527 478 526 478 526 478 526 478 526 4497 526 478 526 478 526 478 526 478 526 478 526 1483 526 478 526 1483 526 478 526 478 526 478 526 1483 526 1483 526 478 526 1483 526 479 525 1483 526 1483 526 1483 526 478 526 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 4548 4471 540 471 541 468 544 467 545 465 516 1482 512 1488 537 473 539 472 519 1479 514 1484 520 1479 515 1485 539 470 542 468 544 466 546 464 517 4493 538 472 540 470 542 468 544 466 546 464 517 1482 543 468 513 544 471 469 574 436 514 1485 519 1480 545 465 547 1452 573 438 543 1456 548 1451 543 1456 569 442 570 +# +name: Play +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 32 00 00 00 +# +name: Pause +type: parsed +protocol: SIRC20 +address: 10 01 00 00 +command: 39 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 8E 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 8E 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 8B 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 8A 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 20 00 00 00 +command: 1B 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 20 00 00 00 +command: 1B 00 00 00 +# +# Speakers +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1041 1461 540 457 543 453 537 459 541 1459 541 1459 542 1459 541 1459 542 1458 542 1458 543 1458 542 1458 542 453 537 459 541 455 545 451 539 450 540 50518 1041 1461 540 457 543 452 538 459 541 1459 541 1459 542 1459 541 1458 543 1458 542 1458 542 1458 542 1457 544 453 537 459 541 455 545 451 539 449 541 50534 1036 1467 544 452 538 458 542 454 546 1455 545 1454 546 1454 536 1464 537 1464 536 1463 537 1463 537 1463 537 459 541 454 546 450 540 457 543 445 545 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1041 1461 540 457 543 453 537 459 541 1459 541 1459 542 1459 541 1459 542 1458 542 1458 543 1458 542 1458 542 453 537 459 541 455 545 451 539 450 540 50518 1041 1461 540 457 543 452 538 459 541 1459 541 1459 542 1459 541 1458 543 1458 542 1458 542 1458 542 1457 544 453 537 459 541 455 545 451 539 449 541 50534 1036 1467 544 452 538 458 542 454 546 1455 545 1454 546 1454 536 1464 537 1464 536 1463 537 1463 537 1463 537 459 541 454 546 450 540 457 543 445 545 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1044 1460 540 456 544 1457 543 1457 543 453 536 1465 545 450 539 457 543 1458 542 1458 542 454 546 451 539 1462 538 458 542 1459 541 1460 540 448 542 50525 1042 1462 538 458 542 1458 542 1459 541 455 545 1456 544 452 537 459 541 1460 540 1460 540 456 544 452 537 1464 536 460 540 1461 539 1461 539 449 540 50542 1046 1458 542 480 520 1455 545 1455 545 477 512 1463 547 474 515 481 519 1456 544 1457 543 478 522 475 514 1460 540 482 518 1457 543 1458 542 445 544 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1046 1457 543 1458 542 454 546 450 539 1461 539 456 544 1458 542 1458 542 454 546 451 539 1461 539 1462 538 458 542 1459 541 454 546 451 539 1454 546 50538 1043 1461 539 1461 539 456 544 453 547 1454 546 449 541 1461 539 1462 538 457 543 453 547 1455 545 1455 545 451 539 1462 538 458 542 454 546 1447 543 50526 1044 1459 541 1459 541 455 545 451 539 1463 537 458 542 1459 541 1460 540 455 545 452 538 1463 537 1464 536 460 540 1461 539 456 544 453 536 1456 544 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1013 1488 512 486 514 486 514 1485 515 484 516 484 516 1483 517 1482 518 1481 509 1490 510 1488 512 488 512 1487 513 1485 515 484 516 483 517 481 519 50939 1010 1489 511 488 512 488 512 1486 514 486 514 486 514 1485 515 1483 517 1482 518 1481 509 1489 511 489 511 1487 513 1485 515 484 516 484 516 482 518 50958 1013 1488 512 487 513 487 513 1485 515 485 515 485 515 1484 516 1483 517 1482 518 1481 509 1490 510 490 572 1426 512 1487 513 486 514 486 514 485 566 50908 1011 1490 510 489 511 489 511 1487 513 486 514 487 513 1485 515 1484 516 1483 517 1482 518 1480 510 491 571 1427 511 1488 512 488 512 487 513 486 565 50905 1013 1488 512 488 512 488 512 1486 514 486 514 486 514 1485 515 1484 516 1483 517 1481 509 1489 511 489 511 1488 512 1486 514 485 515 485 515 484 516 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 1013 1488 512 486 514 486 514 1485 515 484 516 484 516 1483 517 1482 518 1481 509 1490 510 1488 512 488 512 1487 513 1485 515 484 516 483 517 481 519 50939 1010 1489 511 488 512 488 512 1486 514 486 514 486 514 1485 515 1483 517 1482 518 1481 509 1489 511 489 511 1487 513 1485 515 484 516 484 516 482 518 50958 1013 1488 512 487 513 487 513 1485 515 485 515 485 515 1484 516 1483 517 1482 518 1481 509 1490 510 490 572 1426 512 1487 513 486 514 486 514 485 566 50908 1011 1490 510 489 511 489 511 1487 513 486 514 487 513 1485 515 1484 516 1483 517 1482 518 1480 510 491 571 1427 511 1488 512 488 512 487 513 486 565 50905 1013 1488 512 488 512 488 512 1486 514 486 514 486 514 1485 515 1484 516 1483 517 1481 509 1489 511 489 511 1488 512 1486 514 485 515 485 515 484 516 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 19 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 77 00 00 00 +command: F8 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 14 EB 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 77 00 00 00 +command: F8 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 14 EB 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 1E E1 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 3F 5C 00 00 +command: 07 F8 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 12 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 3F 5C 00 00 +command: 07 F8 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 12 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 10 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 13 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 0A 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 0A 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 0C 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 00 00 00 00 +command: 0B 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 40 AF 00 00 +command: 02 FD 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 40 AF 00 00 +command: 02 FD 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 40 AF 00 00 +command: 12 ED 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 40 AF 00 00 +command: 05 FA 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 02 BD 00 00 +command: 0D F2 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 02 BD 00 00 +command: 27 D8 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 02 BD 00 00 +command: 25 DA 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 18 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 18 00 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 4B 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 4A 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 21 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: 02 00 00 00 +command: 1E 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 80 00 00 00 +command: 21 00 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: 02 00 00 00 +command: 1E 00 00 00 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 3303 1908 408 1179 410 1177 412 442 409 444 407 446 405 448 414 1173 405 448 414 1173 416 1172 406 447 415 439 412 1175 414 440 411 1175 414 440 411 1175 414 440 411 442 409 444 407 447 415 438 413 440 411 442 409 444 407 446 405 1182 407 447 415 438 413 440 411 442 409 444 407 1180 409 1178 411 443 408 445 406 1180 409 445 406 447 415 438 413 440 411 442 409 444 407 1180 409 444 407 446 405 448 414 440 411 41789 3301 3346 362 42926 3307 3341 357 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 3301 1910 406 1155 434 1180 409 419 432 421 441 439 412 441 410 1178 411 416 435 1152 437 1177 412 442 409 417 434 1180 409 418 433 1180 409 445 406 1155 434 419 432 447 415 413 438 442 409 444 407 419 432 448 414 439 412 442 409 1177 412 442 409 444 407 420 431 448 414 413 438 1176 413 1174 415 413 438 1175 414 1173 405 422 440 440 411 416 435 418 433 447 415 439 412 441 410 1177 412 415 436 417 434 446 405 41164 3301 3321 387 42935 3307 3316 381 42941 3311 3312 385 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9175 4433 644 1605 645 442 669 466 646 445 666 438 673 466 645 440 671 466 673 410 700 365 720 465 675 367 742 367 744 438 645 1604 675 1574 674 1549 702 1575 673 1576 646 1604 675 1574 676 1574 675 1576 644 1604 645 1606 672 1576 645 466 645 466 645 465 646 1575 675 1605 645 466 645 467 644 467 644 1605 644 1605 645 1606 644 467 644 467 644 1606 643 1578 672 1607 643 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9146 4435 642 1577 673 449 662 454 658 451 661 469 642 468 644 469 642 453 659 470 642 470 642 469 643 469 642 469 642 469 642 1608 642 1606 643 1607 642 1607 642 1607 642 1577 673 1607 643 1607 642 1607 642 1607 642 1606 643 1576 674 1606 643 468 643 439 672 1607 642 1607 642 448 663 469 642 439 672 469 642 1577 672 1607 642 468 643 469 642 1607 642 1608 641 1608 640 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.33 +data: 9144 4405 671 1607 642 469 642 469 642 469 642 470 641 365 747 469 641 443 669 469 642 468 643 446 665 469 642 469 642 470 642 1580 669 1607 643 1607 642 1608 641 1578 672 1580 670 1608 641 1608 641 1609 590 1660 590 1635 615 1660 590 1660 590 1632 618 1633 617 521 590 1660 590 521 590 521 618 493 590 521 590 520 591 519 592 1657 592 519 592 1658 617 1633 616 1633 615 23844 9114 4461 615 +# +name: Play +type: parsed +protocol: SIRC +address: 10 00 00 00 +command: 0C 00 00 00 +# +name: Play +type: parsed +protocol: NEC +address: FD 00 00 00 +command: BD 00 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 2D D3 00 00 +command: 00 FF 00 00 +# +name: Pause +type: parsed +protocol: NEC +address: FD 00 00 00 +command: BD 00 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 2D D3 00 00 +command: 00 FF 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 2D D3 00 00 +command: 07 F8 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 2D D3 00 00 +command: 06 F9 00 00 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1041 1461 540 457 543 453 537 459 541 1459 541 1459 542 1459 541 1459 542 1458 542 1458 543 1458 542 1458 542 453 537 459 541 455 545 451 539 450 540 50518 1041 1461 540 457 543 452 538 459 541 1459 541 1459 542 1459 541 1458 543 1458 542 1458 542 1458 542 1457 544 453 537 459 541 455 545 451 539 449 541 50534 1036 1467 544 452 538 458 542 454 546 1455 545 1454 546 1454 536 1464 537 1464 536 1463 537 1463 537 1463 537 459 541 454 546 450 540 457 543 445 545 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1041 1461 540 457 543 453 537 459 541 1459 541 1459 542 1459 541 1459 542 1458 542 1458 543 1458 542 1458 542 453 537 459 541 455 545 451 539 450 540 50518 1041 1461 540 457 543 452 538 459 541 1459 541 1459 542 1459 541 1458 543 1458 542 1458 542 1458 542 1457 544 453 537 459 541 455 545 451 539 449 541 50534 1036 1467 544 452 538 458 542 454 546 1455 545 1454 546 1454 536 1464 537 1464 536 1463 537 1463 537 1463 537 459 541 454 546 450 540 457 543 445 545 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1044 1460 540 456 544 1457 543 1457 543 453 536 1465 545 450 539 457 543 1458 542 1458 542 454 546 451 539 1462 538 458 542 1459 541 1460 540 448 542 50525 1042 1462 538 458 542 1458 542 1459 541 455 545 1456 544 452 537 459 541 1460 540 1460 540 456 544 452 537 1464 536 460 540 1461 539 1461 539 449 540 50542 1046 1458 542 480 520 1455 545 1455 545 477 512 1463 547 474 515 481 519 1456 544 1457 543 478 522 475 514 1460 540 482 518 1457 543 1458 542 445 544 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1046 1457 543 1458 542 454 546 450 539 1461 539 456 544 1458 542 1458 542 454 546 451 539 1461 539 1462 538 458 542 1459 541 454 546 451 539 1454 546 50538 1043 1461 539 1461 539 456 544 453 547 1454 546 449 541 1461 539 1462 538 457 543 453 547 1455 545 1455 545 451 539 1462 538 458 542 454 546 1447 543 50526 1044 1459 541 1459 541 455 545 451 539 1463 537 458 542 1459 541 1460 540 455 545 452 538 1463 537 1464 536 460 540 1461 539 456 544 453 536 1456 544 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1013 1488 512 486 514 486 514 1485 515 484 516 484 516 1483 517 1482 518 1481 509 1490 510 1488 512 488 512 1487 513 1485 515 484 516 483 517 481 519 50939 1010 1489 511 488 512 488 512 1486 514 486 514 486 514 1485 515 1483 517 1482 518 1481 509 1489 511 489 511 1487 513 1485 515 484 516 484 516 482 518 50958 1013 1488 512 487 513 487 513 1485 515 485 515 485 515 1484 516 1483 517 1482 518 1481 509 1490 510 490 572 1426 512 1487 513 486 514 486 514 485 566 50908 1011 1490 510 489 511 489 511 1487 513 486 514 487 513 1485 515 1484 516 1483 517 1482 518 1480 510 491 571 1427 511 1488 512 488 512 487 513 486 565 50905 1013 1488 512 488 512 488 512 1486 514 486 514 486 514 1485 515 1484 516 1483 517 1481 509 1489 511 489 511 1488 512 1486 514 485 515 485 515 484 516 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 1013 1488 512 486 514 486 514 1485 515 484 516 484 516 1483 517 1482 518 1481 509 1490 510 1488 512 488 512 1487 513 1485 515 484 516 483 517 481 519 50939 1010 1489 511 488 512 488 512 1486 514 486 514 486 514 1485 515 1483 517 1482 518 1481 509 1489 511 489 511 1487 513 1485 515 484 516 484 516 482 518 50958 1013 1488 512 487 513 487 513 1485 515 485 515 485 515 1484 516 1483 517 1482 518 1481 509 1490 510 490 572 1426 512 1487 513 486 514 486 514 485 566 50908 1011 1490 510 489 511 489 511 1487 513 486 514 487 513 1485 515 1484 516 1483 517 1482 518 1480 510 491 571 1427 511 1488 512 488 512 487 513 486 565 50905 1013 1488 512 488 512 488 512 1486 514 486 514 486 514 1485 515 1484 516 1483 517 1481 509 1489 511 489 511 1488 512 1486 514 485 515 485 515 484 516 +# +name: Next +type: parsed +protocol: NEC +address: 77 00 00 00 +command: F7 00 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 08 F7 00 00 +# +name: Play +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 5E A1 00 00 +# +name: Pause +type: parsed +protocol: NECext +address: 10 E7 00 00 +command: 5E A1 00 00 +# +name: Next +type: parsed +protocol: NECext +address: 3F 5C 00 00 +command: 16 E9 00 00 +# +name: Prev +type: parsed +protocol: NECext +address: 3F 5C 00 00 +command: 17 E8 00 00 +# +name: Prev +type: parsed +protocol: NEC +address: 02 00 00 00 +command: 02 00 00 00 +# +name: Next +type: parsed +protocol: NEC +address: 02 00 00 00 +command: 05 00 00 00 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 3303 1908 408 1179 410 1177 412 442 409 444 407 446 405 448 414 1173 405 448 414 1173 416 1172 406 447 415 439 412 1175 414 440 411 1175 414 440 411 1175 414 440 411 442 409 444 407 447 415 438 413 440 411 442 409 444 407 446 405 1182 407 447 415 438 413 440 411 442 409 444 407 1180 409 1178 411 443 408 445 406 1180 409 445 406 447 415 438 413 440 411 442 409 444 407 1180 409 444 407 446 405 448 414 440 411 41789 3301 3346 362 42926 3307 3341 357 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 3301 1910 406 1155 434 1180 409 419 432 421 441 439 412 441 410 1178 411 416 435 1152 437 1177 412 442 409 417 434 1180 409 418 433 1180 409 445 406 1155 434 419 432 447 415 413 438 442 409 444 407 419 432 448 414 439 412 442 409 1177 412 442 409 444 407 420 431 448 414 413 438 1176 413 1174 415 413 438 1175 414 1173 405 422 440 440 411 416 435 418 433 447 415 439 412 441 410 1177 412 415 436 417 434 446 405 41164 3301 3321 387 42935 3307 3316 381 42941 3311 3312 385 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 3309 1901 415 1173 405 1182 407 420 442 412 439 441 410 443 408 1179 410 444 407 1180 409 1179 410 444 407 420 431 1183 406 447 415 1147 442 412 439 1148 441 439 412 441 410 443 408 446 405 448 414 440 411 415 436 444 407 446 405 1182 407 447 415 412 439 440 411 443 408 418 433 1181 408 1180 409 418 433 447 415 439 412 441 410 443 408 445 406 1181 408 1180 409 1178 411 417 434 445 406 421 441 439 412 415 436 41161 3303 3320 388 42939 3301 3347 361 +# +name: Pause +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 3309 1901 415 1173 405 1182 407 420 442 412 439 441 410 443 408 1179 410 444 407 1180 409 1179 410 444 407 420 431 1183 406 447 415 1147 442 412 439 1148 441 439 412 441 410 443 408 446 405 448 414 440 411 415 436 444 407 446 405 1182 407 447 415 412 439 440 411 443 408 418 433 1181 408 1180 409 418 433 447 415 439 412 441 410 443 408 445 406 1181 408 1180 409 1178 411 417 434 445 406 421 441 439 412 415 436 41161 3303 3320 388 42939 3301 3347 361 +# +name: Play +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 9175 4433 644 1605 645 442 669 466 646 445 666 438 673 466 645 440 671 466 673 410 700 365 720 465 675 367 742 367 744 438 645 1604 675 1574 674 1549 702 1575 673 1576 646 1604 675 1574 676 1574 675 1576 644 1604 645 1606 672 1576 645 466 645 466 645 465 646 1575 675 1605 645 466 645 467 644 467 644 1605 644 1605 645 1606 644 467 644 467 644 1606 643 1578 672 1607 643 +# +name: Next +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 9146 4435 642 1577 673 449 662 454 658 451 661 469 642 468 644 469 642 453 659 470 642 470 642 469 643 469 642 469 642 469 642 1608 642 1606 643 1607 642 1607 642 1607 642 1577 673 1607 643 1607 642 1607 642 1607 642 1606 643 1576 674 1606 643 468 643 439 672 1607 642 1607 642 448 663 469 642 439 672 469 642 1577 672 1607 642 468 643 469 642 1607 642 1608 641 1608 640 +# +name: Prev +type: raw +frequency: 38000 +duty_cycle: 0.330000 +data: 9144 4405 671 1607 642 469 642 469 642 469 642 470 641 365 747 469 641 443 669 469 642 468 643 446 665 469 642 469 642 470 642 1580 669 1607 643 1607 642 1608 641 1578 672 1580 670 1608 641 1608 641 1609 590 1660 590 1635 615 1660 590 1660 590 1632 618 1633 617 521 590 1660 590 521 590 521 618 493 590 521 590 520 591 519 592 1657 592 519 592 1658 617 1633 616 1633 615 23844 9114 4461 615 +# +name: Next +type: parsed +protocol: NEC +address: FD 00 00 00 +command: EA 00 00 00 diff --git a/assets/resources/infrared/assets/fans.ir b/assets/resources/infrared/assets/fans.ir index a741daf8e3..734de79e0f 100644 --- a/assets/resources/infrared/assets/fans.ir +++ b/assets/resources/infrared/assets/fans.ir @@ -3,1532 +3,1532 @@ Version: 1 # Last Updated 17th May, 2023 # Last Checked 17th May, 2023 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1301 370 1299 371 558 1107 1301 371 1272 398 557 1108 562 1107 562 1107 561 1108 560 1110 559 1110 1272 7254 1269 423 1244 425 530 1140 1242 427 1241 428 527 1142 527 1142 527 1142 527 1142 527 1142 527 1142 1241 7285 1241 428 1241 428 528 1142 1240 428 1241 428 528 1142 527 1142 527 1142 527 1142 527 1142 527 1142 1240 7284 1240 428 1241 429 527 1142 1241 429 1240 429 527 1142 527 1142 528 1142 527 1142 527 1142 527 1142 1240 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1268 400 1267 424 505 1164 1243 426 1242 427 504 1166 503 1166 503 1166 528 1141 1242 428 503 1166 503 8024 1241 427 1241 428 528 1141 1241 428 1241 428 503 1166 503 1167 502 1167 527 1142 1241 428 503 1166 503 8024 1241 427 1242 427 504 1167 1241 428 1241 428 503 1167 503 1167 503 1166 528 1142 1242 428 503 1167 502 8024 1241 428 1241 428 503 1167 1241 428 1241 428 503 1167 503 1167 503 1167 503 1167 1241 428 528 1142 503 8025 1240 429 1240 429 502 1167 1241 429 1240 429 502 1167 503 1167 503 1167 502 1167 1240 429 502 1168 501 8026 1239 430 1239 430 501 1169 1238 431 1238 430 501 1170 524 1170 475 1171 499 1170 1237 456 475 1195 474 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1242 425 1242 401 554 1140 1242 426 1243 428 504 1165 504 1167 1240 427 530 1141 530 1139 504 1167 527 7998 1241 427 1242 427 503 1166 1241 427 1242 428 529 1141 503 1167 1239 429 528 1141 503 1168 529 1140 528 7999 1240 428 1241 427 504 1167 1240 429 1239 429 528 1142 502 1167 1241 428 503 1167 503 1166 528 1142 528 7999 1240 429 1240 429 501 1168 1240 428 1242 427 528 1143 527 1142 1241 428 503 1167 502 1167 528 1142 502 8026 1239 428 1242 428 528 1142 1215 455 1240 427 504 1169 500 1168 1241 427 503 1168 527 1141 504 1166 530 7999 1239 429 1240 429 503 1167 1240 430 1239 430 502 1168 502 1168 1238 430 503 1169 526 1142 503 1167 502 8026 1239 429 1240 429 502 1168 1239 430 1241 428 502 1168 502 1168 1239 429 502 1167 503 1167 502 1168 502 8025 1239 428 1241 429 527 1143 1239 428 1241 429 502 1168 526 1142 1242 428 502 1167 502 1168 502 1167 502 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9086 4339 707 443 681 445 681 422 704 445 681 445 681 445 681 445 681 445 656 1563 683 1563 682 1563 707 1539 706 1562 682 1562 682 1564 680 1565 679 1566 679 448 679 1567 678 448 679 448 679 448 679 1566 679 448 679 448 678 1566 679 448 678 1566 678 1566 678 1566 678 448 678 1566 679 39846 9058 2132 679 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9083 4342 705 446 679 447 679 447 680 447 680 447 679 425 702 447 679 447 654 1564 681 1564 680 1565 680 1591 680 1565 680 1565 679 1565 679 1566 678 1568 677 1569 676 1569 676 451 676 450 677 450 677 1569 676 451 676 451 675 450 677 450 677 1570 675 1570 675 1569 676 451 676 1569 676 39854 9056 2136 677 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9267 4339 708 443 682 445 682 422 734 416 711 416 711 416 711 415 712 415 658 1563 682 1564 682 1565 681 1587 684 1562 683 1563 683 1563 682 1564 681 1565 680 447 679 447 679 1566 679 1566 680 447 680 447 680 447 680 447 680 1566 679 1566 679 447 680 447 680 1566 679 1566 679 1566 679 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9085 4343 705 446 679 447 680 447 680 447 679 425 701 447 679 423 703 446 655 1563 682 1563 681 1565 679 1589 681 1564 680 1563 680 1564 679 1566 678 449 677 450 676 1568 677 1568 677 1569 676 450 676 450 676 450 677 1568 677 1568 677 450 676 450 676 450 677 1568 676 1568 677 1568 676 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1284 419 1288 442 417 1258 1288 415 1282 448 411 1264 443 1258 439 1263 444 1258 1288 415 444 1258 439 8679 1284 419 1288 441 407 1267 1289 441 1256 447 412 1262 435 1267 440 1262 435 1293 1263 413 435 1267 440 8679 1284 418 1289 441 407 1267 1289 414 1283 447 412 1262 435 1267 440 1261 436 1267 1289 413 435 1267 440 8678 1285 418 1289 440 408 1267 1289 440 1257 447 412 1262 435 1267 440 1262 435 1268 1288 414 434 1268 439 8679 1284 418 1289 440 408 1267 1289 413 1284 445 414 1261 436 1266 441 1260 437 1266 1290 412 436 1266 441 8676 1287 415 1282 448 411 1264 1282 421 1286 443 416 1258 439 1263 434 1267 440 1262 1284 419 440 1262 435 8683 1280 422 1285 444 415 1287 1259 444 1253 449 410 1292 415 1285 412 1264 443 1259 1287 416 443 1259 438 8680 1284 420 1287 414 434 1268 1288 415 1282 447 412 1289 408 1267 440 1262 435 1267 1289 414 434 1268 439 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1283 420 1287 443 416 1259 1287 443 1254 449 410 1292 415 1260 437 1266 1290 439 409 1266 442 1261 436 8684 1290 413 1284 446 413 1263 1283 447 1261 442 417 1258 439 1263 444 1259 1287 442 417 1259 438 1264 443 8677 1287 416 1281 449 410 1265 1281 449 1259 444 415 1260 437 1265 442 1260 1286 443 416 1260 437 1265 442 8676 1288 415 1282 447 412 1263 1283 447 1261 442 417 1257 440 1263 434 1268 1288 441 418 1257 440 1263 434 8685 1289 414 1283 447 412 1263 1283 447 1261 442 417 1258 439 1263 445 1258 1288 442 417 1258 439 1264 444 8676 1288 415 1282 448 411 1264 1282 448 1260 444 415 1259 438 1264 443 1260 1286 417 442 1260 437 1265 442 8677 1286 416 1281 449 410 1265 1281 422 1285 444 415 1260 437 1265 442 1260 1286 417 442 1260 437 1265 442 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1281 422 1285 444 415 1260 1286 444 1263 439 409 1266 441 1261 1285 445 414 1261 436 1266 441 1261 436 8682 1281 421 1286 444 415 1260 1286 445 1262 439 409 1266 441 1261 1285 445 414 1261 436 1266 441 1260 437 8683 1280 422 1286 444 415 1261 1285 445 1262 440 408 1267 440 1262 1284 446 413 1262 435 1268 439 1262 435 8684 1279 423 1284 445 414 1261 1285 445 1263 439 409 1265 442 1260 1286 444 415 1260 437 1265 442 1259 438 8682 1281 421 1286 443 416 1259 1287 443 1254 448 411 1264 443 1259 1287 443 416 1259 438 1265 442 1260 437 8682 1281 421 1286 444 415 1260 1286 444 1253 450 409 1266 441 1261 1285 445 414 1261 436 1266 441 1261 436 8683 1290 413 1284 445 414 1262 1283 446 1261 441 407 1294 413 1262 1284 420 439 1263 434 1267 440 1262 435 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1294 371 1351 322 443 1200 1295 346 1297 373 444 1224 445 1198 1300 345 498 1170 473 1171 496 1173 471 8057 1295 372 1297 347 444 1224 1296 347 1296 349 494 1172 470 1174 1293 376 469 1174 469 1200 468 1175 468 8082 1293 351 1318 349 468 1175 1292 377 1294 349 468 1177 491 1175 1293 350 442 1226 468 1175 468 1201 467 8083 1293 350 1268 401 467 1175 1293 351 1318 350 467 1175 442 1226 1293 350 467 1177 466 1200 468 1176 441 8133 1292 351 1267 400 468 1175 1292 351 1292 376 466 1177 467 1202 1291 352 442 1202 465 1203 441 1201 442 8132 1267 376 1267 402 440 1202 1266 377 1290 379 439 1226 416 1253 1241 402 415 1228 439 1229 414 1228 415 8161 1239 403 1240 404 439 1229 1240 403 1240 429 414 1229 414 1231 1264 404 413 1229 414 1255 413 1229 413 8161 1238 404 1239 405 437 1230 1239 404 1238 430 412 1230 412 1232 1262 405 412 1231 412 1256 412 1231 412 8162 1238 406 1237 406 411 1258 1237 406 1237 431 412 1256 387 1256 1213 456 386 1256 386 1257 412 1256 386 8164 1237 431 1212 431 386 1283 1212 431 1212 432 411 1257 386 1257 1211 457 386 1257 386 1258 411 1258 385 8164 1212 431 1212 432 411 1256 1213 431 1236 433 386 1256 387 1257 1238 430 386 1257 386 1282 386 1256 386 -# ON/SPEED+ -name: POWER +# ON/Speed_up +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1330 364 1385 320 523 1158 1332 365 1329 364 479 1213 481 1213 481 1213 481 1213 481 1213 1332 390 480 8072 1358 362 1329 364 478 1216 1328 366 1328 367 476 1218 476 1218 476 1218 476 1218 476 1218 1328 367 476 8103 1328 367 1327 367 476 1218 1327 367 1327 367 476 1218 476 1218 476 1218 476 1218 476 1218 1327 367 476 8103 1327 367 1327 367 476 1218 1327 368 1326 367 476 1218 476 1219 475 1219 475 1219 475 1219 1326 368 475 8104 1327 368 1326 368 475 1219 1327 368 1326 368 475 1219 475 1219 475 1219 475 1219 475 1219 1326 368 475 8105 1326 368 1326 368 475 1219 1327 368 1326 368 475 1220 474 1220 474 1220 475 1220 474 1220 1325 368 475 8105 1326 369 1325 369 474 1220 1326 369 1325 369 474 1220 474 1220 474 1220 474 1220 474 1220 1326 369 474 8106 1325 369 1325 369 474 1220 1325 369 1326 369 474 1220 474 1220 474 1220 474 1220 474 1221 1324 370 473 8132 1273 422 1272 422 446 1248 1272 422 1297 397 421 1275 419 1300 419 1276 419 1275 419 1250 1297 398 445 8135 1297 397 1297 397 447 1247 1298 397 1297 397 447 1247 447 1247 447 1247 447 1247 447 1247 1298 397 447 8134 1298 397 1298 397 447 1248 1297 397 1297 397 447 1248 446 1248 446 1248 447 1248 447 1248 1297 397 447 8133 1298 397 1297 397 447 1248 1297 397 1297 397 447 1248 446 1248 447 1248 446 1248 446 1248 1297 398 446 8134 1297 398 1296 398 446 1248 1297 398 1296 398 446 1248 446 1248 446 1248 446 1248 446 1248 1296 398 446 8134 1295 398 1296 398 446 1248 1296 398 1296 398 446 1249 445 1249 445 1249 445 1249 445 1249 1295 399 445 8134 1295 399 1295 399 445 1249 1295 399 1295 399 445 1249 445 1249 445 1250 444 1249 445 1249 1295 399 445 8135 1295 400 1294 400 444 1250 1294 400 1295 400 444 1250 444 1250 444 1250 444 1250 444 1250 1294 401 443 8137 1293 401 1294 401 442 1251 1294 401 1293 401 442 1253 442 1252 442 1252 442 1252 442 1252 1293 427 417 8140 1292 426 1268 427 417 1277 1243 452 1267 427 417 1278 417 1277 417 1278 417 1277 417 1277 1268 427 417 8163 1242 452 1242 452 417 1278 1242 453 1241 453 391 1303 391 1303 392 1303 391 1303 391 1303 1242 453 415 8165 1241 453 1241 453 391 1304 1241 453 1241 454 390 1305 389 1304 390 1304 390 1305 389 1305 1240 480 364 8216 1214 480 1214 480 363 1331 1214 480 1214 480 364 1331 363 1331 363 1331 363 1331 363 1331 1214 481 363 8218 1213 481 1213 481 363 1333 1212 508 1186 508 335 1359 335 1359 335 1359 335 1359 335 1360 1186 508 335 8247 1184 509 1185 535 307 1387 1159 536 1158 589 253 1389 306 1415 278 1416 252 1442 199 1575 1052 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1318 346 1298 324 494 1201 1291 345 1297 375 466 1174 470 1200 442 1201 467 1201 441 1201 466 1204 1265 7229 1373 322 1266 375 466 1202 1267 325 1318 378 465 1200 442 1202 465 1202 442 1201 441 1202 467 1171 1297 7281 1268 325 1399 323 439 1200 1293 348 1351 322 441 1202 522 1145 498 1172 439 1204 496 1171 471 1148 1346 7227 1323 322 1266 325 574 1145 1322 322 1347 322 496 1115 528 1171 497 1145 497 1148 521 1145 497 1145 1291 7285 1322 322 1321 323 521 1147 1321 322 1346 322 496 1172 470 1147 522 1145 498 1146 519 1149 497 1171 1297 7252 1323 322 1321 323 520 1144 1323 322 1343 323 498 1144 498 1147 522 1146 496 1146 571 1123 471 1145 1323 7229 1345 322 1321 322 570 1097 1322 323 1320 323 521 1146 496 1146 519 1148 498 1145 498 1149 520 1145 1322 7229 1347 323 1320 322 464 1202 1323 323 1320 322 522 1145 497 1145 466 1228 471 1116 527 1147 522 1147 1321 7226 1348 322 1266 375 442 1202 1292 348 1295 375 523 1146 442 1201 442 1202 466 1200 442 1200 467 1202 1268 7281 1292 375 1270 346 471 1201 1293 373 1270 374 523 1145 445 1199 443 1200 469 1199 443 1200 524 1144 1269 7258 1292 374 1269 374 468 1200 1269 374 1269 400 443 1200 443 1201 467 1201 498 1146 497 1172 497 1145 1324 # -name: POWER +name: Power type: parsed protocol: NECext address: 4B 14 00 00 command: 80 7F 00 00 # -name: MODE +name: Mode type: parsed protocol: NECext address: 4B 14 00 00 command: 20 DF 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NECext address: 4B 14 00 00 command: C0 3F 00 00 # -name: TIMER +name: Timer type: parsed protocol: NECext address: 4B 14 00 00 command: A0 5F 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9137 4430 630 1594 661 464 659 1625 630 1624 631 1625 630 1596 659 1596 660 1624 631 492 631 1624 632 1623 632 1593 662 1597 658 1624 631 1625 630 1595 660 491 632 1595 661 1595 660 1624 631 1624 631 1596 660 1624 631 1624 631 1593 663 435 689 491 632 434 690 491 632 491 632 463 661 490 634 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9107 4400 660 1622 633 464 659 1623 632 1596 659 1622 633 1622 633 1623 632 1622 633 493 630 1593 662 1595 660 1623 632 1593 662 1623 632 1596 659 1623 632 1622 633 420 703 1594 661 424 699 1592 663 1594 661 1595 660 1597 658 423 700 1623 632 489 634 1593 662 461 662 431 692 488 635 489 634 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9106 4428 632 1595 660 463 660 1595 660 1622 633 1593 662 1622 633 1622 633 1595 660 490 633 1595 660 1595 660 1592 663 1593 662 1623 632 1623 632 1594 661 1623 632 1595 660 1594 661 1596 659 489 634 1595 660 1595 660 1596 659 463 660 490 633 462 662 422 701 1595 660 464 659 490 633 428 695 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 9136 4401 659 1624 631 463 660 1624 631 1593 663 1623 632 1624 632 1596 660 1594 661 464 659 1597 658 1593 662 1623 632 1595 660 1623 632 1624 631 1594 662 489 634 1623 633 431 693 1594 662 1623 633 1594 662 1595 661 1593 663 1592 663 461 663 1623 632 463 660 434 689 463 660 463 661 426 698 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9142 4400 661 1593 662 491 632 1624 632 1598 657 1594 662 1594 662 1596 660 1596 660 490 634 1596 660 1596 660 1624 631 1594 662 1623 632 1594 662 1624 632 1624 632 491 632 1624 632 1595 661 1624 631 1624 632 1594 662 1624 631 491 633 1624 632 464 659 492 632 432 692 430 694 464 660 432 692 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9134 4428 632 1597 658 355 768 1624 631 1623 632 1623 632 1597 658 1623 632 1622 633 463 660 1595 660 1622 633 1596 659 1595 660 1622 633 1623 632 1596 659 1622 633 1623 632 436 687 1623 633 1622 633 1622 633 1622 633 1598 657 434 689 489 634 1622 633 466 657 489 634 490 633 490 633 440 684 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8980 4377 620 1599 620 489 620 488 621 488 621 488 622 488 621 488 621 488 621 488 621 1597 622 1598 621 1598 621 1597 622 1597 622 1597 622 1597 622 1597 621 1598 646 463 646 464 645 464 645 465 644 466 643 466 643 466 643 466 643 1575 643 1576 643 1576 643 1576 643 1576 643 1576 643 1576 643 1576 643 466 643 466 643 466 643 466 643 466 643 466 643 466 644 466 643 1576 643 1576 643 1576 643 1576 643 1576 643 1576 643 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9011 4375 620 1598 621 462 647 488 621 488 621 488 676 434 621 488 621 489 620 488 621 1598 621 1598 621 1598 621 1598 621 1597 622 1598 621 1597 622 1597 622 1598 621 488 621 489 644 1576 644 466 643 466 643 466 643 466 643 466 644 1576 643 1576 643 466 643 1576 643 1576 643 1576 643 1576 643 1576 643 466 644 466 643 1576 643 466 644 466 643 466 644 466 643 466 643 1575 644 1576 643 466 643 1575 643 1576 643 1576 643 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2262 692 881 585 883 583 903 564 903 1294 882 584 881 584 882 559 820 673 895 1300 882 611 881 584 882 584 882 584 882 585 881 584 881 584 882 585 880 1317 879 586 829 1371 827 640 825 51208 2245 690 772 1424 831 50893 2240 691 772 1429 771 50906 2244 690 773 1400 772 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2264 668 770 721 745 694 772 694 796 1401 826 639 771 694 771 693 772 694 771 1426 798 668 769 1429 795 670 795 1404 794 672 794 1405 767 1431 767 1430 794 672 794 1404 794 1404 794 1404 766 50878 2261 645 817 1405 794 50857 2238 668 795 1428 769 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2264 642 823 669 797 643 822 644 822 1376 822 642 799 668 797 669 823 645 820 1401 796 670 794 1379 792 700 793 1381 790 1407 793 674 791 700 793 1406 792 673 793 673 792 673 793 673 792 50785 2262 666 796 1401 797 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2323 611 796 669 800 664 802 692 773 1424 774 691 801 664 774 691 774 692 773 1423 800 668 822 667 798 1376 769 1427 771 696 769 696 770 1429 795 1404 794 672 794 1404 794 671 795 1404 794 51269 2214 691 769 1427 796 # # ON/SPEED -name: POWER +name: Power type: parsed protocol: NECext address: 00 FC 00 00 command: 84 7B 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1285 426 1258 427 414 1267 1248 436 1258 427 414 1267 406 1276 408 1248 435 1247 437 1271 413 1244 1282 7286 1279 432 1252 433 409 1273 1253 431 1253 432 410 1273 411 1271 413 1243 440 1241 442 1240 433 1275 1251 7292 1283 427 1257 428 413 1268 1258 427 1257 428 414 1268 416 1240 433 1249 434 1248 435 1246 438 1245 1281 7287 1278 406 1278 434 408 1274 1252 432 1252 433 409 1274 410 1246 438 1244 440 1243 440 1241 443 1240 1275 7294 1281 402 1282 430 412 1270 1256 428 1256 429 412 1243 441 1241 443 1240 433 1249 434 1247 436 1246 1280 7288 1277 433 1251 434 408 1248 1278 432 1251 433 409 1273 411 1245 439 1244 440 1242 442 1240 433 1249 1277 7292 1283 400 1304 406 435 1246 1248 436 1279 405 436 1246 406 1249 434 1247 436 1245 438 1244 440 1242 1284 7285 1280 430 1285 400 442 1241 1285 399 1285 400 441 1240 444 1212 440 1241 443 1240 433 1249 434 1273 1284 7259 1306 404 1280 405 436 1245 1281 403 1281 404 438 1244 440 1216 468 1214 438 1244 440 1242 442 1241 1305 7262 1303 408 1276 407 434 1249 1277 407 1276 407 435 1248 436 1220 464 1219 464 1217 466 1242 441 1214 1312 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 431 1252 431 410 1244 1281 430 1253 430 411 1270 413 1242 441 1240 433 1249 434 1247 1278 433 408 8129 1277 433 1250 433 408 1274 1251 432 1251 433 409 1273 410 1271 412 1269 414 1241 432 1250 1275 435 406 8133 1283 426 1257 427 414 1267 1248 436 1247 436 405 1276 407 1248 435 1247 436 1245 438 1244 1281 429 412 8126 1280 430 1253 430 411 1270 1255 429 1254 429 412 1269 414 1241 432 1276 407 1248 435 1247 1278 432 410 8129 1277 432 1251 433 408 1273 1252 431 1252 431 411 1272 411 1269 414 1241 442 1240 433 1275 1250 434 408 8130 1276 434 1249 434 407 1275 1250 433 1250 433 408 1274 409 1272 411 1244 439 1268 415 1240 1275 436 405 8133 1283 427 1256 427 414 1267 1248 436 1258 426 405 1277 406 1274 409 1273 410 1245 438 1244 1281 429 412 8125 1281 429 1254 429 412 1269 1256 428 1255 428 413 1268 415 1266 407 1248 435 1247 436 1245 1280 430 411 8127 1279 431 1252 431 411 1271 1254 430 1253 430 412 1270 413 1268 415 1240 433 1275 408 1247 1278 432 410 8128 1278 432 1251 432 410 1272 1253 431 1252 431 410 1271 412 1242 441 1267 406 1250 433 1248 1277 433 409 8129 1277 433 1250 433 409 1272 1253 431 1252 431 410 1271 412 1242 441 1241 432 1250 433 1248 1277 433 409 8129 1277 433 1250 434 408 1246 1279 432 1251 432 409 1245 438 1244 439 1242 441 1240 433 1249 1276 434 407 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2356 608 934 1216 825 1320 826 1348 793 646 824 673 792 667 792 663 792 720 793 692 793 687 818 657 817 652 817 649 816 1310 815 1306 815 102511 2320 668 819 1332 817 1328 817 1325 815 655 815 650 815 645 815 640 815 699 814 671 814 666 814 661 814 657 813 652 813 1337 788 1333 787 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 390 9025 2296 666 821 1329 821 1324 821 1319 821 647 822 642 822 666 793 661 793 1385 793 691 819 660 819 655 818 652 816 1314 815 644 815 1305 815 101869 2318 668 818 1331 817 1328 816 1323 816 654 815 649 815 645 814 640 814 1363 815 670 815 665 814 660 815 655 814 1316 814 645 814 1306 814 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2346 612 875 1275 931 1214 929 1211 875 594 875 588 876 582 822 633 821 691 848 1303 847 659 819 1321 817 652 816 1314 815 1310 814 640 814 101247 2320 667 819 1330 818 1327 816 1324 815 654 815 649 815 644 815 639 815 698 814 1335 815 665 814 1325 814 655 814 1315 815 1310 815 640 814 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2313 646 841 1308 841 1303 841 1298 841 626 843 621 842 614 819 634 820 1359 844 1333 817 1328 815 1324 814 1321 812 1317 812 647 812 1308 811 99132 2317 670 816 1333 815 1330 813 1326 813 657 812 652 812 647 812 642 812 1366 812 1338 811 1332 812 1328 812 1323 811 1317 813 647 812 1307 812 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 3533 1663 476 420 450 1234 508 421 449 394 477 420 450 420 474 387 459 421 475 396 558 385 432 386 484 386 485 386 434 1263 479 419 447 395 475 394 476 393 478 393 478 392 478 1264 477 393 478 1264 478 1266 500 387 483 395 475 1268 473 397 474 397 474 397 474 397 474 1268 473 397 474 397 474 397 474 397 474 1268 472 1270 472 398 473 398 473 1269 473 398 473 398 473 397 474 1268 473 1269 473 398 473 398 473 1269 472 398 473 1269 472 398 473 1269 472 398 473 1269 472 398 473 74625 3552 1673 473 397 472 1270 472 399 471 399 471 400 470 400 470 401 470 401 470 401 469 401 470 402 469 402 469 402 469 1272 471 400 470 400 470 401 469 402 468 427 444 427 444 1273 471 400 470 1272 470 1271 471 400 470 401 469 1273 470 401 469 427 443 428 442 428 417 1300 469 426 443 428 417 453 442 428 417 1325 443 1274 468 427 443 428 417 1325 443 427 417 454 416 454 416 1326 417 1325 442 427 417 453 417 1325 417 453 417 1325 418 453 416 1326 416 453 417 1326 416 454 416 -# TIMER UP -name: TIMER +# Timer UP +name: Timer type: parsed protocol: NEC address: 80 00 00 00 command: 07 00 00 00 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1367 345 1338 347 491 1170 1361 349 1334 350 488 1198 489 1198 488 1199 488 1199 487 1200 1334 352 486 7953 1333 353 1332 353 486 1200 1333 353 1332 353 486 1200 486 1201 486 1200 486 1200 487 1201 1332 353 486 7953 1332 353 1333 353 485 1201 1332 353 1332 353 485 1201 485 1201 485 1201 486 1200 486 1200 1333 353 486 7953 1333 353 1332 354 485 1201 1332 353 1332 353 485 1201 486 1201 485 1201 485 1201 486 1201 1332 354 484 7954 1332 353 1332 353 485 1201 1332 354 1331 354 485 1201 485 1201 486 1201 486 1201 486 1201 1333 354 484 7954 1332 354 1331 354 485 1201 1332 355 1331 354 484 1201 485 1201 486 1202 485 1201 486 1201 1331 355 484 7953 1332 354 1331 354 484 1201 1332 355 1330 355 483 1202 484 1201 486 1201 485 1202 484 1202 1331 355 484 7954 1331 354 1331 354 484 1202 1331 355 1330 354 484 1202 485 1201 485 1202 484 1202 485 1202 1330 355 484 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1367 335 1349 346 492 1166 1365 346 1338 347 491 1170 516 1172 514 1173 1359 349 489 1197 489 1198 488 7950 1334 352 1332 352 486 1200 1333 352 1333 352 486 1200 486 1200 486 1200 1333 352 486 1200 486 1200 487 7953 1332 352 1333 353 485 1200 1333 353 1332 353 485 1200 486 1200 486 1200 1333 353 485 1200 486 1200 487 7951 1333 353 1332 352 486 1200 1333 353 1332 353 486 1200 486 1200 486 1200 1333 353 486 1200 486 1200 486 7952 1333 352 1333 353 485 1200 1333 353 1332 353 486 1200 486 1200 486 1200 1333 353 485 1200 486 1200 486 7952 1332 353 1332 353 485 1200 1333 353 1331 353 485 1200 486 1201 485 1201 1332 353 485 1201 485 1201 486 7952 1331 353 1332 354 484 1201 1332 354 1331 354 484 1201 485 1202 484 1201 1332 354 484 1202 484 1202 485 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1337 374 1311 374 464 1194 1339 373 1340 345 493 1165 521 1165 1365 347 492 1167 519 1168 518 1168 518 7920 1363 347 1336 349 489 1197 1334 352 1333 353 485 1200 486 1200 1333 352 486 1200 486 1200 486 1200 486 # -name: POWER +name: Power type: parsed protocol: NECext address: BA F0 00 00 command: 03 FC 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NECext address: BA F0 00 00 command: 50 AF 00 00 # -name: SPEED- +name: Speed_dn type: parsed protocol: NECext address: BA F0 00 00 command: 41 BE 00 00 # -name: TIMER +name: Timer type: parsed protocol: NECext address: BA F0 00 00 command: 40 BF 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: BA F0 00 00 command: 53 AC 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9069 4477 591 1695 622 528 625 525 618 505 617 532 621 527 626 497 625 525 618 532 621 1661 615 1640 595 1688 599 1684 613 1643 592 1691 626 1656 620 1636 620 1663 624 526 617 505 628 523 620 529 624 525 618 504 618 531 622 527 616 1643 623 1662 625 1658 618 1637 598 1685 622 1659 627 1655 570 1685 622 528 625 523 620 502 620 529 624 524 619 503 588 561 623 526 617 1667 619 1639 627 1654 622 1660 616 1638 617 1664 622 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9014 4522 597 1687 610 512 590 559 594 555 619 503 599 550 593 556 597 551 613 509 593 1688 588 1692 615 1639 596 1684 592 1689 587 1666 590 1691 595 1685 591 1689 566 1689 597 551 592 557 638 485 596 553 590 558 595 527 595 554 589 559 594 1686 611 1643 592 1688 588 1692 646 1607 597 1684 592 1688 619 1634 591 558 595 553 590 532 590 558 595 553 590 559 615 506 596 553 590 1693 594 1685 571 1683 593 1686 590 1690 565 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 9066 4476 623 1662 625 525 618 504 587 561 623 526 617 531 622 501 621 528 625 524 619 1661 564 1692 625 1655 621 1660 565 1690 627 1654 622 1659 586 1668 618 1663 623 1657 619 1636 620 529 624 524 619 502 620 529 624 524 619 529 614 509 624 525 618 1663 613 1640 626 1655 621 1659 617 1637 619 1662 625 1656 620 1633 623 527 626 523 620 529 614 508 625 524 619 530 623 499 593 557 617 1663 623 1657 619 1635 621 1660 616 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9038 4530 589 1665 590 559 594 555 598 551 613 510 592 558 595 553 590 532 590 559 594 1686 590 1690 617 1637 598 1683 593 1687 620 1634 591 1691 595 1685 622 1632 593 557 596 1684 592 530 592 557 596 552 591 558 616 506 596 553 590 1690 596 526 596 1684 592 1688 588 1692 563 1690 596 1684 592 1687 620 503 589 1691 595 553 621 501 591 558 595 553 590 532 590 558 595 1689 597 551 623 1630 595 1686 590 1689 587 1666 589 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4609 4601 539 1515 545 1511 539 1518 542 1514 546 1510 540 1517 543 2559 541 1515 545 1511 539 2563 537 1519 541 2561 539 1516 544 1512 548 2554 546 1510 540 1515 4604 4605 545 1509 541 1515 545 1538 512 1518 542 1514 546 1511 539 2563 537 1519 541 1515 545 2557 543 1513 547 2555 545 1510 540 1516 544 2559 541 1514 546 13748 9234 2298 545 52033 9228 2304 539 52041 9230 2303 540 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4605 4603 547 1508 541 1515 545 1511 539 1518 542 1514 546 1511 539 2562 538 1518 542 1515 545 1511 538 2564 547 1509 541 1517 543 1513 547 2555 545 2556 544 1512 4607 4603 547 1508 542 1515 545 1511 539 1518 542 1514 546 1511 538 2564 546 1510 539 1517 543 1514 546 2557 543 1513 547 1510 540 1517 543 2559 541 2561 539 13755 9237 2297 546 52031 9229 2306 547 52033 9237 2297 546 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 4608 4604 546 1509 541 1516 544 1513 547 1509 540 1516 544 1513 547 2555 545 1512 537 2565 545 1511 539 1518 542 2561 539 1516 544 1513 547 1510 539 2563 537 1517 4612 4599 541 1514 546 1511 539 1518 542 1514 546 1511 539 1518 542 2561 539 1518 542 2561 539 1517 543 1514 546 2557 543 1513 547 1510 540 1516 544 2559 541 13755 9237 2298 545 52044 9237 2298 545 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 4606 4604 546 1509 541 1516 544 1512 548 1509 541 1516 544 1512 548 2554 546 1510 540 1517 543 2559 541 1515 545 2557 543 2558 542 1514 546 1511 539 1517 543 1512 4607 4601 539 1516 544 1513 547 1509 541 1516 544 1512 548 1508 542 2561 539 1516 544 1513 547 2555 545 1511 538 2589 522 2555 545 1511 539 1518 542 1515 545 13389 9233 2301 542 51673 9227 2306 547 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1273 401 1272 426 416 1232 1273 427 1247 426 405 1242 442 1231 442 1231 1274 426 405 1242 431 1242 431 7968 1274 400 1273 426 416 1232 1273 426 1247 426 405 1241 432 1241 432 1241 1275 425 406 1267 406 1240 433 7967 1275 398 1275 424 407 1240 1276 424 1249 424 407 1239 434 1238 435 1238 1278 422 409 1237 436 1237 436 7963 1279 394 1279 420 411 1262 1243 430 1243 430 412 1234 439 1234 439 1233 1272 428 414 1232 441 1232 441 7958 1273 426 1248 426 405 1241 1275 426 1248 425 406 1266 407 1240 433 1240 1276 424 407 1265 408 1238 435 7965 1277 422 1251 423 408 1238 1278 423 1250 423 408 1264 409 1238 435 1264 1251 422 409 1264 409 1237 436 7964 1278 422 1251 422 409 1264 1251 422 1251 422 409 1263 410 1262 411 1262 1254 420 411 1262 411 1235 438 7961 1270 429 1244 429 413 1260 1245 428 1245 427 415 1258 415 1231 432 1241 1274 425 406 1267 406 1240 433 7965 1277 423 1250 423 408 1265 1250 423 1250 423 408 1264 409 1237 436 1237 1278 421 410 1262 411 1262 411 7961 1270 429 1244 429 413 1260 1245 429 1244 429 413 1260 413 1233 440 1259 1246 427 415 1259 414 1258 415 7959 1272 427 1246 427 415 1259 1246 427 1246 427 415 1257 406 1267 406 1241 1274 425 406 1266 407 1266 407 7965 1277 422 1251 422 409 1264 1251 421 1252 421 410 1262 411 1261 412 1235 1270 429 413 1260 413 1233 440 7958 1273 426 1247 425 406 1267 1249 425 1248 424 407 1266 407 1265 408 1265 1250 423 408 1264 409 1263 410 7962 1280 420 1253 420 411 1261 1244 430 1243 429 413 1259 414 1232 441 1231 1274 427 415 1257 406 1240 433 7965 1277 423 1250 423 408 1264 1251 422 1251 422 409 1262 411 1235 438 1235 1280 420 411 1260 413 1232 441 7957 1274 426 1247 425 406 1266 1250 425 1248 424 407 1265 408 1238 435 1264 1251 423 408 1263 410 1236 437 # Osc -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1338 374 1311 374 464 1194 1339 374 1311 374 464 1194 492 1194 492 1194 520 1165 1368 346 492 1167 519 7918 1364 347 1337 348 490 1195 1336 351 1333 352 486 1200 486 1201 485 1201 486 1201 1332 353 485 1201 485 7952 1332 353 1332 353 485 1200 1333 353 1332 353 485 1201 485 1201 485 1201 485 1201 1332 354 485 1201 485 7954 1331 354 1331 354 485 1201 1332 354 1331 354 485 1201 485 1202 485 1202 485 1202 1331 354 485 1201 485 7954 1331 354 1331 354 484 1202 1331 355 1330 355 483 1202 484 1203 483 1203 484 1203 1330 355 484 1203 483 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 394 1280 420 411 1236 1269 430 1254 419 412 1235 438 1234 439 1233 440 1233 440 1233 1272 427 415 8311 1279 395 1278 420 411 1236 1269 430 1243 430 412 1234 439 1234 439 1233 440 1233 440 1233 1272 427 415 8312 1277 396 1277 422 409 1264 1252 421 1252 421 410 1236 437 1235 438 1233 440 1259 414 1259 1246 427 415 8312 1277 422 1251 423 408 1264 1251 423 1250 423 408 1238 435 1237 436 1237 436 1263 410 1237 1278 421 410 8315 1274 425 1248 425 406 1240 1276 424 1249 424 407 1265 408 1238 435 1264 409 1237 436 1237 1279 421 410 8318 1271 402 1271 428 414 1233 1272 427 1246 427 415 1231 432 1241 432 1240 433 1240 433 1240 1276 424 407 8319 1271 429 1245 428 414 1233 1272 428 1245 427 415 1231 442 1231 432 1240 433 1240 433 1239 1277 423 408 8318 1271 401 1272 427 415 1232 1273 427 1246 426 405 1267 406 1240 433 1239 434 1238 435 1238 1278 422 409 8317 1272 401 1272 426 405 1242 1274 426 1248 425 406 1240 433 1239 434 1238 435 1238 435 1238 1278 421 410 8317 1272 401 1272 426 405 1242 1274 425 1249 425 406 1240 434 1239 434 1238 435 1238 435 1238 1278 421 410 8316 1273 400 1273 426 405 1241 1275 425 1248 425 406 1239 434 1239 434 1238 435 1238 435 1238 1278 421 410 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1341 395 1311 395 455 1220 1341 395 1311 396 454 1248 456 1248 457 1248 456 1247 457 1247 457 1247 1338 7184 1335 399 1307 399 450 1254 1307 399 1307 400 449 1255 450 1255 450 1254 450 1254 450 1254 450 1254 1307 8332 1306 401 1306 400 449 1256 1306 400 1306 401 449 1255 450 1255 449 1255 449 1255 449 1255 449 1255 1306 7214 1306 400 1307 400 450 1255 1306 400 1306 400 450 1255 449 1255 449 1255 449 1255 449 1255 449 1256 1306 8333 1306 401 1307 401 449 1256 1307 402 1306 402 448 1256 449 1256 448 1256 448 1256 448 1256 448 1256 1307 7215 1305 401 1306 402 448 1256 1306 402 1305 402 448 1257 447 1257 447 1257 447 1256 448 1256 448 1257 1305 8333 1304 402 1305 402 448 1257 1304 402 1304 403 447 1257 447 1257 448 1257 447 1257 447 1257 447 1257 1304 7216 1304 403 1303 403 446 1257 1304 403 1304 403 446 1258 447 1258 446 1257 447 1257 447 1258 447 1257 1304 8334 1304 402 1305 403 446 1257 1304 403 1303 403 447 1258 446 1257 448 1258 446 1258 446 1258 446 1258 1303 7217 1303 404 1303 404 445 1259 1302 404 1302 428 421 1259 446 1283 421 1259 445 1283 421 1283 421 1284 1278 8361 1277 429 1278 429 420 1284 1278 429 1277 429 420 1284 420 1284 420 1284 420 1284 420 1284 419 1285 1277 7243 1277 429 1277 429 421 1284 1277 429 1277 429 420 1284 420 1284 420 1284 420 1284 420 1284 420 1284 1277 8361 1277 430 1276 430 420 1285 1276 430 1277 430 419 1285 419 1285 419 1285 420 1284 420 1285 420 1285 1276 7244 1276 431 1276 430 419 1286 1276 430 1276 431 418 1286 418 1286 418 1286 418 1286 418 1285 419 1285 1276 8363 1275 431 1276 431 418 1286 1275 431 1276 432 417 1286 418 1286 418 1286 418 1286 419 1286 418 1286 1275 7246 1275 432 1275 432 417 1288 1274 457 1249 457 392 1312 392 1312 392 1289 415 1312 392 1312 392 1313 1249 8390 1248 458 1249 458 391 1313 1249 458 1248 458 391 1313 391 1314 390 1313 391 1314 390 1314 390 1314 1248 7273 1247 459 1223 484 390 1315 1247 460 1222 510 339 1365 364 1315 365 1339 390 1315 388 1341 339 1340 1222 8415 1222 484 1222 510 339 1365 1197 510 1197 510 339 1365 340 1365 339 1365 339 1365 339 1365 339 1365 1197 7324 1196 511 1196 511 338 1366 1196 511 1195 511 338 1366 338 1367 337 1367 337 1367 337 1367 337 1367 1195 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1341 368 1338 392 457 1219 1370 364 1341 364 485 1190 540 1164 513 1190 513 1191 512 1194 1365 366 481 8031 1338 370 1336 371 477 1226 1335 371 1335 371 477 1226 477 1226 477 1226 477 1226 477 1226 1334 371 477 9153 1334 371 1334 371 477 1226 1334 371 1335 371 477 1227 476 1227 476 1227 476 1227 476 1227 1334 372 476 8036 1334 372 1333 372 476 1227 1333 372 1333 372 476 1227 476 1227 476 1227 476 1227 476 1227 1334 373 475 9154 1334 373 1333 373 475 1228 1332 373 1332 373 475 1229 475 1228 475 1229 474 1229 474 1229 1331 374 474 8038 1331 374 1332 374 474 1229 1331 374 1331 398 450 1253 450 1253 450 1253 450 1253 450 1253 1307 398 450 9179 1307 398 1307 398 450 1253 1307 399 1306 398 450 1254 449 1254 449 1253 450 1254 449 1254 1306 398 450 8063 1306 398 1307 399 449 1254 1306 399 1306 399 449 1254 449 1254 449 1254 449 1254 449 1254 1307 399 449 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1372 339 1369 363 486 1190 1374 363 1344 363 486 1190 515 1191 513 1191 513 1192 1370 365 483 1220 484 8036 1339 371 1337 371 478 1227 1337 371 1337 371 478 1227 478 1227 478 1227 478 1227 1336 371 478 1227 478 9159 1336 372 1336 371 478 1227 1336 371 1336 372 477 1227 478 1227 477 1227 477 1227 1336 372 477 1228 477 8041 1335 372 1335 372 477 1227 1336 372 1335 372 477 1228 477 1228 477 1228 477 1228 1335 373 476 1228 477 9160 1335 373 1334 373 476 1228 1335 373 1334 373 476 1229 475 1229 476 1229 475 1229 1334 374 475 1229 475 8042 1334 375 1331 398 451 1230 1333 398 1309 398 451 1254 450 1254 451 1253 451 1253 1308 398 450 1254 450 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1342 366 1370 339 511 1191 1373 364 1343 364 511 1165 540 1165 514 1192 1371 364 484 1219 485 1220 484 8036 1339 370 1337 371 478 1227 1336 371 1336 371 478 1227 478 1227 478 1227 1336 372 477 1227 478 1227 478 9162 1336 372 1335 372 477 1228 1335 372 1335 373 476 1228 477 1228 477 1228 1336 372 477 1228 477 1228 476 8044 1336 372 1335 373 476 1228 1335 398 1309 398 451 1254 451 1254 451 1255 1308 400 449 1255 450 1256 449 9188 1306 403 1304 428 421 1260 1303 428 1279 429 419 1284 421 1284 420 1284 1279 429 420 1285 420 1284 420 8099 1276 457 1250 457 391 1313 1225 483 1224 484 364 1338 366 1338 392 1313 1225 484 364 1339 366 1339 390 9244 1225 509 1198 510 338 1366 1197 510 1197 537 311 1367 338 1393 311 1394 1169 591 256 11618 1170 539 1168 565 282 1395 1169 565 1142 538 310 1341 365 1312 419 1259 1305 400 449 1254 450 1255 449 9186 1307 400 1306 400 448 1255 1307 399 1307 400 448 1255 449 1255 449 1255 1307 400 448 1255 449 1255 449 8068 1306 400 1306 400 448 1256 1306 400 1306 401 447 1256 448 1256 448 1256 1306 401 447 1256 448 1257 447 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 170 535 1281 413 1276 418 436 1259 1275 423 1276 444 410 1258 431 1264 435 1260 439 1256 433 1262 437 1258 1276 6529 173 475 1280 414 1275 419 435 1260 1274 450 1249 419 435 1259 430 1265 434 1261 438 1257 432 1263 436 1259 1275 7177 1280 414 1275 445 410 1260 1274 450 1249 445 410 1259 430 1266 433 1262 437 1258 431 1264 435 1260 1274 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 415 1274 447 407 1288 1256 442 1247 448 406 1288 411 1284 405 1291 408 1287 412 1283 1251 444 411 8009 1282 413 1276 445 409 1286 1248 450 1249 446 408 1286 403 1292 407 1262 437 1285 404 1291 1253 442 413 8007 1274 446 1253 442 402 1292 1252 447 1252 442 402 1292 407 1288 411 1284 405 1264 435 1286 1248 447 407 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1278 444 1255 439 405 1289 1255 444 1255 439 405 1290 409 1259 1275 447 407 1288 411 1257 432 1263 436 8009 1282 440 1249 446 408 1286 1248 451 1248 446 408 1286 413 1256 1278 444 410 1284 405 1264 435 1261 438 8008 1283 439 1250 444 410 1284 1250 450 1249 445 409 1284 405 1265 1279 442 412 1282 407 1262 437 1258 431 8015 1276 445 1254 440 404 1292 1252 446 1253 441 403 1292 407 1288 1256 439 405 1290 409 1286 403 1292 407 8012 1279 416 1273 448 406 1289 1255 443 1246 449 405 1289 410 1285 1249 446 408 1287 412 1283 406 1289 410 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1278 417 1282 439 405 1290 1254 444 1255 439 405 1289 410 1285 404 1292 1252 442 412 1283 406 1289 410 8010 1280 414 1275 446 408 1287 1247 451 1248 446 408 1286 413 1282 407 1263 1281 440 404 1291 408 1261 438 8007 1273 421 1278 443 411 1284 1249 449 1250 444 410 1258 431 1291 408 1288 1256 439 405 1289 410 1286 403 8017 1273 421 1278 443 411 1284 1249 449 1250 444 410 1285 404 1291 408 1262 1282 440 404 1264 435 1260 439 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1282 413 1276 445 409 1260 1274 450 1249 445 410 1259 430 1265 434 1261 438 1258 1276 445 409 1285 404 8017 1274 420 1279 442 412 1283 1251 448 1251 443 411 1283 406 1290 409 1260 439 1256 1278 443 411 1284 405 8015 1276 418 1281 440 404 1291 1253 446 1253 440 404 1291 408 1287 412 1283 406 1263 1281 440 404 1291 408 8011 1280 414 1275 446 408 1287 1247 452 1247 447 407 1261 438 1283 406 1289 410 1259 1275 447 407 1287 412 8006 1275 446 1253 441 403 1292 1252 447 1252 442 402 1292 407 1288 411 1284 405 1291 1253 442 402 1292 407 # -name: POWER +name: Power type: parsed protocol: NEC address: 30 00 00 00 command: 97 00 00 00 # -name: MODE +name: Mode type: parsed protocol: NEC address: 30 00 00 00 command: 87 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 30 00 00 00 command: 86 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 30 00 00 00 command: 9C 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 30 00 00 00 command: 95 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 45 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 00 00 00 00 command: 47 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 00 00 00 00 command: 19 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 00 00 00 00 command: 1C 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2229 716 749 747 728 715 750 720 756 714 751 719 757 1447 751 719 756 714 751 1453 755 742 723 747 729 742 754 716 749 721 754 715 729 741 724 1454 754 1450 758 1445 753 1451 757 714 751 50967 2228 717 748 1455 753 51028 2198 746 730 1449 749 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2225 719 756 741 724 720 755 715 750 720 755 716 749 1456 752 719 746 726 749 1456 731 741 755 1451 757 714 751 1455 753 718 757 1448 750 1456 752 720 755 715 750 721 754 1452 756 1449 759 51509 2201 743 732 1473 756 51069 2202 717 758 1448 750 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2234 712 752 743 732 713 751 720 755 716 749 722 753 1453 754 716 759 712 752 1453 754 718 757 1449 758 713 751 1455 752 1454 753 718 757 741 723 748 727 745 730 1449 758 739 725 1455 752 51252 2234 713 751 1454 753 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2229 714 750 747 727 717 757 713 751 719 755 715 749 1455 751 719 755 715 749 1455 751 1453 753 717 757 714 750 1454 752 718 756 714 750 746 728 742 722 722 752 1452 754 716 758 1445 751 50982 2229 716 727 1479 748 51048 2205 712 752 1450 756 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2258 688 781 718 751 694 775 696 784 687 782 690 779 1427 782 690 779 693 776 1431 778 721 748 724 756 716 753 719 750 722 747 725 744 727 773 1407 781 1426 783 1425 774 1433 776 696 773 51015 2224 748 721 1458 783 51084 2249 697 783 1425 784 51089 2253 694 775 1432 756 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2212 836 751 1591 749 825 752 817 750 1577 753 806 750 804 752 796 750 857 751 828 749 825 752 816 751 813 743 816 751 803 743 805 752 102392 2214 834 743 1599 751 823 744 825 752 1575 745 840 727 801 745 804 752 854 744 835 752 822 745 824 743 821 746 813 743 810 746 802 744 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2214 838 748 1596 751 824 751 819 746 1584 753 807 747 807 747 803 751 857 750 830 745 830 745 825 750 814 751 810 745 1574 752 798 746 101740 2213 838 748 1597 750 824 751 819 746 1583 754 806 748 807 747 802 752 856 751 830 745 829 746 824 751 814 751 809 745 1574 753 797 747 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2216 836 750 1594 754 821 754 816 749 1580 747 813 752 803 751 798 746 1626 753 827 748 1591 746 824 751 1578 749 811 754 1566 750 799 745 99411 2218 833 753 1591 746 829 746 823 752 1577 749 810 755 800 754 795 749 1623 745 835 751 1588 749 821 754 1574 752 807 747 1572 755 795 749 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2219 732 750 729 753 722 749 1384 755 1374 755 705 746 708 753 697 754 754 749 731 751 723 749 721 750 715 746 713 748 1370 749 701 749 99627 2216 735 747 732 750 725 747 1387 753 1376 753 706 755 700 751 698 753 755 748 732 750 725 747 722 749 716 745 714 747 1372 747 702 749 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 2215 735 746 730 751 722 749 1383 745 1381 747 711 749 704 746 702 748 1422 748 730 751 722 749 720 751 712 748 1373 745 1372 746 702 748 102284 2218 732 749 729 752 720 751 1380 748 1378 750 709 751 701 749 700 750 1420 750 728 753 719 752 717 754 709 752 1370 748 1369 749 699 751 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2221 729 752 725 746 727 754 1377 751 1375 753 706 755 699 751 697 753 753 749 729 752 1384 755 1377 751 713 747 711 749 1367 751 1361 746 101691 2216 734 747 731 750 723 748 1383 745 1381 747 711 749 705 745 703 747 759 754 725 746 1390 749 1383 756 708 752 706 754 1362 745 1366 752 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2220 831 751 1618 729 820 751 818 753 1575 751 835 726 829 721 802 748 885 728 851 720 854 728 815 756 809 752 807 754 1565 750 825 725 101743 2220 830 752 1618 729 819 752 844 727 1574 752 835 726 802 748 801 749 884 729 850 721 827 755 815 746 845 726 806 755 1590 725 798 752 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2218 857 725 1592 754 846 725 844 727 1574 752 834 727 827 723 826 724 883 720 1597 750 851 720 1586 750 840 721 1577 749 831 730 1557 748 99247 2221 854 728 1590 746 854 728 841 720 1583 753 832 729 825 725 824 726 881 722 1596 751 849 722 1585 751 839 722 1576 750 831 719 1568 747 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2217 832 750 1594 753 821 750 819 752 1576 750 809 804 750 800 748 750 1622 756 1587 749 1589 747 1586 750 1578 748 1575 751 1568 747 802 748 101181 2218 831 751 1592 755 819 752 817 754 1574 752 808 753 801 749 800 751 1620 748 1596 751 1587 749 1584 752 1576 750 1574 752 1566 749 800 803 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2274 662 756 711 749 718 752 715 797 669 801 1399 749 718 783 684 797 670 800 1400 748 720 750 716 754 713 747 720 750 718 752 714 777 718 752 1448 752 714 756 711 749 1450 750 1423 777 51569 2192 718 752 1447 753 50954 2223 712 748 1423 798 50911 2245 661 746 1451 749 50917 2218 715 755 1415 754 50965 2191 716 754 1445 755 50923 2223 710 750 1421 800 50893 2190 717 753 1445 776 50902 2242 664 796 1402 777 50907 2217 717 753 1418 803 50880 2223 710 750 1421 800 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 2225 712 747 719 751 716 754 713 757 711 748 1451 748 718 752 715 754 712 747 1451 748 718 752 716 754 1445 754 1444 724 1449 750 716 754 713 746 1453 746 720 749 1450 749 1451 727 1446 753 50693 2219 717 752 1445 754 50927 2194 714 756 1442 747 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2216 733 744 734 754 1382 751 1381 752 712 744 714 753 700 746 702 754 753 745 733 755 719 748 720 747 717 750 709 747 706 750 1361 751 99476 2211 738 749 729 748 1389 754 1377 745 718 748 710 746 707 749 699 747 760 748 730 747 726 751 718 748 715 752 706 750 703 753 1359 753 49283 2217 670 745 1350 751 50661 2212 676 749 1345 746 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 2213 737 751 727 750 1387 746 1385 748 716 751 707 749 704 752 696 750 1420 754 724 753 720 747 721 746 718 749 1373 749 1367 745 703 753 102141 2215 735 753 726 751 1385 747 1384 748 715 752 706 750 704 752 695 751 1419 755 723 754 720 747 721 746 718 749 1399 723 1367 755 693 753 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 33 2223 753 725 720 748 750 728 743 725 746 722 1458 750 749 750 722 726 747 721 1460 748 724 755 744 724 721 747 724 754 744 724 747 752 720 748 1458 750 722 756 715 753 718 750 1456 752 51488 2221 727 721 1460 748 51156 2203 744 724 1456 752 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 33 2225 718 750 719 749 721 747 722 746 723 745 1458 750 720 748 722 726 744 724 1452 756 741 727 742 726 1451 746 1457 750 1454 754 716 752 717 720 1483 725 745 723 1454 754 1450 747 1456 752 50811 2199 744 745 1433 754 51049 2229 715 743 1435 752 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2221 721 727 1450 779 1452 756 714 744 1487 721 723 756 714 754 715 774 774 726 1505 724 772 748 1482 726 770 751 1454 754 1477 721 1484 745 101867 2197 745 723 1453 776 1455 722 748 720 1483 756 713 755 714 744 725 775 774 726 1478 751 771 729 1475 754 769 720 1483 756 1448 750 1481 727 50476 2201 714 755 1448 781 50602 2221 720 748 1454 775 50604 2250 743 694 1456 773 50628 2226 715 743 1433 775 50652 2191 748 720 1430 778 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2193 750 729 1421 777 1454 754 715 753 1478 751 719 728 715 753 716 773 1510 729 1501 728 1477 752 1505 755 1475 754 1477 721 749 751 772 696 102110 2246 748 720 1455 774 1430 747 723 746 1484 724 745 723 720 748 721 779 1477 752 1478 751 1480 749 1508 752 1478 751 1479 729 741 748 748 721 50743 2195 747 721 1454 775 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 2247 750 729 1447 782 1450 748 722 726 1506 723 720 748 722 757 713 776 772 728 769 751 1505 755 1476 753 1452 756 740 749 747 753 1452 756 101517 2220 749 719 1457 772 1433 754 715 753 1478 719 750 729 715 753 716 773 776 724 772 748 1508 752 1479 750 1481 727 769 731 739 750 1454 754 50114 2228 742 726 1450 779 50645 2197 746 722 1454 775 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1275 434 1253 430 408 1275 1251 431 1257 427 411 1272 415 1241 436 1248 439 1244 433 1250 437 1247 1279 7142 1276 433 1255 428 410 1247 1279 430 1247 435 414 1269 408 1249 438 1272 415 1241 436 1248 439 1244 1282 8244 1274 434 1253 429 409 1274 1252 430 1247 435 414 1242 435 1275 412 1270 407 1277 411 1246 441 1242 1274 7146 1282 426 1251 431 407 1276 1250 432 1255 426 412 1271 406 1276 411 1272 415 1242 435 1248 439 1244 1282 8243 1275 433 1255 428 410 1272 1254 429 1248 434 415 1267 410 1273 414 1269 408 1275 412 1245 432 1251 1275 7144 1273 435 1252 430 408 1274 1252 430 1247 436 413 1269 408 1249 438 1245 442 1267 410 1274 413 1270 1256 8241 1277 431 1257 425 413 1270 1256 425 1252 430 408 1275 412 1270 407 1276 411 1246 441 1267 410 1247 1279 7140 1277 431 1256 426 412 1270 1256 425 1252 430 408 1274 413 1270 407 1276 411 1245 442 1267 410 1247 1279 8245 1273 435 1252 430 408 1274 1252 430 1247 435 414 1269 408 1275 412 1270 407 1277 410 1246 441 1268 1248 7145 1273 435 1252 430 408 1274 1252 430 1247 435 414 1242 435 1248 439 1244 433 1250 437 1246 441 1242 1274 8249 1279 403 1274 434 415 1242 1274 434 1253 429 409 1247 440 1242 435 1248 439 1244 433 1250 437 1246 1280 7138 1279 403 1274 434 415 1268 1247 434 1253 429 409 1246 441 1268 409 1248 439 1244 433 1250 437 1245 1281 8241 1277 405 1283 426 412 1270 1256 426 1251 430 408 1274 413 1270 407 1276 411 1271 416 1267 410 1246 1280 7138 1279 429 1248 434 415 1268 1247 434 1274 407 442 1240 416 1267 410 1247 440 1243 434 1249 438 1271 1255 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1279 430 1247 436 413 1270 1256 427 1250 432 406 1277 410 1273 414 1269 408 1275 1251 432 406 1277 410 7983 1284 425 1252 430 408 1275 1251 431 1256 426 412 1270 407 1250 437 1272 415 1242 1274 435 414 1270 407 9092 1275 433 1254 428 410 1273 1253 428 1249 434 415 1268 409 1274 413 1269 408 1276 1250 432 406 1277 410 7984 1283 425 1252 431 407 1275 1251 431 1256 426 412 1270 407 1276 411 1272 415 1241 1275 435 414 1269 408 9090 1277 431 1256 426 412 1270 1256 426 1251 431 407 1275 412 1270 407 1276 411 1272 1254 428 410 1273 414 7978 1278 430 1247 435 414 1269 1247 435 1252 430 408 1274 413 1243 434 1275 412 1271 1255 427 411 1272 415 9082 1275 434 1253 428 410 1273 1253 428 1249 433 405 1277 410 1272 415 1268 409 1274 1252 430 408 1275 412 7980 1276 432 1255 427 411 1271 1255 427 1250 432 406 1276 411 1271 416 1267 410 1247 1279 430 408 1275 412 9085 1282 426 1251 431 407 1276 1250 432 1255 426 412 1270 407 1276 411 1272 415 1268 1247 435 414 1269 408 7985 1282 427 1250 432 406 1277 1249 433 1254 428 410 1272 415 1267 410 1274 413 1269 1257 426 412 1271 406 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9204 4469 604 562 604 562 604 562 604 563 603 564 602 565 601 567 599 568 598 1642 598 1643 607 1634 606 1634 606 1634 606 1635 605 1636 604 1637 603 1638 602 565 601 1641 599 568 598 569 607 560 606 1635 605 588 578 562 604 1637 603 563 603 1638 602 1639 601 1641 599 594 572 1643 607 39280 9217 2212 601 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9225 4468 605 563 603 564 602 565 601 566 600 568 598 569 597 570 606 561 605 1636 604 1638 602 1640 600 1641 599 1643 607 1634 606 1636 603 1637 603 1639 601 1640 600 1641 599 595 571 568 598 569 597 1645 605 588 578 562 604 563 603 564 602 1639 601 1641 599 1643 597 596 580 1635 605 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 9214 4475 598 568 598 597 579 560 606 588 578 589 577 563 603 590 576 564 602 1666 574 1667 573 1641 599 1669 571 1643 597 1644 606 1635 605 1663 577 563 603 564 602 591 575 592 574 592 574 593 573 1668 572 594 572 1669 571 1669 571 1670 570 1644 606 1635 605 1636 604 590 576 1637 603 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9275 4475 608 560 606 563 603 565 601 568 598 570 606 563 603 565 601 567 599 1645 605 1638 602 1642 598 1645 605 1639 601 1642 598 1645 605 1637 603 1641 599 569 607 561 605 1639 601 1642 608 560 606 563 603 565 601 568 598 1644 606 1637 603 565 601 567 599 1644 606 1636 604 1639 601 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1279 428 1246 434 413 1265 1246 434 1250 430 407 1271 413 1240 434 1245 439 1240 434 1245 439 1240 1271 7282 1276 430 1244 436 411 1267 1255 426 1248 432 405 1248 437 1243 431 1248 436 1243 431 1248 436 1243 1279 7276 1272 434 1250 430 407 1271 1251 430 1244 436 411 1267 407 1247 437 1241 433 1246 438 1241 433 1246 1276 7279 1279 427 1247 433 404 1248 1274 433 1251 429 408 1271 413 1239 435 1245 440 1239 435 1244 430 1249 1273 7282 1276 430 1244 436 411 1267 1244 436 1248 432 405 1273 411 1242 432 1247 437 1241 433 1247 437 1241 1281 7274 1274 432 1252 428 409 1270 1252 428 1246 434 413 1266 408 1244 441 1239 435 1244 440 1239 435 1244 1278 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1275 405 1279 401 436 1243 1279 401 1273 407 440 1238 436 1244 1278 429 408 1244 440 1239 435 1244 440 8113 1272 434 1250 430 407 1246 1276 430 1254 426 411 1242 432 1247 1275 432 405 1247 437 1242 432 1247 437 8115 1280 426 1248 432 405 1248 1274 433 1251 428 409 1244 440 1239 1272 434 413 1239 435 1245 439 1239 435 8118 1277 429 1245 435 412 1240 1271 436 1248 431 406 1247 437 1242 1280 427 410 1242 432 1247 437 1242 432 8121 1274 406 1278 428 409 1244 1278 402 1272 408 439 1240 434 1245 1277 404 433 1246 438 1240 434 1245 439 8114 1281 399 1275 405 432 1247 1275 406 1278 401 436 1244 430 1249 1273 407 440 1240 434 1245 439 1239 435 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1248 412 1274 438 405 1284 1245 445 1251 435 408 1281 405 1282 404 1285 411 1251 435 1253 1276 437 406 8011 1242 445 1251 435 408 1255 1274 442 1244 443 410 1278 408 1280 406 1282 435 1254 411 1277 1242 445 408 8011 1242 443 1243 444 409 1279 1250 440 1246 441 412 1277 409 1279 407 1281 405 1282 404 1286 1243 443 410 8008 1245 442 1244 443 410 1278 1251 440 1246 441 402 1286 410 1278 408 1280 406 1256 430 1284 1276 411 411 8006 1247 439 1247 439 404 1285 1244 446 1250 437 406 1282 404 1283 403 1285 411 1278 408 1254 1275 438 405 8013 1251 436 1250 410 433 1282 1247 443 1243 443 410 1279 407 1281 405 1282 404 1258 438 1276 1243 444 409 7981 1272 414 1272 441 412 1250 1269 448 1248 438 405 1257 429 1259 437 1277 429 1232 433 1281 1248 412 431 7986 1267 446 1250 436 407 1255 1274 443 1243 443 410 1253 433 1280 406 1282 404 1258 428 1287 1273 387 435 7981 1272 414 1272 415 438 1276 1243 447 1249 411 432 1282 435 1228 489 1198 436 1278 408 1280 1249 411 432 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1281 410 1289 429 415 1276 1257 435 1264 428 416 1248 440 1250 438 1253 435 1282 1261 404 440 1277 411 8127 1288 404 1284 434 410 1281 1262 403 1285 432 412 1280 408 1256 443 1249 439 1278 1265 401 443 1275 413 8125 1289 429 1260 432 412 1253 1291 401 1287 431 413 1251 437 1253 446 1246 442 1249 1284 435 409 1256 443 8122 1282 437 1262 429 415 1277 1256 409 1290 428 416 1249 439 1251 437 1254 445 1247 1286 433 411 1254 445 8120 1283 409 1290 428 416 1275 1258 434 1254 437 418 1274 414 1249 439 1252 436 1281 1262 404 440 1251 437 8128 1286 432 1256 436 408 1257 1286 405 1283 435 409 1282 417 1247 441 1250 438 1253 1290 428 416 1249 439 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1286 406 1282 438 416 1275 1257 435 1263 430 1258 434 410 1282 416 1276 412 1254 444 1248 1284 436 1262 7278 1288 403 1285 435 408 1257 1285 433 1255 438 1260 431 413 1279 409 1283 415 1250 438 1254 1288 405 1283 7285 1281 411 1287 432 412 1253 1289 430 1258 435 1263 429 415 1250 438 1254 444 1248 440 1252 1290 429 1259 7283 1283 408 1290 428 416 1249 1283 436 1262 431 1257 435 408 1256 442 1250 438 1255 443 1248 1284 436 1262 7278 1288 430 1258 435 408 1256 1286 433 1255 437 1261 431 413 1252 436 1282 416 1249 439 1254 1288 404 1284 7282 1284 408 1290 428 416 1249 1283 436 1262 430 1258 434 410 1255 443 1249 439 1253 445 1247 1285 408 1290 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1276 403 1271 435 412 1241 1270 409 1276 431 1254 427 410 1242 1280 427 1247 433 404 1249 1273 407 430 8123 1273 433 1251 429 408 1245 1277 429 1245 435 1250 430 407 1272 1250 430 1255 426 411 1268 1254 426 411 8117 1279 401 1273 433 404 1249 1273 433 1251 429 1245 435 412 1240 1271 435 1249 431 406 1246 1276 431 406 8122 1274 406 1278 427 410 1270 1252 428 1246 434 1251 429 408 1271 1251 403 1271 436 411 1267 1244 436 411 8116 1279 427 1247 433 404 1275 1247 433 1251 429 1245 434 413 1266 1245 435 1250 430 407 1272 1250 431 406 8121 1274 431 1254 427 410 1269 1253 427 1247 433 1251 429 408 1271 1251 429 1245 434 413 1266 1245 435 412 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 457 1229 426 468 1236 1282 456 1230 427 468 1236 470 1235 471 1235 471 1235 471 1235 492 1240 1289 7171 1290 422 1284 399 464 1238 1291 422 1284 399 464 1239 467 1238 468 1238 468 1238 489 1217 500 1233 1285 7176 1285 426 1280 403 471 1232 1286 426 1281 403 471 1232 464 1242 496 1210 496 1237 469 1236 470 1236 1282 7206 1286 399 1287 422 441 1262 1287 398 1288 449 435 1215 491 1241 465 1240 466 1240 466 1240 466 1240 1289 7199 1283 429 1257 426 469 1235 1283 428 1258 426 469 1234 473 1234 472 1234 472 1233 474 1233 463 1243 1306 7182 1289 448 1258 398 465 1238 1291 448 1258 425 438 1239 467 1238 468 1238 468 1237 490 1216 490 1242 1287 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1289 448 1227 454 441 1238 1280 457 1228 454 441 1238 468 1239 1289 448 436 1215 491 1242 475 1233 473 8012 1281 457 1249 406 468 1237 1281 457 1260 396 467 1238 468 1239 1290 448 436 1242 475 1233 473 1234 472 8013 1291 421 1285 397 466 1238 1291 421 1285 398 465 1239 467 1240 1288 423 472 1233 473 1233 473 1234 472 8014 1289 449 1257 398 465 1239 1289 422 1284 398 465 1239 467 1240 1309 403 471 1233 473 1234 472 1235 471 8015 1309 402 1283 426 437 1241 1308 403 1283 427 436 1241 496 1237 1281 404 470 1235 471 1235 471 1236 491 8021 1282 402 1284 452 443 1235 1283 402 1284 452 443 1209 497 1236 1282 402 472 1233 463 1243 495 1212 494 8019 1284 427 1258 450 445 1233 1285 426 1259 450 444 1233 473 1233 1285 426 437 1240 497 1209 497 1236 470 8016 1288 450 1225 431 464 1241 1288 451 1255 402 472 1232 474 1232 1286 452 443 1235 523 1183 471 1235 471 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1286 424 1251 430 465 1241 1287 423 1252 457 437 1241 465 1242 464 1243 474 1234 472 1235 1314 423 440 8017 1286 451 1255 401 462 1242 1286 452 1254 402 472 1232 474 1233 473 1234 472 1234 493 1241 1287 424 439 8014 1289 422 1284 426 437 1241 1287 451 1255 403 471 1234 472 1234 472 1235 492 1215 491 1242 1286 399 464 8018 1285 426 1280 403 471 1234 1284 454 1252 404 470 1235 471 1236 491 1215 491 1243 526 1181 1285 427 436 8019 1315 423 1262 395 468 1236 1313 400 1286 424 439 1238 489 1218 499 1235 471 1236 470 1236 1282 430 464 8019 1284 401 1284 426 468 1236 1282 404 1281 456 438 1240 466 1240 466 1241 465 1241 465 1242 1286 426 468 8015 1288 424 1261 448 436 1242 1286 426 1259 451 444 1234 472 1234 472 1235 471 1235 471 1236 1282 456 438 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9090 4295 561 1708 570 561 563 569 565 567 567 565 569 563 561 570 564 568 566 565 569 1701 567 1702 566 1703 565 1705 563 1706 562 1707 561 1708 570 1699 569 1700 568 564 570 562 562 570 564 567 567 565 569 1700 568 563 591 563 561 1708 571 1699 569 1700 568 1702 566 1703 565 565 569 40667 9086 2139 562 97339 9092 2132 569 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9092 4292 563 1732 536 569 565 567 567 591 543 589 534 597 537 595 539 566 568 564 570 1699 569 1700 568 1702 566 1703 565 1705 563 1707 561 1708 570 1700 568 1701 567 591 543 1700 568 564 570 588 535 570 564 1732 556 571 563 568 566 1703 565 567 567 1702 566 1703 565 1705 563 567 567 40657 9086 2135 566 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9091 4292 564 1706 562 569 565 567 567 565 569 562 561 570 564 568 566 565 569 562 561 1708 570 1698 570 1700 568 1728 540 1703 565 1705 563 1706 562 1708 570 1699 569 1700 568 563 571 561 562 569 565 566 568 1701 587 566 568 563 571 561 562 1706 562 1707 561 1708 570 1699 569 562 561 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9000 4466 564 1681 564 566 572 559 569 561 567 564 564 567 571 558 570 560 568 563 565 1678 567 1679 566 1681 564 1682 564 1679 566 1678 567 1686 570 1676 569 1674 571 559 569 563 565 1679 566 564 564 566 572 550 567 563 565 565 563 1679 566 1677 568 563 565 1678 567 1676 569 1681 564 1680 565 1680 565 565 563 569 569 1674 571 560 567 563 565 555 573 558 570 559 569 1674 571 1670 565 564 564 1678 567 1676 569 1675 570 12978 9003 2207 566 96147 9000 2203 570 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9005 4459 570 1701 544 560 568 563 565 566 572 559 569 563 565 566 572 559 569 561 567 1678 567 1676 569 1675 570 1673 572 1671 564 1680 565 1685 571 1671 564 1677 568 561 567 562 566 564 564 565 563 565 563 557 571 557 571 557 571 1670 565 1678 567 1674 571 1668 567 1671 564 1686 570 1670 565 1675 570 559 569 560 568 561 567 562 566 563 565 553 564 563 565 564 564 1677 569 1673 573 1671 564 1678 567 1674 571 1671 564 13005 8998 2203 570 96194 8995 2204 569 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9004 4451 568 1683 573 558 570 561 567 565 563 568 570 560 568 562 566 564 564 566 572 1680 565 1688 568 1685 571 1685 571 1684 572 1683 573 1674 571 1681 564 567 571 1679 566 1686 570 561 566 565 563 567 571 551 566 563 565 1690 566 565 563 569 569 1684 572 1682 563 1690 566 1681 564 1689 567 564 564 1689 567 1687 569 563 565 566 572 559 569 551 566 563 565 1684 572 558 570 560 567 1682 563 1687 569 1683 562 1688 568 12989 8992 2208 565 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 9005 4457 572 1673 572 559 569 561 567 563 565 566 562 567 571 558 570 560 568 562 566 1676 569 1673 572 1698 537 1708 537 1704 541 1703 542 1708 537 567 571 1669 566 1701 544 558 570 560 568 561 567 564 564 557 571 1671 564 565 563 566 572 1670 565 1703 542 1673 562 1678 567 1683 562 566 562 1677 568 1701 544 559 569 561 567 563 565 565 563 557 571 1668 567 563 565 563 565 1676 569 1699 546 1669 566 1678 567 1676 569 # -name: POWER +name: Power type: parsed protocol: NEC address: 30 00 00 00 command: 8C 00 00 00 # -name: SPEED- +name: Speed_dn type: parsed protocol: NEC address: 30 00 00 00 command: 83 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 30 00 00 00 command: 85 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8958 4439 570 1663 563 561 562 563 560 564 569 556 567 557 566 558 565 559 564 560 563 1669 567 1663 563 1670 566 1665 561 1670 566 1666 560 1680 567 1665 561 1670 566 558 565 560 563 1669 567 557 566 559 564 552 561 563 560 565 568 1663 563 1668 568 556 567 1665 561 1670 566 1674 562 1668 568 1663 563 561 562 562 561 1670 566 558 565 559 564 552 561 563 560 564 569 1661 565 1667 569 555 568 1664 562 1668 568 1663 563 12896 8966 2197 565 95701 8962 2200 562 95719 8975 2194 568 95705 8970 2195 567 95693 8970 2196 566 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 8965 4443 566 1668 568 557 566 559 564 562 561 564 569 583 540 559 564 561 562 563 560 1673 563 1671 565 1669 567 1666 560 1673 563 1670 566 1676 560 1673 563 1670 566 558 565 561 562 564 569 556 567 559 564 553 560 565 568 558 565 1668 568 1666 570 1663 563 1670 566 1667 569 1671 565 1668 568 1665 561 564 569 557 566 559 564 562 561 564 569 547 566 560 563 562 561 1672 564 1669 567 1666 570 1664 562 1671 565 1668 568 12942 8972 2198 564 95779 8964 2201 561 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 8970 4439 570 1665 561 564 569 556 567 558 565 561 562 563 560 566 567 557 566 559 564 1669 567 1667 569 1665 561 1672 564 1670 566 1668 569 1674 562 563 560 1673 563 1671 565 561 562 564 569 556 567 559 564 553 560 1673 563 563 560 566 567 1667 569 1664 562 1672 564 1669 567 1676 560 566 567 1667 569 1664 562 563 570 555 568 558 565 560 563 553 560 1674 562 563 560 565 569 1667 570 1664 562 1671 565 1667 569 1663 563 12935 8969 2204 568 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 8963 4430 569 1673 563 561 562 562 561 564 570 555 568 557 566 559 564 561 562 563 560 1680 567 1674 562 1680 567 1675 561 1681 566 1676 561 1671 565 1675 562 563 560 1682 565 1678 569 557 566 559 564 562 561 555 568 557 566 1675 562 564 569 555 568 1674 563 1678 569 1673 564 1670 566 1675 561 563 570 1672 564 1677 570 555 568 558 565 560 563 552 561 564 559 1682 565 560 563 563 560 1681 566 1675 561 1681 566 1676 561 12950 8975 2195 567 95870 8966 2201 561 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 8973 4429 570 1673 563 562 561 565 568 557 566 559 564 561 562 564 569 557 566 559 564 1679 568 1674 562 1680 567 1676 560 1682 565 1676 571 1663 563 1679 568 558 565 1677 570 1673 563 562 561 565 568 557 566 1667 559 565 568 1673 563 563 560 565 568 1674 562 1679 568 1675 561 556 567 1675 561 564 569 1672 564 1677 570 556 567 559 564 561 562 1670 566 559 564 1676 571 555 568 557 566 1675 562 1680 567 1675 561 564 569 12939 8975 2197 565 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 8972 4427 561 1681 566 560 563 562 561 565 568 557 566 559 564 561 562 563 560 565 568 1673 563 1676 571 1671 565 1676 571 1672 564 1677 570 1664 562 1679 568 1674 562 562 561 1680 567 558 565 560 563 562 561 555 568 556 567 558 565 1676 560 564 569 1670 566 1675 561 1680 567 1665 561 1680 567 1675 561 564 569 1673 563 562 561 564 569 556 567 548 565 561 562 562 561 1680 567 558 565 1677 570 1672 564 1678 569 1673 563 12942 8971 2195 567 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9024 4477 566 1725 541 537 575 530 572 534 568 537 565 540 572 533 569 537 565 540 572 1690 566 1697 569 1720 546 1690 566 1697 569 1694 572 1691 565 1698 568 1694 572 533 569 537 565 540 572 533 569 536 566 540 572 532 570 536 566 1696 570 1692 574 1715 541 1696 570 1693 573 1689 567 1696 570 1693 573 532 570 536 566 539 573 532 570 535 567 538 574 531 571 534 568 1695 571 1691 565 1725 541 1695 571 1692 574 1688 568 11738 9017 2223 574 95995 9023 2216 570 95998 9020 2219 567 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9025 4477 576 1687 569 564 548 531 571 534 568 537 565 540 572 533 569 536 566 539 573 1689 567 1696 570 1693 573 1689 567 1696 570 1693 573 1690 566 1697 569 1694 572 560 542 1694 572 560 542 537 565 540 572 533 569 536 566 539 573 1689 567 565 547 1689 567 1696 570 1692 574 1689 567 1696 570 1693 573 559 543 1693 573 559 543 536 566 539 573 532 570 535 567 538 574 1688 568 564 548 1688 568 1695 572 1691 575 1688 568 11738 9016 2223 574 95995 9022 2216 570 96000 9019 2219 630 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9022 4480 573 1691 565 540 572 533 569 537 565 540 572 533 569 536 566 540 572 532 570 1693 573 1690 566 1697 569 1694 572 1717 539 1724 542 1721 545 1718 548 1715 541 1722 544 535 567 538 574 531 571 535 567 538 574 531 571 534 568 538 564 1698 568 1695 571 1692 574 1689 567 1722 544 1719 547 1716 540 1723 543 536 566 540 572 533 569 536 566 539 573 532 570 536 566 539 573 1689 567 1696 570 1693 573 1690 566 1724 542 11737 9015 2224 572 95995 9025 2215 571 95997 9020 2219 567 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9021 4481 572 1692 574 531 571 535 567 538 574 531 571 534 568 538 564 541 571 534 568 1694 572 1691 575 1688 568 1722 544 1719 547 1690 566 1697 569 1694 572 1691 565 540 572 533 569 1694 572 533 569 537 565 540 572 533 569 537 565 1698 568 1694 572 533 569 1695 571 1692 574 1715 541 1722 544 1693 573 531 571 535 567 1696 570 535 567 539 573 532 570 535 567 538 574 1689 567 1696 570 535 567 1696 570 1693 573 1716 540 11739 9024 2216 570 95999 9020 2219 567 96001 9020 2220 566 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 92 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 80 00 00 00 command: 89 00 00 00 # -name: SPEED- +name: Speed_dn type: parsed protocol: NEC address: 80 00 00 00 command: 9F 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 80 00 00 00 command: 87 00 00 00 # -name: MODE +name: Mode type: parsed protocol: NEC address: 80 00 00 00 command: 81 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1286 402 1289 426 414 1241 1280 408 1283 431 409 1245 435 1246 434 1247 433 1249 442 1239 441 1240 1281 7121 1281 404 1276 436 414 1239 1282 429 1251 433 407 1246 434 1246 434 1247 433 1247 433 1247 433 1247 1284 8216 1275 408 1283 428 412 1267 1253 430 1250 432 408 1245 435 1244 436 1244 436 1244 436 1244 436 1243 1277 7120 1282 401 1279 403 437 1243 1277 404 1276 407 433 1247 433 1246 434 1246 434 1246 434 1246 434 1245 1275 8224 1277 405 1275 407 433 1247 1273 409 1282 400 440 1240 440 1239 441 1239 441 1239 441 1238 442 1238 1282 7115 1276 405 1275 407 433 1247 1273 409 1281 400 440 1240 440 1239 441 1239 441 1239 441 1238 432 1248 1283 8216 1275 407 1283 399 441 1238 1282 400 1280 402 438 1241 439 1241 439 1240 440 1239 441 1239 441 1238 1282 7114 1277 405 1275 406 434 1246 1274 407 1273 408 432 1248 432 1247 433 1247 1246 434 1245 435 1245 1275 8223 1279 403 1277 404 436 1244 1276 406 1274 407 433 1247 433 1246 434 1245 435 1245 435 1244 436 1244 1276 7120 1282 400 1280 401 439 1241 1279 402 1278 404 436 1244 436 1243 437 1243 437 1242 438 1241 439 1241 1279 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1286 401 1279 434 406 1249 1282 404 1276 436 414 1240 440 1241 1280 432 408 1247 433 1248 432 1248 443 7955 1277 408 1283 430 410 1244 1276 408 1283 429 411 1243 437 1243 1278 408 432 1248 432 1249 441 1265 415 9057 1286 400 1280 431 409 1271 1250 435 1256 429 411 1243 437 1243 1278 433 407 1248 432 1248 432 1248 432 7966 1277 407 1284 427 413 1241 1280 431 1249 435 405 1249 442 1239 1282 402 438 1243 437 1243 437 1243 437 9062 1280 404 1276 435 405 1248 1283 401 1279 432 408 1245 435 1246 1275 436 414 1239 441 1239 441 1239 441 7956 1276 407 1284 427 413 1241 1280 404 1276 434 406 1247 433 1247 1284 400 440 1240 440 1240 440 1240 440 9058 1284 399 1281 429 411 1243 1278 432 1248 435 405 1249 431 1248 1283 401 439 1241 439 1241 439 1241 439 7957 1275 408 1283 401 439 1241 1280 430 1250 406 434 1246 434 1246 1275 409 441 1238 432 1249 431 1248 432 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1292 403 1288 431 409 1246 1285 406 1285 432 408 1247 433 1249 442 1240 1280 407 443 1239 441 1267 413 7957 1286 401 1279 434 406 1248 1283 404 1287 427 413 1241 439 1241 439 1241 1280 407 433 1248 432 1248 443 9055 1277 409 1282 431 409 1244 1276 409 1282 431 409 1244 436 1245 435 1245 1286 426 414 1267 413 1241 439 7956 1276 409 1282 430 410 1244 1277 408 1283 429 411 1269 411 1243 437 1243 1278 407 433 1248 432 1248 432 9065 1277 407 1284 428 412 1242 1278 406 1285 427 413 1241 439 1241 439 1241 1280 406 434 1247 433 1247 433 7962 1281 405 1275 436 414 1266 1254 431 1249 436 414 1265 415 1239 441 1240 1280 432 408 1246 434 1247 433 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1274 408 1283 426 414 1239 1282 427 1253 428 412 1241 439 1240 440 1240 440 1239 1281 427 413 1267 413 7957 1275 434 1246 436 404 1275 1256 427 1253 429 411 1267 413 1267 413 1240 440 1240 1280 428 412 1267 413 9060 1282 400 1280 428 412 1267 1253 429 1251 430 410 1243 437 1243 437 1242 438 1242 1278 429 411 1241 439 7958 1274 434 1246 436 414 1264 1256 426 1254 428 412 1266 414 1240 492 1188 440 1240 1280 428 412 1240 440 9059 1272 436 1254 426 414 1239 1281 426 1254 427 413 1240 440 1239 441 1239 441 1238 1282 426 414 1239 441 7955 1277 405 1275 407 433 1246 1274 408 1282 399 441 1239 441 1239 441 1239 441 1239 1281 400 440 1240 440 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1309 376 1276 409 433 1252 1305 379 1273 410 463 1222 441 1244 460 1221 463 1221 442 1242 462 1222 1283 7692 1310 375 1309 377 464 1220 1305 379 1273 410 463 1223 460 1222 441 1242 462 1221 431 1252 463 1220 1305 7668 1281 401 1303 378 432 1252 1284 399 1305 378 464 1220 464 1217 466 1216 467 1215 468 1214 459 1223 1303 7665 1305 379 1304 381 440 1244 1282 405 1278 409 433 1254 440 1246 437 1248 467 1219 433 1252 463 1224 1312 7687 1304 385 1309 380 461 1227 1278 410 1305 382 439 1250 433 1253 462 1228 466 1222 461 1226 468 1219 1306 7689 1313 375 1308 380 441 1248 1309 379 1284 402 460 1228 466 1222 441 1248 467 1222 462 1227 467 1222 1304 7688 1283 403 1312 374 468 1219 1306 382 1312 377 464 1224 439 1249 434 1252 442 1245 459 1228 435 1253 1304 7683 1277 411 1304 383 438 1249 1308 380 1303 381 461 1225 438 1248 435 1252 442 1247 436 1252 442 1246 1311 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1274 436 1247 436 406 1277 1249 437 1257 427 415 1269 415 1270 413 1272 1254 432 410 1274 410 1271 413 8525 1277 431 1253 430 412 1272 1254 430 1254 428 413 1270 414 1271 413 1272 1254 430 412 1271 413 1272 412 8537 1275 435 1249 437 415 1270 1256 427 1257 427 415 1268 405 1279 415 1268 1247 437 404 1279 415 1269 415 8528 1274 433 1251 432 410 1272 1254 430 1254 431 411 1273 411 1271 413 1244 1282 429 413 1271 413 1271 413 8532 1281 429 1255 430 412 1272 1254 429 1255 428 414 1271 413 1245 439 1273 1253 432 410 1274 410 1273 411 8539 1273 435 1249 433 409 1273 1253 429 1255 430 412 1271 413 1270 414 1267 1248 434 408 1274 410 1273 410 8532 1280 428 1256 427 414 1268 1247 436 1248 436 406 1250 434 1275 409 1272 1254 429 413 1270 414 1270 414 8534 1278 431 1253 433 409 1273 1253 429 1255 429 413 1269 415 1267 406 1277 1249 436 405 1277 407 1249 435 8531 1281 427 1246 436 406 1275 1251 434 1250 433 409 1272 412 1270 414 1269 1246 436 405 1277 407 1274 410 8537 1275 435 1249 435 407 1278 1248 437 1257 428 414 1268 405 1277 407 1276 1250 434 408 1274 410 1272 412 8531 1281 429 1255 429 413 1243 1283 427 1257 428 414 1271 413 1272 412 1272 1254 432 410 1273 411 1247 437 8536 1276 432 1252 432 410 1273 1253 432 1252 433 409 1275 409 1275 409 1275 1251 435 407 1278 405 1277 407 8535 1278 430 1254 428 414 1268 1247 436 1248 435 406 1276 408 1277 407 1277 1249 435 407 1277 407 1277 407 8540 1273 435 1249 434 408 1273 1253 429 1255 429 413 1271 413 1270 414 1270 1256 430 412 1271 413 1271 413 8538 1275 435 1249 435 407 1275 1251 432 1252 433 409 1275 409 1274 410 1274 1252 432 410 1275 409 1276 408 8542 1281 429 1255 431 411 1273 1253 431 1253 432 410 1273 411 1271 413 1271 1255 431 411 1273 411 1272 412 8529 1273 436 1258 427 415 1268 1258 427 1257 429 413 1272 412 1273 411 1249 1277 436 406 1279 415 1268 415 8536 1276 432 1252 430 412 1271 1255 431 1253 432 410 1275 409 1274 410 1273 1253 432 410 1274 410 1272 412 8527 1275 435 1249 435 407 1276 1250 433 1251 434 408 1277 407 1279 415 1269 1257 427 415 1271 413 1270 413 8556 1277 436 1258 431 411 1277 1259 430 1254 436 406 1280 414 1272 412 1275 1251 438 414 1272 412 1272 412 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 431 1253 432 410 1275 1250 433 1251 434 408 1277 406 1280 414 1272 412 1274 410 1276 1250 436 405 8543 1331 352 1280 432 410 1275 1251 433 1251 435 407 1275 409 1272 412 1271 413 1272 412 1273 1253 432 410 8527 1275 435 1249 436 405 1276 1250 431 1253 429 413 1270 413 1270 413 1269 414 1269 415 1268 1247 436 405 8534 1278 430 1253 428 414 1268 1247 435 1248 435 407 1277 406 1276 408 1274 410 1274 410 1248 1277 436 405 8558 1275 438 1256 431 411 1277 1259 428 1256 431 411 1275 409 1278 416 1271 413 1273 411 1277 1259 429 413 8559 1285 428 1256 430 412 1273 1253 433 1251 434 408 1277 406 1280 414 1274 410 1279 415 1273 1253 437 415 8550 1283 430 1254 433 409 1279 1257 431 1253 434 408 1279 415 1274 410 1278 416 1274 410 1278 1258 431 411 8553 1280 432 1252 435 407 1279 1257 427 1256 427 404 1277 406 1276 408 1248 435 1274 410 1273 1253 430 412 8535 1277 433 1251 435 406 1279 1257 429 1255 431 411 1275 409 1277 406 1278 416 1271 413 1272 1254 431 411 8545 1278 433 1251 434 408 1278 1258 428 1255 432 410 1274 410 1279 415 1273 411 1278 416 1273 1253 437 415 8557 1286 429 1254 437 415 1274 1252 436 1258 430 412 1277 406 1283 411 1278 405 1282 412 1275 1250 438 414 8561 1282 433 1251 438 414 1274 1252 438 1256 433 409 1277 407 1280 414 1272 412 1275 409 1278 1258 429 413 8549 1284 430 1254 434 408 1279 1257 429 1255 433 409 1279 415 1273 411 1277 407 1280 414 1274 1252 436 405 8557 1276 436 1258 431 411 1274 1252 434 1250 437 415 1272 412 1275 408 1280 414 1275 409 1280 1256 433 409 8558 1285 428 1256 431 411 1276 1250 438 1256 432 410 1278 416 1272 412 1273 411 1273 411 1273 1253 432 410 8539 1273 437 1247 436 405 1277 1249 434 1250 435 406 1276 408 1275 409 1275 409 1275 409 1275 1251 435 406 8543 1280 430 1254 431 411 1274 1252 431 1253 431 411 1273 410 1272 412 1273 411 1274 410 1276 1250 434 408 8542 1280 432 1252 434 408 1279 1257 430 1254 433 408 1277 407 1278 416 1270 413 1272 412 1275 1251 435 406 8540 1283 427 1257 429 413 1272 1254 431 1253 432 410 1275 409 1276 408 1278 406 1277 406 1276 1250 435 407 8538 1274 434 1250 434 408 1277 1249 436 1258 428 414 1273 411 1272 412 1270 414 1271 412 1273 1253 433 409 8535 1277 433 1251 436 406 1282 1254 433 1250 438 414 1274 410 1278 405 1280 414 1271 413 1276 1260 429 412 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1280 433 1251 436 405 1281 1255 431 1253 434 408 1278 405 1279 1257 431 411 1277 407 1280 414 1274 410 8547 1275 437 1257 428 413 1270 1255 430 1254 430 412 1273 411 1275 1251 436 405 1280 414 1271 412 1273 410 8550 1283 431 1253 434 408 1278 1258 427 1256 428 414 1271 412 1272 1254 434 408 1279 415 1271 412 1247 436 8544 1279 433 1251 435 407 1279 1257 430 1254 434 407 1278 405 1277 1249 437 415 1269 414 1269 415 1269 415 8537 1275 435 1248 435 406 1276 1250 436 1248 436 406 1278 406 1277 1248 437 404 1280 414 1269 414 1271 412 8532 1280 428 1255 428 413 1269 1246 437 1246 435 406 1276 408 1277 1248 436 406 1278 406 1279 415 1268 416 8538 1274 436 1258 427 415 1269 1257 427 1257 430 412 1272 412 1273 1252 434 408 1277 407 1280 414 1272 412 8553 1280 405 1279 434 408 1276 1250 435 1259 429 413 1273 411 1274 1252 434 408 1277 407 1279 415 1270 414 8548 1275 436 1258 428 414 1272 1254 433 1250 435 406 1277 406 1278 1258 429 413 1272 412 1275 409 1277 406 8549 1284 427 1257 430 412 1274 1251 433 1251 434 407 1277 406 1278 1248 437 415 1269 415 1271 412 1273 410 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8982 4433 598 1657 570 519 594 547 566 522 591 549 575 540 573 541 572 542 571 543 570 1659 568 1635 592 1637 600 1655 572 1657 570 1660 566 1636 601 1654 572 1630 597 517 596 545 568 520 593 547 566 548 576 539 574 540 573 540 573 1629 598 1631 596 1633 593 1635 592 1637 600 1629 597 1631 596 1633 593 521 592 522 591 549 575 540 573 514 599 542 571 543 570 544 569 1659 568 1635 592 1637 600 1628 598 1630 597 1632 595 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 8990 4430 601 1628 598 517 596 519 594 547 566 549 574 540 573 542 571 544 569 546 567 1663 574 1628 598 1658 568 1662 575 1654 572 1658 568 1660 566 1663 574 1656 570 544 569 1660 566 548 575 539 574 541 572 542 571 544 569 545 568 1662 575 539 574 1656 570 1658 568 1661 565 1664 573 1656 570 1659 567 548 565 1664 573 542 571 543 570 545 568 546 567 548 565 549 574 1655 571 543 570 1659 567 1661 576 1628 598 1658 568 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 00 00 00 00 command: 11 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 00 00 00 00 command: 0E 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 00 00 00 00 command: 05 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 00 00 00 00 command: 18 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 00 00 00 00 command: 40 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1313 407 1306 414 432 1273 1306 415 1308 447 409 1275 438 1275 437 1275 438 1273 1306 449 407 1278 434 7939 1307 438 1285 408 427 1278 1312 409 1304 424 484 1229 432 1280 433 1280 433 1277 1313 415 431 1282 430 7925 1310 408 1304 414 432 1274 1305 415 1308 420 426 1286 427 1285 428 1284 429 1282 1308 420 426 1286 427 7944 1312 407 1306 413 433 1272 1307 413 1310 418 428 1284 429 1283 481 1230 431 1279 1311 417 429 1283 430 7922 1313 406 1307 412 434 1271 1308 412 1311 416 430 1283 429 1282 431 1281 432 1277 1313 415 431 1281 431 7935 1310 409 1365 353 482 1222 1306 415 1308 420 426 1285 428 1284 429 1283 429 1280 1310 418 428 1284 429 7922 1303 415 1308 411 435 1270 1310 411 1312 415 431 1280 432 1279 433 1278 435 1274 1305 423 433 1278 435 7930 1305 413 1310 409 426 1277 1313 408 1305 422 434 1277 436 1275 427 1284 429 1280 1310 418 428 1283 430 7918 1307 411 1312 407 428 1275 1304 416 1307 420 436 1275 427 1283 430 1281 431 1277 1313 414 432 1279 433 7928 1307 411 1312 406 429 1274 1305 414 1309 419 427 1283 430 1281 432 1279 434 1275 1304 449 407 1277 435 7909 1305 412 1311 408 427 1276 1303 416 1307 421 435 1275 427 1283 430 1281 431 1277 1313 414 432 1279 433 7925 1310 408 1305 414 432 1271 1308 412 1311 417 429 1281 431 1279 433 1276 436 1272 1308 420 426 1284 429 7914 1311 407 1368 351 433 1271 1308 412 1311 416 430 1281 431 1278 434 1276 426 1281 1309 419 427 1283 430 7928 1307 410 1364 354 481 1221 1307 414 1309 418 428 1282 431 1280 433 1277 436 1272 1307 420 436 1274 428 7913 1312 406 1307 412 434 1269 1310 410 1313 414 432 1278 434 1275 427 1282 431 1277 1313 415 431 1279 433 7922 1313 405 1307 411 435 1268 1311 409 1304 423 433 1277 435 1274 428 1281 431 1276 1314 414 432 1278 434 7905 1310 409 1314 404 431 1271 1308 412 1311 417 429 1280 432 1277 436 1274 428 1279 1311 417 429 1280 432 7922 1313 432 1281 438 408 1267 1312 435 1288 440 406 1277 436 1273 429 1280 432 1275 1315 413 433 1278 434 7903 1311 409 1314 404 431 1269 1310 413 1310 418 428 1306 407 1276 437 1273 429 1278 1312 419 427 1306 407 7921 1315 406 1307 412 434 1292 1287 410 1313 415 431 1302 411 1298 404 1279 434 1274 1316 415 431 1302 411 7901 1314 407 1306 413 433 1294 1285 411 1312 417 429 1304 409 1300 402 1281 432 1275 1315 416 430 1303 410 7917 1308 412 1311 409 426 1274 1305 417 1306 422 434 1274 428 1280 432 1277 436 1297 1283 421 435 1273 429 7906 1309 411 1312 407 428 1274 1306 416 1307 422 434 1274 428 1280 433 1276 426 1281 1309 421 435 1273 429 7901 1313 407 1306 414 432 1270 1310 412 1311 418 428 1280 433 1276 426 1282 431 1276 1314 416 430 1278 435 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1310 411 1312 407 428 1300 1279 417 1306 419 1304 423 433 1302 410 1302 400 1282 1307 421 1302 425 431 7882 1312 409 1304 414 432 1296 1283 413 1310 415 1308 445 401 1308 404 1280 432 1276 1314 414 1309 418 428 7849 1314 406 1306 412 434 1293 1286 410 1302 422 1311 416 430 1304 409 1276 437 1272 1307 420 1303 423 433 7876 1307 413 1309 408 427 1300 1279 416 1307 418 1305 421 435 1299 403 1281 431 1277 1313 415 1308 418 428 7844 1308 411 1302 416 430 1297 1282 413 1310 415 1308 418 428 1305 407 1303 409 1271 1308 419 1304 422 434 7869 1304 416 1307 411 424 1302 1277 418 1305 419 1304 422 434 1299 403 1306 407 1275 1304 422 1301 425 431 7837 1305 414 1309 408 427 1299 1280 414 1309 415 1307 418 428 1305 408 1301 401 1280 1309 416 1307 419 427 7874 1309 410 1303 414 432 1294 1285 409 1303 446 1277 423 433 1299 403 1305 407 1273 1306 420 1303 423 433 7830 1312 407 1305 412 434 1292 1277 417 1306 418 1305 421 425 1307 406 1303 409 1271 1308 417 1305 420 426 7871 1312 407 1306 411 424 1275 1304 416 1307 417 1306 419 427 1280 432 1275 427 1279 1311 415 1308 417 429 7833 1309 410 1303 414 432 1268 1311 408 1305 419 1304 421 425 1282 430 1277 436 1296 1283 416 1307 419 427 7868 1305 414 1309 408 427 1272 1307 412 1310 413 1310 416 430 1277 425 1282 430 1301 1278 421 1302 424 432 7829 1303 415 1308 409 426 1274 1305 414 1308 415 1308 418 428 1279 433 1274 428 1278 1311 413 1310 416 430 7866 1307 411 1301 415 431 1270 1309 410 1303 421 1302 423 433 1275 427 1279 433 1273 1306 419 1304 422 434 7826 1306 413 1310 407 428 1272 1307 412 1311 413 1310 416 430 1277 425 1282 430 1275 1304 421 1302 424 432 7844 1308 410 1302 415 430 1269 1310 410 1302 421 1302 424 432 1274 428 1279 433 1299 1280 419 1304 422 434 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1306 440 1282 436 410 1269 1310 437 1286 442 404 1283 429 1282 430 1282 430 1283 429 1281 1308 419 427 7925 1309 436 1286 406 429 1275 1304 417 1306 447 409 1277 435 1276 436 1276 426 1286 426 1284 1305 448 408 7898 1305 440 1283 435 411 1268 1311 435 1277 450 406 1279 433 1278 434 1277 435 1276 436 1273 1306 448 408 7914 1309 435 1277 440 406 1272 1307 440 1283 444 402 1283 429 1282 430 1281 431 1280 432 1277 1312 442 404 7898 1305 440 1283 436 410 1267 1312 435 1288 440 406 1278 434 1277 435 1276 436 1274 428 1282 1307 446 410 7910 1313 431 1281 437 409 1268 1311 436 1287 440 406 1278 434 1277 435 1275 427 1284 428 1281 1308 445 401 7899 1304 441 1282 436 410 1267 1312 435 1288 439 407 1278 434 1276 436 1275 427 1283 429 1280 1309 444 401 7914 1309 436 1287 431 404 1272 1307 439 1283 443 403 1281 431 1279 433 1277 435 1275 427 1281 1308 445 401 7898 1305 439 1284 434 401 1275 1304 442 1280 446 410 1273 429 1281 431 1279 433 1278 434 1273 1306 448 408 7905 1308 437 1286 432 403 1273 1306 440 1283 444 402 1281 431 1279 433 1276 436 1274 428 1280 1309 444 401 7894 1309 435 1288 430 405 1271 1308 438 1285 442 404 1278 434 1275 437 1273 429 1280 432 1276 1313 440 406 7905 1308 437 1286 431 404 1272 1307 439 1284 442 403 1279 433 1276 436 1273 429 1280 432 1275 1314 439 407 7885 1307 437 1286 431 404 1271 1308 438 1285 442 404 1278 434 1274 428 1282 430 1279 433 1274 1305 448 408 7901 1312 432 1280 436 410 1266 1313 432 1280 446 410 1272 430 1278 434 1275 427 1282 430 1276 1314 440 406 7906 1307 436 1286 431 404 1270 1309 437 1286 440 406 1276 436 1273 429 1279 433 1276 426 1280 1309 444 402 7882 1311 434 1278 438 408 1267 1312 434 1278 447 409 1273 429 1279 433 1275 427 1281 431 1276 1313 439 407 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1316 405 1307 412 434 1270 1309 413 1310 416 1307 421 435 1276 436 1276 436 1275 427 1283 1307 421 1312 7037 1310 411 1312 407 428 1274 1305 418 1305 420 1303 425 431 1278 434 1277 435 1276 436 1274 1305 423 1310 7006 1310 411 1312 406 429 1274 1305 416 1306 419 1304 423 433 1303 409 1275 427 1284 428 1281 1308 420 1303 7043 1314 407 1305 412 434 1295 1284 412 1310 414 1309 419 427 1308 404 1280 432 1279 433 1275 1314 413 1310 7003 1313 407 1305 413 433 1294 1285 411 1301 424 1309 418 428 1306 406 1304 408 1276 436 1273 1306 421 1302 7041 1306 414 1309 410 425 1301 1278 418 1305 420 1303 424 432 1302 400 1310 402 1282 430 1277 1312 415 1307 7003 1313 407 1305 413 433 1294 1285 410 1302 423 1310 416 430 1304 408 1302 400 1284 428 1279 1310 417 1306 7033 1314 406 1307 412 434 1292 1287 408 1304 420 1303 424 432 1301 401 1308 404 1279 433 1274 1305 422 1311 6995 1311 410 1302 415 431 1295 1284 411 1301 423 1310 416 430 1303 409 1299 403 1280 432 1275 1304 422 1301 7034 1313 406 1307 411 424 1301 1278 417 1305 419 1303 423 433 1299 403 1305 407 1275 427 1281 1308 418 1304 6997 1309 411 1301 416 430 1295 1284 411 1301 422 1301 425 431 1301 401 1307 405 1277 435 1271 1308 418 1305 7028 1308 411 1301 415 431 1294 1285 410 1302 422 1301 425 431 1300 402 1306 406 1276 426 1280 1309 416 1307 6993 1312 407 1305 412 434 1291 1278 416 1307 417 1306 420 426 1306 406 1301 401 1281 431 1275 1304 422 1301 7029 1308 411 1301 415 431 1268 1311 409 1303 420 1303 423 433 1273 429 1278 434 1274 428 1277 1312 414 1309 6989 1306 412 1310 406 429 1270 1309 411 1301 422 1301 424 432 1274 428 1279 433 1275 427 1278 1311 414 1309 7019 1307 411 1301 415 431 1268 1311 408 1304 419 1304 421 435 1271 431 1276 426 1282 430 1275 1304 421 1302 6994 1312 406 1306 410 425 1274 1305 414 1309 414 1339 386 429 1277 425 1281 431 1276 426 1305 1284 414 1309 7018 1308 409 1303 413 433 1267 1302 417 1337 386 1337 388 458 1248 433 1273 429 1278 434 1271 1308 416 1338 6956 1308 410 1333 382 464 1236 1333 386 1337 386 1337 388 458 1248 454 1252 429 1277 435 1270 1340 384 1338 6949 1336 382 1330 386 460 1239 1330 388 1335 388 1335 391 455 1250 462 1244 458 1249 463 1241 1338 386 1336 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1289 402 1282 405 442 1268 1263 400 1284 403 433 1276 418 1242 442 1245 439 1248 446 1240 444 1243 1288 7090 1288 402 1282 405 442 1268 1263 400 1284 402 434 1276 418 1241 443 1244 440 1247 447 1240 444 1243 1288 7090 1288 402 1282 405 442 1269 1262 400 1284 402 445 1267 417 1243 441 1246 438 1249 445 1242 442 1245 1286 7092 1286 403 1291 395 441 1244 1287 402 1282 404 443 1242 442 1245 439 1249 445 1242 442 1245 439 1248 1293 7086 1292 398 1286 401 435 1248 1283 407 1287 399 437 1247 437 1250 444 1243 441 1246 438 1249 445 1242 1289 7090 1288 402 1282 405 442 1269 1262 401 1283 403 444 1268 416 1244 440 1247 437 1250 444 1243 441 1247 1284 7096 1293 397 1287 401 435 1275 1256 407 1287 400 436 1274 410 1250 444 1243 441 1247 437 1250 444 1243 1288 7092 1286 404 1280 408 439 1272 1259 403 1281 406 441 1270 414 1246 438 1250 444 1243 441 1246 438 1250 1291 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1291 399 1285 404 443 1243 1288 401 1283 404 443 1243 441 1245 439 1249 1282 407 440 1246 438 1249 445 7935 1291 401 1283 404 443 1268 1263 400 1284 403 444 1268 416 1245 439 1248 1283 408 439 1272 412 1249 445 7935 1291 400 1284 403 444 1268 1263 400 1284 403 433 1277 417 1244 440 1274 1257 407 440 1272 412 1248 446 7935 1290 401 1283 404 443 1242 1289 400 1284 404 443 1242 442 1245 439 1275 1256 407 440 1246 438 1249 445 7936 1290 400 1284 404 443 1243 1288 400 1284 404 443 1243 441 1245 439 1248 1283 407 440 1246 438 1249 445 7935 1290 401 1283 404 443 1268 1263 401 1283 404 443 1268 416 1245 439 1248 1283 408 439 1273 411 1250 444 7937 1288 403 1281 406 441 1271 1260 403 1281 406 441 1270 414 1247 447 1241 1290 400 436 1275 419 1241 443 7940 1286 405 1289 398 438 1273 1258 404 1280 408 439 1272 412 1249 445 1242 1289 402 435 1276 418 1242 442 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1293 395 1289 398 438 1248 1293 395 1289 398 438 1248 446 1241 443 1245 439 1249 1292 396 440 1245 439 7942 1294 395 1289 398 438 1247 1284 404 1290 397 439 1246 438 1250 444 1243 440 1247 1284 405 442 1244 440 7940 1285 404 1290 396 440 1246 1285 403 1291 396 440 1245 438 1249 445 1242 442 1245 1286 403 444 1242 442 7939 1286 402 1292 395 441 1245 1286 402 1292 394 442 1244 440 1248 446 1241 443 1245 1286 402 445 1242 442 7941 1284 404 1290 397 439 1248 1293 395 1289 398 438 1248 446 1242 442 1246 438 1250 1291 396 440 1247 447 7934 1291 398 1286 401 446 1241 1290 399 1285 402 445 1242 442 1246 438 1250 444 1244 1287 401 446 1241 443 7940 1285 403 1291 396 440 1247 1284 404 1290 397 439 1247 437 1251 443 1245 439 1249 1292 396 440 1246 438 7945 1291 398 1286 401 446 1240 1291 398 1286 401 446 1240 444 1244 439 1248 446 1242 1289 399 437 1249 445 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 46 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 00 00 00 00 command: 44 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 00 00 00 00 command: 43 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 00 00 00 00 command: 16 00 00 00 # -name: MODE +name: Mode type: parsed protocol: NEC address: 00 00 00 00 command: 0D 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1308 408 1311 402 442 1250 1314 412 1307 405 449 1242 446 1250 449 1246 453 1243 445 1250 449 1248 1316 7148 1306 411 1308 405 449 1242 1311 415 1304 408 446 1246 453 1244 444 1251 448 1247 451 1244 444 1252 1312 7154 1309 406 1303 410 444 1247 1306 420 1309 404 450 1241 447 1249 450 1247 451 1244 444 1252 447 1249 1315 7150 1314 403 1306 407 447 1245 1308 417 1302 412 442 1250 449 1248 450 1246 442 1254 444 1251 448 1249 1304 7160 1314 429 1280 433 421 1248 1305 445 1284 429 415 1252 447 1250 449 1247 441 1254 445 1252 447 1250 1303 7164 1310 404 1305 410 444 1251 1302 420 1309 404 440 1257 441 1255 443 1252 447 1250 449 1248 440 1256 1307 7159 1304 409 1310 403 441 1254 1309 413 1306 407 447 1248 440 1255 443 1252 446 1249 450 1246 442 1253 1362 7102 1310 404 1305 409 445 1251 1302 420 1310 403 441 1254 444 1251 447 1248 440 1255 443 1253 446 1250 1303 7163 1311 403 1306 408 446 1249 1304 418 1301 412 442 1253 446 1250 449 1248 440 1256 442 1254 445 1251 1302 7162 1302 413 1306 407 447 1248 1305 417 1302 412 442 1254 445 1251 448 1248 440 1256 442 1253 446 1249 1304 7155 1308 405 1304 409 445 1251 1302 420 1309 404 440 1255 443 1253 445 1250 448 1248 440 1255 495 1202 1310 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1317 406 1313 409 445 1250 1324 410 1319 403 451 1243 445 1252 447 1250 500 1196 1316 408 446 1248 451 7997 1311 408 1311 407 447 1245 1319 411 1308 408 446 1248 450 1247 452 1246 453 1244 1309 411 443 1251 448 8000 1308 411 1308 408 446 1247 1317 412 1307 410 444 1248 451 1246 442 1253 446 1251 1313 407 447 1246 452 7995 1313 406 1313 404 450 1244 1320 410 1309 409 445 1248 451 1245 454 1243 445 1251 1313 434 420 1245 453 7992 1317 430 1279 437 417 1251 1313 442 1277 439 415 1252 447 1250 449 1248 451 1247 1317 411 454 1241 447 8003 1315 402 1307 407 447 1244 1309 417 1302 411 443 1249 450 1246 442 1253 446 1251 1313 406 448 1272 416 8004 1315 404 1305 410 444 1277 1286 413 1306 408 446 1274 425 1272 416 1253 446 1278 1286 408 446 1274 425 7994 1314 406 1313 406 448 1273 1291 415 1314 406 448 1274 425 1273 415 1253 446 1252 1312 411 443 1278 421 7997 1312 410 1309 409 445 1275 1289 413 1306 412 442 1279 420 1277 422 1275 424 1273 1280 414 440 1253 446 7999 1309 411 1308 409 445 1250 1303 422 1308 409 445 1250 449 1247 441 1255 444 1252 1312 407 447 1248 440 8004 1315 404 1305 412 442 1253 1311 414 1305 410 444 1250 449 1246 442 1253 446 1250 1314 404 440 1257 442 8001 1307 411 1308 408 446 1248 1305 421 1308 407 447 1247 441 1254 445 1252 447 1250 1314 404 440 1257 442 8005 1314 404 1305 413 441 1254 1310 416 1303 413 441 1254 445 1251 448 1248 440 1257 1307 410 444 1252 447 7998 1310 407 1312 405 439 1255 1309 416 1303 411 443 1251 448 1248 440 1254 445 1250 1303 411 443 1251 448 7994 1304 414 1305 411 443 1251 1302 422 1308 408 446 1248 440 1254 445 1251 448 1248 1305 411 443 1253 446 7997 1312 406 1303 413 441 1253 1311 413 1306 408 446 1248 440 1255 444 1253 446 1251 1313 404 440 1256 443 8002 1307 411 1308 408 446 1248 1305 419 1300 414 440 1254 445 1250 449 1247 441 1255 1309 409 445 1249 450 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1313 405 1314 405 449 1250 1313 420 1320 406 448 1252 447 1253 446 1254 445 1255 443 1255 1319 404 450 8002 1316 406 1313 409 445 1253 1311 422 1318 407 499 1202 445 1253 446 1253 445 1254 445 1254 1320 404 450 7999 1309 408 1311 406 448 1248 1305 421 1308 411 443 1253 446 1251 447 1249 449 1248 440 1257 1306 409 445 8000 1308 408 1311 405 449 1247 1306 418 1311 405 449 1248 440 1256 443 1253 446 1251 448 1250 1313 404 450 7996 1312 436 1283 407 447 1250 1313 414 1315 405 449 1250 448 1249 449 1248 450 1246 442 1255 1319 402 452 7991 1307 439 1280 412 442 1255 1308 420 1309 411 443 1255 444 1254 445 1253 446 1253 446 1253 1321 406 448 7998 1320 406 1323 403 451 1249 1314 421 1319 408 446 1254 444 1255 443 1255 443 1256 442 1256 1318 408 446 8004 1314 412 1317 409 445 1255 1318 417 1323 404 450 1250 448 1251 447 1252 447 1253 445 1255 1319 407 447 8003 1315 410 1319 407 447 1252 1322 414 1315 410 444 1256 453 1247 451 1248 450 1247 441 1256 1307 438 416 8002 1316 431 1288 429 415 1252 1311 444 1285 431 423 1241 447 1249 449 1247 451 1248 450 1246 1317 402 442 8002 1316 403 1306 411 443 1251 1312 416 1313 404 450 1244 444 1252 447 1251 447 1249 449 1247 1316 402 442 8002 1316 403 1306 410 444 1250 1313 414 1305 410 444 1249 450 1246 452 1244 444 1253 446 1252 1311 407 447 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1292 433 1265 432 406 1261 1286 438 1260 436 413 1255 443 1253 444 1252 435 1260 438 1259 439 1257 1290 7192 1288 436 1262 434 415 1279 1257 440 1258 438 411 1284 414 1256 442 1254 444 1253 445 1252 435 1261 1286 7196 1284 440 1258 438 411 1257 1290 434 1264 432 417 1252 435 1260 438 1259 439 1257 441 1255 443 1253 1283 7198 1292 431 1256 440 409 1259 1288 436 1262 434 415 1253 434 1261 437 1259 439 1257 441 1255 443 1253 1283 7198 1292 431 1256 439 410 1258 1289 435 1263 433 416 1252 435 1261 437 1258 440 1256 442 1254 444 1252 1284 7198 1292 405 1282 440 409 1258 1289 435 1263 433 416 1252 435 1260 438 1258 440 1256 442 1254 444 1252 1284 7196 1284 440 1258 438 411 1257 1290 433 1265 431 407 1260 438 1284 414 1256 442 1254 444 1252 435 1260 1287 7195 1285 438 1260 436 413 1255 1292 405 1282 440 409 1259 439 1257 441 1255 443 1254 444 1252 435 1260 1287 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1287 410 1288 435 414 1281 1255 414 1284 439 410 1259 439 1283 415 1254 444 1252 435 1261 1286 437 412 8042 1287 410 1288 434 415 1255 1281 440 1258 438 411 1258 440 1255 443 1253 434 1261 437 1259 1288 408 441 8039 1290 406 1292 431 407 1262 1285 411 1287 435 414 1256 442 1253 445 1251 436 1260 438 1258 1289 434 415 8039 1290 406 1281 441 408 1287 1260 409 1289 434 415 1254 433 1261 437 1259 439 1283 415 1255 1292 405 433 8046 1283 413 1285 438 411 1285 1262 434 1264 431 407 1288 410 1259 439 1257 441 441 1253 1283 413 436 8044 1285 412 1286 436 413 1257 1290 405 1282 440 409 1287 411 1284 414 1281 417 1253 434 1261 1286 437 412 8042 1287 436 1262 434 415 1281 1256 440 1258 411 438 1258 440 1255 443 1253 434 1261 437 1258 1289 434 415 8039 1290 406 1281 440 409 1287 1260 409 1289 433 416 1253 434 1261 437 1259 439 1256 442 1254 1293 404 434 8046 1283 413 1285 411 438 1257 1290 406 1281 414 435 1287 411 1257 441 1255 443 1253 434 1261 1286 438 411 8042 1287 409 1289 433 416 1280 1257 439 1259 436 413 1256 442 1253 445 1251 436 1286 412 1283 1264 433 416 8037 1292 404 1283 412 437 1285 1262 408 1290 432 417 1278 409 1259 439 1257 441 1255 443 1253 1283 439 410 8043 1285 437 1261 435 414 1281 1255 440 1258 438 411 1283 415 1254 444 1252 435 1260 438 1258 1289 434 414 8038 1291 432 1255 440 409 1286 1261 435 1263 433 416 1251 436 1259 439 1257 441 1255 443 1253 1283 440 409 8044 1284 411 1287 436 413 1254 1293 431 1256 439 410 1257 441 1281 417 1253 434 1261 437 1259 1288 435 413 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1288 437 1260 435 414 1254 1292 431 1256 440 409 1259 438 1258 1288 435 413 1255 442 1253 444 1252 435 8046 1292 431 1256 440 409 1259 1288 436 1261 434 414 1254 443 1253 1283 440 409 1259 438 1258 439 1256 441 8040 1287 436 1261 434 414 1254 1292 431 1256 439 409 1258 491 1204 1291 433 415 1253 434 1261 436 1260 438 8044 1284 440 1257 438 410 1257 1290 434 1263 432 417 1251 436 1259 1287 436 412 1255 442 1254 443 1252 435 8045 1293 431 1256 439 410 1258 1289 435 1262 433 416 1253 434 1261 1285 439 410 1258 440 1256 442 1255 442 8038 1290 433 1264 431 407 1260 1287 437 1261 435 413 1254 443 1253 1283 440 408 1259 439 1257 440 1255 442 8038 1289 434 1263 432 417 1251 1285 438 1260 436 413 1255 442 1253 1283 441 408 1260 438 1258 440 1256 442 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1289 408 1289 434 414 1245 1291 433 1264 432 416 1270 417 1243 444 1243 444 1243 444 1244 443 1244 1292 7134 1291 405 1292 431 417 1242 1294 429 1268 427 411 1248 439 1248 439 1274 413 1247 440 1247 440 1247 1289 8241 1295 400 1287 436 412 1247 1289 434 1263 432 416 1242 445 1242 445 1242 445 1241 446 1241 435 1251 1295 7130 1295 400 1287 436 412 1246 1290 406 1291 431 417 1268 419 1241 446 1241 435 1251 436 1277 410 1250 1286 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1369 328 1296 427 411 1275 1261 436 1261 434 414 1245 442 1245 442 1244 443 1244 443 1244 1291 431 417 7972 1291 404 1293 429 409 1251 1295 400 1287 436 412 1273 414 1246 441 1245 442 1245 442 1245 1290 405 443 9076 1287 408 1289 433 415 1271 1264 430 1267 428 410 1276 411 1249 438 1248 439 1248 439 1274 1261 434 414 7974 1289 406 1291 431 417 1242 1294 428 1259 436 412 1273 414 1273 414 1245 442 1245 442 1244 1292 430 418 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 FC 00 00 command: 80 7F 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NECext address: 00 FC 00 00 command: 85 7A 00 00 # -name: MODE +name: Mode type: parsed protocol: NECext address: 00 FC 00 00 command: 81 7E 00 00 # -name: TIMER +name: Timer type: parsed protocol: NECext address: 00 FC 00 00 command: 86 79 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1299 409 1271 412 433 1211 1293 416 1274 409 436 1207 462 1207 462 1208 461 1208 461 1209 460 1209 1296 7131 1300 410 1270 386 459 1210 1294 389 1301 382 463 1206 464 1206 463 1207 463 1208 462 1208 461 1209 1295 8208 1302 382 1298 385 460 1208 1297 387 1293 390 455 1213 456 1214 466 1205 465 1205 464 1206 463 1206 1298 7129 1302 382 1298 385 460 1208 1297 387 1293 390 455 1213 457 1213 467 1204 465 1205 464 1205 464 1206 1298 8207 1293 391 1299 383 452 1218 1297 386 1294 388 457 1213 456 1214 455 1215 454 1216 454 1216 453 1217 1298 7130 1290 415 1275 406 429 1219 1296 409 1271 411 434 1212 457 1213 456 1213 456 1214 455 1188 481 1215 1299 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1296 386 1294 414 431 1212 1292 416 1274 409 436 1206 463 1207 462 1207 463 1207 463 1208 1297 411 434 7953 1292 417 1273 408 437 1206 1298 411 1269 413 432 1210 459 1210 459 1211 458 1211 458 1211 1293 415 430 9123 1293 389 1301 407 438 1205 1299 410 1269 412 433 1209 460 1210 459 1210 459 1210 459 1210 1294 388 457 7957 1298 410 1270 413 432 1211 1293 389 1301 408 437 1205 464 1206 463 1206 463 1207 463 1207 1297 385 460 9120 1296 387 1293 416 429 1214 1301 381 1299 410 435 1208 461 1209 460 1209 460 1210 459 1210 1294 414 431 7958 1297 385 1295 414 431 1212 1303 380 1300 409 436 1207 462 1207 463 1207 462 1209 460 1208 1296 386 459 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 1295 410 1270 411 434 1210 1294 412 1268 414 431 1238 431 1212 1302 405 429 1214 455 1266 1249 406 428 7959 1296 410 1270 412 433 1210 1294 413 1267 414 431 1213 456 1213 1301 405 429 1214 455 1266 1249 406 428 9065 1299 406 1274 408 437 1207 1297 409 1271 411 434 1236 433 1210 1294 412 433 1211 458 1264 1240 414 431 7958 1297 409 1271 411 434 1209 1295 412 1268 414 431 1238 431 1212 1302 405 429 1214 455 1267 1248 407 427 9067 1298 383 1297 410 435 1209 1295 412 1268 414 431 1238 431 1212 1292 415 430 1214 455 1266 1249 407 427 7962 1293 414 1276 406 428 1215 1300 408 1272 410 435 1235 434 1209 1295 411 434 1210 459 1262 1242 413 432 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1300 381 1299 410 435 1208 1296 413 1267 415 430 1213 456 1213 456 1214 455 1214 1301 408 437 1207 462 7950 1295 413 1267 416 429 1214 1301 381 1299 410 435 1208 461 1208 461 1208 461 1208 1296 386 459 1211 458 9008 1296 387 1293 415 430 1213 1301 407 1273 410 435 1208 461 1208 461 1208 461 1208 1296 386 459 1210 459 7952 1293 416 1274 408 437 1206 1298 384 1296 413 432 1211 458 1211 458 1211 458 1211 1304 405 429 1214 455 9013 1301 407 1273 410 435 1259 1245 412 1268 415 430 1264 405 1213 456 1213 456 1213 1301 407 438 1256 403 7958 1297 410 1270 413 432 1262 1253 405 1275 407 427 1267 402 1216 453 1216 453 1216 1298 409 436 1259 410 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1294 412 1268 415 430 1265 1250 408 1272 411 434 1260 409 1210 1294 413 432 1264 405 1213 456 1215 454 7959 1296 411 1269 415 430 1265 1250 408 1271 410 435 1260 409 1234 1270 413 432 1264 405 1238 431 1214 455 9016 1298 410 1270 414 431 1264 1251 407 1273 409 436 1260 409 1260 1244 413 432 1263 406 1237 433 1213 456 7959 1296 412 1268 415 430 1265 1250 407 1273 410 435 1260 409 1234 1270 414 431 1264 405 1214 455 1215 454 9017 1297 411 1269 414 431 1264 1251 407 1273 410 435 1260 409 1209 1295 387 458 1237 432 1213 456 1214 456 7959 1296 413 1267 416 429 1239 1276 409 1271 412 433 1235 434 1211 1304 379 455 1239 430 1215 454 1216 453 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1294 388 1291 390 455 1215 1289 392 1298 384 451 1220 460 1210 459 1210 1294 388 457 1212 457 1212 457 7954 1301 382 1298 384 461 1207 1297 387 1293 389 456 1212 457 1212 457 1213 1291 392 463 1205 465 1205 464 9263 1295 414 1266 417 428 1214 1301 409 1271 412 433 1209 460 1209 460 1210 1294 415 430 1213 456 1213 456 7959 1296 413 1267 415 430 1213 1302 408 1271 411 434 1208 461 1209 460 1209 1295 414 431 1212 457 1213 456 9272 1297 412 1268 415 430 1212 1292 417 1273 410 435 1207 462 1208 461 1208 1296 413 432 1211 458 1211 458 7956 1299 410 1270 413 432 1210 1294 390 1300 409 436 1206 463 1207 463 1207 1298 387 458 1210 459 1211 458 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1251 410 1245 415 407 1252 1246 415 1250 410 412 1247 408 1252 413 1247 408 1252 413 1247 408 1252 1246 7350 1248 438 1227 433 389 1245 1253 434 1221 439 383 1250 415 1245 410 1250 405 1255 410 1249 406 1255 1253 7340 1247 439 1226 407 415 1245 1253 433 1222 412 410 1250 405 1255 410 1249 406 1254 411 1249 406 1254 1254 7340 1247 412 1253 407 415 1245 1253 407 1248 412 410 1250 405 1255 410 1249 406 1254 411 1248 407 1253 1245 7349 1249 411 1254 406 405 1254 1254 406 1249 411 411 1248 407 1252 413 1246 409 1251 414 1245 410 1250 1248 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1250 409 1246 441 381 1252 1246 414 1252 435 387 1246 409 1250 405 1255 1243 417 405 1281 384 1275 380 8188 1244 416 1249 437 385 1249 1249 437 1218 443 379 1253 412 1248 407 1253 1245 415 407 1252 413 1246 409 8186 1246 414 1251 435 387 1272 1226 408 1247 439 383 1276 379 1281 384 1249 1249 437 385 1248 407 1253 412 8181 1251 409 1246 440 382 1277 1221 439 1226 434 378 1255 410 1249 406 1254 1244 416 406 1253 412 1247 408 8187 1245 441 1225 435 387 1273 1225 435 1220 440 382 1251 414 1245 410 1250 1248 412 410 1249 406 1254 411 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1243 444 1221 438 384 1276 1222 438 1217 443 379 1254 411 1274 381 1252 413 1246 409 1251 1247 413 409 8185 1247 440 1225 435 387 1246 1252 408 1247 440 382 1277 388 1245 410 1276 379 1280 385 1249 1249 411 411 8184 1248 412 1243 444 378 1282 1216 444 1221 439 383 1250 405 1254 411 1248 407 1253 412 1248 1250 410 412 8182 1250 410 1245 442 380 1253 1245 415 1250 437 385 1247 408 1252 413 1272 383 1251 414 1272 1226 408 414 8180 1252 409 1246 440 382 1252 1246 440 1225 435 387 1272 383 1250 405 1254 411 1249 406 1254 1244 416 406 8188 1244 416 1249 437 385 1249 1249 411 1244 443 379 1253 412 1273 382 1278 387 1246 409 1251 1247 413 409 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1305 379 1283 402 434 1251 431 1253 1276 408 1275 411 435 1249 1280 404 432 1253 1276 408 438 1247 1282 7144 1281 404 1279 407 439 1247 435 1250 1310 375 1307 379 467 1218 1311 374 431 1254 1306 379 436 1249 1311 7119 1305 380 1302 382 464 1222 460 1224 1305 380 1302 382 464 1221 1308 377 469 1217 1302 383 463 1222 1307 7121 1303 380 1303 382 464 1221 462 1223 1306 378 1305 381 465 1220 1309 375 430 1254 1306 380 435 1250 1279 7148 1276 408 1274 411 435 1250 432 1252 1277 408 1274 410 436 1249 1280 404 432 1253 1276 408 438 1247 1282 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1282 402 1281 404 432 1252 430 1254 1275 408 1275 410 436 1248 435 1249 434 1251 1278 405 431 1254 439 7984 1277 407 1276 408 438 1246 436 1248 1281 402 1281 403 433 1251 432 1253 430 1254 1275 408 438 1246 437 7985 1276 407 1276 408 438 1246 436 1248 1281 402 1281 403 433 1252 431 1253 440 1245 1274 409 437 1248 435 7990 1333 351 1332 352 433 1252 431 1254 1326 358 1335 349 436 1249 434 1250 433 1252 1328 355 440 1244 438 7984 1328 355 1328 356 439 1245 438 1247 1333 350 1333 351 434 1250 433 1252 431 1253 1327 357 438 1246 437 7988 1273 410 1273 411 435 1249 434 1250 1279 405 1278 406 440 1244 439 1246 436 1247 1282 402 434 1251 432 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1282 403 1279 405 431 1254 439 1246 1273 412 434 1251 432 1254 1275 410 436 1249 433 1251 431 1254 1275 7152 1283 402 1281 405 431 1254 439 1246 1273 412 434 1251 432 1254 1305 379 436 1249 433 1252 430 1254 1306 7122 1302 382 1311 374 462 1223 459 1226 1303 381 465 1221 461 1223 1306 379 467 1218 464 1221 461 1224 1305 7123 1312 373 1310 375 461 1224 469 1216 1303 381 465 1221 461 1223 1306 379 467 1218 464 1221 461 1224 1305 7123 1312 374 1308 376 460 1225 468 1218 1311 374 462 1223 459 1226 1303 382 464 1222 460 1224 469 1217 1302 7128 1306 379 1303 382 464 1221 461 1224 1305 380 466 1219 463 1221 1277 408 469 1217 465 1219 463 1222 1307 7122 1282 403 1279 405 462 1223 459 1226 1283 402 465 1221 461 1224 1274 410 467 1218 464 1221 461 1224 1274 7155 1280 405 1278 408 438 1247 435 1250 1279 406 440 1245 437 1249 1280 405 431 1255 438 1249 433 1252 1277 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1279 406 1307 377 438 1246 436 1249 1311 373 463 1221 462 1224 469 1216 466 1218 465 1220 463 1222 460 7967 1304 380 1303 382 464 1221 462 1223 1276 409 468 1217 466 1220 463 1223 459 1225 468 1217 465 1220 462 7966 1275 410 1303 382 464 1220 463 1222 1276 409 468 1218 465 1220 463 1223 459 1225 468 1217 435 1250 463 7965 1306 378 1304 381 465 1220 463 1222 1307 378 468 1217 465 1219 433 1253 440 1245 437 1248 434 1251 462 7966 1275 411 1282 404 432 1254 439 1248 1281 404 432 1254 439 1247 436 1250 433 1253 440 1246 437 1248 435 7995 1276 409 1284 402 434 1252 431 1255 1274 411 435 1251 431 1254 439 1247 436 1250 433 1253 440 1246 436 7992 1279 407 1276 410 436 1249 433 1252 1277 409 447 1238 434 1252 431 1254 439 1247 435 1250 433 1253 440 7990 1281 404 1278 406 440 1245 438 1249 1280 405 441 1245 437 1248 435 1251 432 1254 439 1247 435 1250 433 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 01 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 80 00 00 00 command: 05 00 00 00 # -name: SPEED- +name: Speed_dn type: parsed protocol: NEC address: 80 00 00 00 command: 1B 00 00 00 -# TIMER DOWN -name: TIMER +# Timer DOWN +name: Timer type: parsed protocol: NEC address: 80 00 00 00 command: 09 00 00 00 -# ROTATE -name: ROTATE +# Rotate +name: Rotate type: parsed protocol: NEC address: 80 00 00 00 command: 03 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1397 357 1370 357 500 1188 1427 331 1343 383 473 1240 476 1240 476 1240 475 1240 475 1240 475 1240 1370 7358 1367 361 1366 361 496 1220 1366 361 1366 361 496 1220 495 1220 495 1220 495 1221 494 1220 495 1220 1366 7361 1365 361 1366 361 495 1221 1365 362 1365 362 494 1221 494 1221 494 1220 495 1220 495 1221 494 1220 1365 7361 1364 361 1366 362 494 1221 1365 362 1365 362 494 1221 494 1221 494 1221 494 1221 494 1221 494 1221 1365 7361 1364 362 1364 362 494 1221 1364 362 1365 362 495 1221 494 1221 494 1221 494 1221 494 1221 494 1221 1364 7361 1364 363 1364 363 493 1222 1364 363 1363 363 493 1223 492 1223 492 1223 492 1247 468 1223 492 1247 1339 7386 1338 388 1338 388 468 1247 1339 388 1338 388 468 1248 467 1247 468 1247 468 1247 468 1248 467 1247 1338 7387 1337 389 1338 389 467 1248 1338 389 1337 389 467 1248 467 1248 467 1248 467 1248 467 1248 467 1248 1337 7388 1336 389 1337 389 467 1249 1336 390 1337 390 466 1249 466 1249 466 1249 466 1249 466 1249 466 1248 1337 7388 1312 414 1312 414 465 1251 1335 391 1337 390 441 1274 441 1274 465 1249 464 1250 442 1274 441 1273 1337 7388 1311 414 1312 415 441 1274 1311 415 1311 415 441 1274 441 1274 441 1274 441 1274 441 1274 441 1274 1311 7413 1311 415 1312 415 441 1274 1311 415 1311 416 440 1275 440 1275 440 1275 440 1275 440 1275 439 1275 1310 7414 1309 416 1310 417 439 1276 1310 417 1309 417 438 1277 438 1277 438 1277 438 1301 413 1301 414 1301 1285 7439 1284 442 1284 442 414 1301 1284 443 1283 443 413 1302 413 1302 413 1302 413 1302 412 1302 413 1302 1283 7441 1283 443 1284 443 412 1303 1283 444 1282 444 412 1303 411 1303 412 1303 412 1303 412 1303 412 1303 1283 7441 1282 445 1281 445 411 1304 1282 470 1256 471 385 1330 385 1330 385 1330 385 1330 385 1330 385 1330 1256 7468 1255 471 1256 471 384 1331 1255 471 1255 472 383 1331 384 1331 383 1332 383 1332 383 1331 383 1332 1254 7470 1253 498 1228 499 356 1358 1228 499 1227 499 356 1359 356 1359 356 1359 356 1359 355 1360 355 1359 1227 7497 1226 526 1200 527 327 1387 1200 527 1199 554 300 1414 301 1415 299 1415 299 1415 300 1416 299 1415 1172 7553 1170 609 1117 583 270 1471 1117 637 1089 692 118 10334 871 # Osc -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1395 358 1369 358 499 1215 1399 331 1341 384 472 1241 474 1240 475 1240 1345 383 473 1240 474 1240 474 8239 1366 387 1339 387 469 1246 1339 388 1339 387 469 1246 469 1246 469 1246 1339 388 469 1246 469 1246 469 8242 1339 387 1339 387 469 1246 1339 387 1339 387 469 1246 469 1246 469 1246 1339 387 469 1246 469 1246 468 8243 1338 388 1338 388 469 1246 1339 388 1338 388 468 1246 468 1246 469 1247 1338 388 468 1246 468 1247 468 8243 1338 388 1338 388 468 1246 1338 388 1338 388 468 1246 469 1246 468 1246 1339 387 469 1246 468 1246 468 8218 1363 363 1363 363 493 1222 1363 363 1363 363 493 1222 493 1222 492 1222 1363 363 493 1221 493 1222 493 8217 1363 363 1363 363 493 1222 1363 363 1363 363 493 1246 468 1223 492 1223 1361 375 481 1247 467 1247 467 8243 1337 388 1338 388 468 1247 1337 389 1337 388 468 1247 468 1247 468 1247 1337 389 467 1248 466 1248 466 8243 1337 389 1337 389 467 1248 1336 389 1337 390 466 1248 466 1248 466 1248 1336 390 466 1248 466 1248 466 8244 1336 390 1311 415 465 1249 1336 390 1336 391 465 1250 465 1249 465 1250 1310 415 465 1250 464 1250 439 8270 1310 416 1310 416 440 1275 1310 417 1309 417 438 1300 414 1301 413 1301 1284 442 414 1301 413 1301 413 8297 1284 442 1284 442 413 1301 1284 443 1283 443 413 1302 412 1302 412 1302 1282 443 413 1302 412 1302 412 8298 1282 443 1283 443 413 1302 1283 443 1283 444 412 1303 411 1303 411 1303 1282 444 412 1303 411 1303 411 8299 1280 445 1281 470 385 1329 1255 470 1256 471 384 1330 384 1329 385 1329 1255 471 385 1330 384 1330 384 8326 1253 472 1254 472 384 1331 1253 473 1253 499 356 1357 357 1358 356 1358 1226 499 356 1358 356 1359 355 8355 1224 502 1224 501 355 1385 1199 527 1199 527 328 1386 328 1386 328 1386 1199 527 328 1387 327 1387 327 8409 1171 554 1172 555 300 1414 1172 555 1171 555 300 1416 299 1416 298 1415 1171 556 298 1442 272 1442 272 8438 1143 583 1143 583 271 1471 1115 611 1115 664 179 1536 178 1563 122 1619 1006 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1395 359 1367 358 499 1213 1368 359 1366 359 473 1239 474 1239 474 1238 475 1238 1368 360 497 1215 497 8209 1362 364 1361 366 492 1221 1360 366 1359 366 491 1222 492 1222 491 1221 493 1245 1336 366 492 1222 492 8213 1360 366 1359 389 468 1222 1359 367 1358 390 467 1246 468 1246 468 1245 468 1246 1335 390 467 1246 467 8238 1335 390 1335 390 468 1246 1335 390 1335 390 467 1246 467 1246 468 1246 467 1246 1335 390 467 1246 467 8238 1334 390 1335 390 467 1247 1334 390 1335 391 466 1247 466 1247 466 1247 466 1247 1334 390 467 1247 466 8239 1334 391 1334 391 466 1247 1334 391 1334 391 467 1247 466 1247 466 1247 466 1248 1333 391 466 1248 465 8239 1333 392 1333 392 466 1248 1333 392 1333 392 465 1248 465 1248 465 1248 465 1248 1333 392 465 1248 465 8240 1332 392 1333 392 465 1248 1333 393 1332 393 464 1249 464 1249 464 1249 464 1249 1331 393 465 1249 464 8241 1331 393 1332 393 464 1250 1331 394 1331 394 463 1250 463 1251 462 1250 463 1251 1329 396 462 1251 462 8243 1305 420 1305 444 436 1277 1280 444 1281 445 435 1277 412 1301 436 1277 435 1277 1280 445 436 1277 436 8268 1280 445 1279 445 412 1301 1280 445 1280 445 411 1302 411 1302 411 1302 411 1302 1279 446 411 1302 411 8293 1278 446 1279 446 411 1303 1278 447 1277 447 410 1303 410 1304 409 1329 384 1329 1252 472 385 1329 384 8320 1252 473 1251 473 383 1330 1251 473 1252 473 384 1330 383 1330 383 1330 383 1330 1251 474 382 1330 383 8321 1250 474 1251 475 381 1331 1250 500 1224 500 356 1358 355 1358 355 1358 355 1358 1223 501 355 1358 355 8349 1223 502 1222 528 327 1386 1196 528 1196 530 326 1386 327 1387 326 1386 327 1413 1169 556 299 1414 299 8404 1169 556 1168 584 271 1441 1141 611 1113 637 216 1498 215 1524 178 1562 122 1564 1058 11171 970 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1366 359 1366 360 496 1214 1367 360 1395 331 524 1185 474 1239 474 1238 475 1238 475 1238 1343 383 498 8205 1366 386 1338 386 470 1244 1338 386 1339 386 470 1243 470 1244 469 1244 469 1243 470 1244 1338 386 470 8234 1338 386 1339 386 469 1244 1338 386 1339 386 470 1243 470 1220 493 1219 494 1243 470 1244 1338 362 494 8233 1339 362 1363 386 469 1244 1338 386 1339 386 469 1244 469 1244 469 1244 469 1244 469 1244 1338 387 468 8234 1338 386 1338 387 468 1244 1338 387 1337 387 468 1244 469 1244 468 1245 469 1244 469 1244 1338 387 468 8234 1337 387 1338 387 465 1247 1338 387 1338 387 468 1245 468 1244 444 1269 468 1246 467 1245 1337 387 468 8235 1337 387 1337 388 468 1245 1336 388 1336 388 466 1246 467 1245 468 1245 467 1247 467 1245 1312 412 467 8235 1312 412 1312 412 443 1270 1335 390 1311 412 468 1246 466 1246 467 1246 467 1246 467 1246 1311 412 467 8236 1311 413 1311 413 442 1271 1311 413 1311 413 442 1271 466 1247 466 1246 442 1271 442 1271 1311 413 442 8260 1311 413 1311 413 442 1271 1311 413 1311 414 441 1271 442 1271 465 1248 464 1249 465 1247 1310 414 441 8261 1334 390 1310 414 466 1247 1335 390 1333 391 465 1248 465 1248 465 1248 465 1248 465 1248 1334 390 465 8237 1334 391 1333 390 465 1248 1309 415 1309 416 464 1249 464 1249 463 1250 462 1275 438 1274 1307 394 438 8287 1283 441 1283 441 438 1274 1283 441 1283 442 436 1276 414 1299 438 1275 413 1300 412 1300 1282 442 413 8289 1282 443 1281 443 412 1301 1281 443 1281 443 412 1301 411 1302 411 1302 410 1327 385 1327 1255 469 386 8316 1255 470 1254 470 385 1327 1255 470 1254 470 385 1327 385 1328 384 1328 385 1328 385 1328 1254 470 385 8317 1253 471 1253 470 385 1329 1253 471 1253 471 384 1329 383 1330 382 1330 382 1330 383 1330 1252 473 382 8344 1226 498 1226 498 357 1356 1226 498 1226 498 356 1356 356 1356 356 1356 356 1356 356 1356 1226 499 355 8346 1224 499 1225 525 329 1384 1198 526 1198 525 329 1384 328 1384 328 1384 328 1384 329 1384 1198 526 328 8373 1198 526 1198 527 327 1385 1197 553 1171 553 301 1412 300 1412 300 1412 300 1386 327 1412 1170 554 299 8401 1170 554 1170 555 298 1414 1169 581 1143 582 271 1440 272 1440 272 1440 272 1441 271 1441 1142 609 244 8458 1113 636 1088 663 178 1507 1088 691 1033 -# TIMER OFF -name: TIMER +# Timer OFF +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 3583 1639 534 386 484 1208 534 386 484 386 485 386 484 387 483 386 484 386 485 386 457 394 476 394 451 419 452 419 476 1237 506 393 477 394 475 395 474 396 473 397 473 398 472 1270 472 399 471 1271 471 1270 471 399 470 401 469 1273 469 402 468 427 443 427 443 427 443 1299 443 427 443 427 444 427 444 427 444 1298 443 1299 442 427 444 427 445 426 445 425 446 425 447 424 447 399 472 398 473 1294 445 426 446 400 471 399 472 1294 446 425 447 398 473 1295 446 400 471 398 472 74544 3552 1672 472 399 471 1271 471 399 471 400 470 400 470 400 470 400 471 400 470 400 470 401 470 401 469 401 469 401 470 1273 470 400 470 401 469 401 469 401 470 401 469 401 470 1273 470 401 469 1273 470 1272 469 401 469 401 469 1274 468 401 469 401 469 401 470 402 469 1273 469 401 469 401 469 402 469 401 469 1273 469 1273 469 401 469 402 468 402 469 426 444 427 444 427 444 426 445 426 444 1274 468 402 469 426 444 427 443 1275 467 403 467 427 443 1275 467 402 468 427 443 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1366 388 1295 387 446 1164 1368 387 1296 387 448 1164 518 1164 493 1189 517 1165 492 1189 493 1189 493 7851 1365 387 1270 388 446 1190 1365 387 1295 387 447 1192 490 1193 489 1193 489 1194 488 1194 488 1193 489 7855 1337 386 1296 386 448 1193 1338 386 1296 386 448 1193 489 1193 489 1193 489 1193 489 1193 489 1193 489 7855 1337 386 1297 386 448 1194 1337 386 1296 386 448 1194 488 1194 488 1194 488 1194 488 1194 488 1194 488 8160 1336 387 1296 387 447 1194 1337 387 1296 386 448 1194 488 1194 488 1194 488 1194 488 1194 488 1194 488 7855 1336 386 1297 387 447 1195 1336 386 1297 386 448 1195 486 1195 487 1195 487 1195 487 1196 486 1196 486 7881 1310 387 1272 397 436 1245 1286 397 1285 397 436 1246 436 1246 436 1247 435 1247 435 1248 434 1248 434 7934 1259 424 1259 424 408 1274 1258 424 1259 424 408 1274 408 1274 408 1274 408 1274 408 1274 408 1274 408 8239 1258 425 1258 424 408 1274 1258 424 1258 425 407 1273 408 1273 409 1273 408 1273 408 1274 408 1273 408 7907 1283 424 1258 424 409 1248 1283 399 1283 400 433 1247 434 1247 434 1247 434 1247 434 1247 434 1247 434 7905 1282 424 1258 425 407 1273 1257 425 1257 425 407 1273 407 1274 407 1274 407 1274 407 1275 406 1275 406 7958 1230 478 1204 478 353 1328 1204 478 1204 453 378 1327 353 1328 353 1302 379 1301 380 1301 380 1300 381 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1341 337 1339 338 496 1178 1395 305 1316 337 1339 338 496 1178 526 1151 526 1151 1366 335 1341 335 498 7888 1338 338 1337 339 495 1182 1336 340 1336 340 1336 340 494 1182 494 1182 494 1183 1336 340 1336 340 494 7892 1336 340 1336 340 494 1183 1336 340 1336 340 1336 340 494 1183 494 1183 494 1183 1335 341 1335 340 494 7893 1335 341 1335 341 493 1183 1336 341 1335 341 1335 341 493 1183 493 1183 494 1183 1335 341 1335 341 493 7893 1335 341 1335 341 493 1184 1334 341 1335 341 1335 341 493 1184 493 1184 493 1184 1335 341 1335 342 492 7894 1334 342 1334 342 492 1184 1334 342 1334 341 1335 342 492 1184 493 1184 492 1185 1334 342 1334 342 492 7894 1334 342 1334 342 492 1185 1333 343 1333 342 1334 342 492 1185 492 1185 492 1185 1333 343 1333 343 491 7895 1333 343 1333 343 491 1185 1333 343 1333 344 1332 344 490 1186 490 1186 491 1186 1333 344 1332 344 490 7897 1331 368 1308 368 466 1211 1308 368 1308 368 1308 368 466 1211 465 1211 466 1211 1307 368 1308 369 465 7921 1307 368 1308 368 466 1211 1308 368 1308 369 1307 368 466 1211 466 1211 465 1211 1308 369 1307 369 465 7921 1307 369 1307 369 465 1212 1307 369 1307 369 1307 369 465 1212 465 1212 465 1212 1307 369 1307 369 465 7922 1306 370 1306 370 464 1212 1307 370 1306 370 1306 370 464 1212 464 1213 464 1212 1306 370 1306 370 464 7922 1306 370 1306 371 463 1213 1306 370 1306 371 1305 371 463 1213 439 1238 439 1238 1305 371 1305 371 462 7924 1280 396 1280 396 438 1238 1281 396 1280 396 1280 396 438 1239 437 1239 438 1239 1280 396 1280 397 437 7949 1279 397 1279 397 437 1240 1279 398 1278 422 1254 422 412 1265 411 1265 412 1265 1254 422 1254 422 412 7974 1254 422 1254 422 412 1265 1254 423 1253 423 1253 449 384 1293 383 1293 383 1294 1225 451 1225 452 382 8056 1171 505 1171 532 188 1463 1169 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 1349 364 1321 363 490 1219 1324 364 1294 389 463 1245 1324 363 462 1219 491 1221 462 1223 461 1226 484 8019 1292 393 1292 420 433 1252 1292 393 1292 420 433 1252 1292 393 460 1252 433 1252 460 1226 459 1252 433 8021 1317 393 1292 394 459 1226 1318 393 1292 394 458 1226 1318 394 432 1253 459 1226 459 1253 432 1253 459 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1376 337 1348 363 462 1219 1325 390 1295 388 1322 363 490 1218 466 1219 465 1220 490 1222 1319 369 1316 7187 1292 393 1292 393 460 1252 1292 370 1315 393 1292 420 433 1252 433 1252 460 1252 433 1252 1292 393 1292 7188 1291 393 1318 393 433 1252 1292 393 1319 393 1291 393 460 1226 459 1252 432 1253 459 1225 1319 393 1292 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 F3 00 00 command: 91 6E 00 00 # -name: TIMER +name: Timer type: parsed protocol: NECext address: 00 F3 00 00 command: 96 69 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9253 4427 684 486 656 486 656 486 682 461 681 1573 680 1575 678 464 677 491 651 1604 650 1604 650 1604 650 1604 650 491 651 491 651 1604 650 1604 651 491 651 491 651 1604 650 1604 650 491 651 491 651 491 652 1604 650 1604 651 1604 650 491 651 491 652 1604 650 1604 650 1604 651 491 651 39948 9250 2183 651 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9226 4450 657 484 657 484 658 484 657 485 657 1596 658 1597 681 487 653 488 653 1602 652 1602 652 1602 652 1602 652 490 652 490 652 1602 652 1602 652 490 652 490 652 490 652 1603 652 490 652 490 652 490 652 1602 652 1602 652 1602 653 1602 652 490 652 1602 652 1602 652 1602 653 489 653 39949 9250 2179 653 # OSC -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 9231 4449 657 484 658 483 659 483 659 483 659 1595 659 1595 659 485 681 461 680 1601 652 1602 653 1601 653 1601 653 488 654 488 654 1602 653 1601 653 488 654 488 654 1602 653 1602 652 1602 652 488 654 488 654 1602 653 1601 653 1602 652 488 654 488 654 488 654 1602 652 1602 653 488 654 39978 9229 2174 654 96468 9259 2146 679 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 9384 4452 658 485 657 484 658 484 659 485 657 1597 658 1597 682 487 655 488 654 1603 652 1603 653 1603 653 1604 653 491 653 491 653 1603 653 1603 653 1603 653 491 653 1604 652 490 654 1603 652 490 653 490 653 1603 652 490 653 1603 652 490 653 1603 652 490 653 1603 652 1603 652 490 653 39953 9263 2181 652 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 83 00 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 01 00 00 00 command: 87 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 01 00 00 00 command: 8B 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2256 695 788 1354 789 1349 789 1340 792 702 762 697 763 692 789 661 788 720 786 693 786 689 785 685 784 681 784 676 784 1334 784 1330 783 102265 2255 695 787 1356 786 1352 785 1348 785 681 783 676 783 671 784 666 784 724 784 696 783 691 784 686 784 681 783 676 784 1335 783 1330 783 # OSC -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2227 749 733 1382 761 1379 866 1292 841 566 898 591 868 588 866 582 760 1412 867 612 866 576 898 603 867 598 866 1256 759 695 867 1246 759 101611 2335 615 868 1245 899 1268 869 1266 867 566 898 591 760 694 761 689 760 1411 760 720 760 715 759 710 759 705 759 1363 760 696 758 1352 761 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2224 708 755 1419 757 1443 756 685 756 1470 757 709 758 710 784 657 836 708 756 763 785 1468 782 1444 755 737 756 712 754 1471 781 1419 780 101298 2250 656 778 1420 809 1391 753 686 755 1472 779 687 779 687 752 688 831 714 778 741 750 1502 776 1422 752 740 752 741 751 1448 751 1475 749 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2203 675 786 1388 867 1361 786 678 786 1444 758 708 759 707 760 707 786 735 757 760 786 735 757 736 781 711 757 734 759 733 785 734 758 101185 2198 708 757 1416 757 1442 756 685 755 1445 780 685 780 662 776 689 803 742 778 740 753 766 779 715 777 714 779 714 778 690 776 742 752 # StrengthUp -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2224 685 782 1419 808 1418 779 687 757 1470 757 710 757 684 809 657 809 736 758 1469 758 736 756 1470 757 762 755 1446 782 1418 781 712 755 101352 2223 707 758 1417 834 1392 781 685 781 1446 780 687 754 687 754 713 804 741 779 1447 779 715 778 1447 779 740 752 1448 778 1422 779 690 775 # StrengthDown -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2222 685 781 1419 808 1419 780 686 755 1447 781 684 783 686 780 686 807 1470 757 1470 756 1471 756 1497 756 1445 780 1447 780 1421 779 1421 754 101509 2250 684 777 1421 781 1444 754 687 754 1472 779 687 779 688 753 688 830 1448 777 1449 778 1448 752 1501 752 1450 773 1451 778 1422 778 1423 777 # -name: POWER +name: Power type: parsed protocol: NECext address: 41 59 00 00 command: 05 FA 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NECext address: 41 59 00 00 command: 44 BB 00 00 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1332 391 1303 359 485 1241 1304 391 1303 391 452 1242 452 1242 452 1243 451 1243 452 1243 452 1242 1303 7275 1303 391 1303 390 453 1240 1330 364 1328 366 477 1218 476 1218 476 1220 474 1220 474 1220 474 1220 1325 7252 1326 369 1325 369 475 1219 1325 369 1325 369 475 1219 475 1219 475 1219 475 1219 475 1219 475 1219 1326 7254 1326 369 1326 369 475 1219 1326 369 1326 369 475 1219 475 1220 475 1219 475 1219 475 1220 475 1220 1325 7256 1325 370 1325 370 474 1220 1325 370 1325 370 474 1220 475 1220 474 1220 474 1220 474 1221 474 1221 1324 7281 1301 370 1325 370 474 1220 1325 370 1324 370 474 1221 474 1221 473 1221 473 1221 473 1221 474 1220 1325 7256 1325 370 1324 371 473 1221 1324 370 1324 370 474 1221 473 1221 473 1220 474 1220 474 1220 474 1220 1324 7256 1324 371 1323 371 473 1221 1323 371 1323 371 473 1221 473 1221 473 1221 473 1221 473 1221 473 1221 1323 7256 1323 371 1323 371 473 1222 1322 372 1322 372 472 1222 472 1222 472 1222 472 1222 472 1222 472 1222 1322 7281 1297 372 1322 373 471 1246 1298 396 1298 397 447 1247 447 1247 447 1247 447 1247 447 1247 447 1247 1297 7281 1297 397 1297 397 447 1247 1297 397 1297 397 447 1247 447 1247 447 1247 447 1247 447 1248 446 1248 1296 7282 1296 398 1296 398 446 1248 1296 398 1296 398 447 1248 446 1248 446 1248 446 1247 447 1247 447 1248 1295 7281 1296 398 1296 398 446 1248 1296 399 1295 399 446 1248 446 1248 446 1248 446 1248 446 1248 446 1248 1296 7282 1296 399 1295 399 445 1248 1295 399 1295 399 445 1248 446 1249 444 1249 445 1249 445 1249 445 1249 1294 7282 1294 399 1295 400 444 1249 1295 399 1294 400 444 1250 444 1249 445 1250 444 1249 445 1250 444 1250 1294 7282 1294 400 1294 400 444 1250 1294 400 1294 401 443 1251 443 1250 444 1250 444 1250 444 1250 443 1251 1292 7284 1292 401 1293 402 442 1251 1292 402 1291 403 442 1276 418 1252 442 1276 418 1277 417 1277 417 1277 1242 7334 1268 427 1242 452 392 1302 1242 452 1242 452 392 1302 392 1302 392 1302 392 1302 391 1302 392 1302 1242 7335 1241 453 1240 453 391 1302 1241 453 1240 453 391 1303 390 1303 390 1303 390 1304 390 1303 391 1304 1240 7361 1216 479 1216 479 364 1330 1215 479 1215 480 363 1330 364 1330 364 1330 364 1330 364 1330 364 1330 1214 7362 1213 480 1214 480 363 1331 1213 481 1213 482 361 1332 362 1332 362 1331 363 1331 362 1332 362 1332 1212 7391 1185 508 1185 509 334 1359 1185 509 1184 509 334 1359 335 1359 334 1386 307 1386 307 1386 307 1386 1159 7445 1131 562 1131 616 196 1471 1104 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 2265 691 792 690 792 684 793 1342 821 1310 821 640 822 634 822 660 792 718 791 690 791 685 791 680 791 675 791 670 790 1330 789 662 788 99517 2230 723 760 721 760 715 761 1374 761 1368 762 699 762 694 762 689 762 747 761 719 761 715 761 710 761 705 761 701 760 1360 760 691 760 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 2312 617 867 641 840 577 899 1269 866 1265 865 622 839 593 864 612 838 670 839 1306 839 611 865 1271 864 627 839 1259 865 590 866 611 840 102129 2316 670 813 667 813 664 811 1323 810 1319 759 702 759 697 759 692 759 750 759 1386 758 717 759 1376 758 706 759 1365 759 696 759 691 760 # -name: SPEED- +name: Speed_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 2232 725 759 722 759 717 759 1375 760 1370 760 702 759 697 759 692 788 1384 788 1356 788 1351 788 1347 787 1342 787 1338 786 670 785 1330 784 99591 2229 724 760 721 785 690 785 1349 784 1345 784 677 783 673 782 669 781 1391 781 1363 781 1359 780 1353 781 1349 780 1343 781 675 780 1334 780 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 2230 724 760 720 761 715 761 1374 761 1370 760 701 760 696 760 691 786 1385 760 720 787 689 760 710 760 705 786 1339 785 670 785 665 784 98757 2224 729 754 726 755 721 754 1380 754 1375 754 706 754 701 754 696 754 1418 754 726 754 720 755 716 755 710 755 1369 755 700 755 696 755 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 2256 698 786 695 786 689 787 1348 787 1342 787 673 788 668 787 663 787 722 786 696 784 1353 786 1375 759 706 759 702 783 672 783 1332 782 102265 2310 645 838 668 812 664 811 1323 810 1319 810 651 809 647 808 642 808 701 807 673 807 1332 807 1327 807 658 808 653 807 648 807 1307 807 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1356 337 1423 337 516 1157 1298 409 1296 416 448 1274 451 1276 452 1274 450 1274 449 1277 449 1275 1301 7091 1301 407 1300 405 450 1267 1302 407 1301 414 450 1274 451 1275 451 1275 451 1276 450 1275 451 1274 1302 7074 1303 406 1302 406 450 1268 1301 409 1299 416 449 1277 472 1254 473 1253 473 1254 472 1254 473 1252 1323 7069 1325 384 1300 408 470 1247 1324 387 1299 417 471 1253 472 1254 472 1254 472 1254 472 1254 472 1252 1324 7052 1324 384 1300 408 472 1246 1324 387 1299 417 472 1253 472 1254 472 1254 472 1254 473 1254 472 1252 1324 7064 1325 385 1323 385 471 1246 1324 387 1323 394 471 1254 471 1254 472 1254 472 1254 472 1254 472 1252 1324 7053 1324 385 1323 385 471 1247 1323 387 1322 394 471 1254 472 1254 472 1255 471 1255 471 1255 472 1253 1323 7070 1323 385 1323 385 471 1247 1323 388 1322 395 470 1254 472 1255 471 1255 471 1255 471 1255 471 1253 1323 7054 1323 386 1322 386 470 1248 1322 413 1297 396 470 1255 470 1256 470 1256 470 1256 470 1256 471 1254 1322 7071 1322 411 1297 387 469 1249 1321 414 1296 396 470 1280 445 1281 446 1281 445 1282 445 1282 445 1280 1296 7076 1296 412 1296 412 444 1274 1297 413 1297 421 445 1281 445 1282 444 1282 444 1282 445 1282 444 1280 1296 7098 1295 412 1296 412 445 1275 1296 414 1296 421 445 1282 444 1282 445 1282 444 1283 444 1282 445 1280 1296 7082 1296 412 1296 412 445 1275 1295 414 1296 421 444 1282 444 1282 444 1283 444 1283 444 1282 445 1280 1296 7098 1296 413 1295 413 444 1275 1295 415 1295 422 444 1283 443 1282 444 1283 443 1282 445 1282 444 1281 1295 7082 1295 413 1295 413 444 1275 1295 415 1294 423 443 1283 443 1283 443 1283 443 1283 443 1283 443 1281 1294 7093 1295 413 1295 414 443 1276 1294 415 1295 423 443 1283 443 1283 443 1283 443 1283 444 1283 444 1280 1295 7082 1295 414 1294 414 443 1276 1294 416 1294 423 443 1283 443 1283 443 1283 443 1283 444 1283 444 1281 1294 7098 1295 414 1294 414 443 1276 1294 416 1294 424 442 1284 443 1283 443 1283 443 1284 443 1283 443 1281 1294 7083 1294 414 1294 415 442 1277 1293 417 1293 425 441 1284 442 1284 442 1284 442 1284 442 1284 443 1282 1293 7099 1294 415 1293 416 441 1278 1292 418 1292 425 441 1285 441 1285 441 1285 442 1285 441 1285 441 1283 1292 7083 1293 417 1291 441 415 1279 1292 443 1267 451 415 1286 440 1286 441 1286 440 1285 441 1286 440 1284 1291 7096 1292 441 1267 442 415 1304 1266 444 1266 451 415 1311 415 1287 439 1287 440 1311 415 1286 440 1285 1290 7085 1291 442 1241 467 414 1304 1266 445 1241 476 414 1313 414 1312 415 1311 415 1312 415 1312 414 1310 1241 7151 1242 467 1241 467 415 1305 1241 469 1241 477 412 1314 414 1312 414 1312 414 1312 414 1312 414 1310 1241 7135 1241 467 1241 468 389 1330 1241 470 1240 477 389 1337 389 1337 414 1312 414 1313 413 1313 389 1335 1241 7151 1241 469 1239 470 386 1331 1240 496 1214 503 362 1338 388 1338 388 1338 388 1338 388 1338 388 1336 1240 7130 1241 494 1214 495 361 1357 1214 497 1213 504 362 1364 362 1364 362 1364 363 1364 362 1364 362 1362 1214 7153 1239 495 1213 496 360 1358 1213 498 1212 531 334 1365 362 1365 361 1365 361 1365 362 1364 362 1363 1213 7162 1213 496 1212 522 334 1359 1212 524 1186 532 333 1367 359 1366 360 1366 361 1365 361 1365 361 1364 1211 7180 1212 523 1185 550 306 1387 1185 552 1157 586 278 1395 332 1394 332 1394 332 1393 333 1393 334 1391 1184 7190 1185 576 1131 604 250 1415 1158 660 1049 2341 251 1448 278 1422 305 1448 278 1448 278 1447 1130 7229 1157 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1357 353 1327 382 448 1239 1333 409 1301 416 477 1246 452 1274 452 1274 453 1273 479 1246 1330 416 448 7967 1300 409 1299 410 446 1273 1299 412 1298 419 446 1280 446 1281 446 1281 446 1281 446 1279 1298 419 446 7958 1298 411 1297 410 446 1273 1298 412 1298 419 446 1280 446 1281 445 1281 446 1281 445 1279 1298 419 446 7967 1298 410 1298 411 445 1274 1297 413 1297 420 445 1281 445 1281 445 1281 445 1282 445 1279 1298 420 445 7957 1297 411 1297 411 445 1274 1297 413 1297 420 445 1281 445 1281 445 1282 444 1282 444 1280 1296 420 445 7962 1297 411 1297 411 445 1274 1297 413 1297 420 445 1282 444 1282 444 1282 444 1282 444 1280 1297 421 444 7957 1296 412 1297 411 444 1275 1296 414 1296 421 444 1282 444 1283 443 1283 443 1282 444 1281 1296 421 444 7968 1296 412 1296 412 444 1275 1296 414 1296 421 444 1283 443 1283 443 1283 443 1283 443 1281 1296 422 443 7958 1295 413 1295 413 443 1276 1295 415 1295 422 443 1283 443 1284 442 1284 442 1284 442 1282 1294 422 443 7970 1293 414 1294 414 442 1277 1294 416 1294 423 442 1284 442 1309 417 1309 417 1309 417 1307 1269 424 441 7978 1270 416 1292 414 442 1302 1269 440 1270 424 441 1309 417 1309 417 1310 417 1309 417 1307 1270 448 417 7994 1269 439 1269 439 416 1302 1269 441 1269 448 416 1310 416 1310 416 1310 416 1310 416 1308 1269 448 416 7984 1269 439 1268 440 416 1303 1268 442 1267 449 415 1310 416 1310 416 1310 416 1310 416 1309 1268 449 416 7994 1268 440 1268 440 415 1303 1268 442 1268 449 415 1311 415 1311 415 1311 415 1311 415 1309 1267 450 415 7985 1267 441 1267 441 414 1304 1266 444 1267 450 414 1311 415 1312 413 1312 414 1312 414 1310 1265 452 414 7991 1266 442 1242 466 413 1306 1241 468 1242 475 414 1337 388 1338 388 1338 388 1338 388 1336 1217 501 386 8013 1215 492 1216 492 387 1331 1216 494 1216 501 363 1363 362 1363 363 1363 363 1363 387 1338 1215 502 362 8047 1215 493 1215 492 363 1356 1215 495 1215 502 362 1364 361 1364 362 1364 362 1364 362 1363 1214 503 361 8063 1189 494 1214 494 361 1382 1189 496 1214 503 361 1390 335 1391 335 1391 335 1391 335 1389 1188 529 335 8074 1188 520 1188 520 334 1385 1187 522 1187 529 334 1392 333 1417 308 1418 308 1419 307 1417 1161 556 307 8092 1160 547 1161 547 307 1412 1160 550 1160 557 306 1419 306 1446 279 1421 305 1446 279 1445 1133 584 279 8125 1133 575 1133 576 277 1466 1106 603 1107 611 251 1474 251 1501 224 1502 224 1528 186 1511 1079 638 224 8228 1025 735 972 2640 786 # -name: SPEED+ +name: Speed_up type: parsed protocol: NEC address: 01 00 00 00 command: 1A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 1D 00 00 00 # -name: ROTATE +name: Rotate type: parsed protocol: NEC address: 01 00 00 00 command: 18 00 00 00 # -name: TIMER +name: Timer type: parsed protocol: NEC address: 01 00 00 00 command: 0D 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 DE 00 00 command: 00 FF 00 00 # -name: SPEED+ +name: Speed_up type: parsed protocol: NECext address: 80 DE 00 00 command: 08 F7 00 00 # -name: SPEED- +name: Speed_dn type: parsed protocol: NECext address: 80 DE 00 00 command: 10 EF 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 4640 4393 562 1442 562 1443 562 1443 537 1470 535 1468 562 1444 562 2398 562 1444 562 1446 560 2424 535 1470 535 2425 534 1472 533 1473 533 2427 533 1474 531 1473 4577 4456 531 1473 531 1474 532 1474 531 1474 532 1474 531 1474 531 2429 531 1474 531 1474 531 2429 531 1474 531 2429 531 1474 531 1474 531 2429 531 1474 531 14007 9125 2259 530 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 4609 4425 563 1441 563 1442 563 1442 538 1469 537 1469 561 1444 562 2400 560 1470 535 1470 536 1470 536 2424 536 1470 535 1471 534 1472 533 2427 533 2427 533 1472 4580 4454 531 1472 533 1474 532 1474 531 1474 532 1474 532 1474 532 2428 532 1474 532 1474 532 1474 532 2428 532 1474 532 1474 532 1474 532 2428 532 2429 532 14008 9127 2258 528 50213 9131 2253 532 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 data: 4607 4424 563 1441 563 1443 563 1444 536 1469 537 1469 537 1496 534 2399 561 1470 535 2424 536 1470 536 1470 535 2424 535 1471 534 1472 534 1472 533 2427 533 1472 4579 4455 531 1472 532 1474 532 1474 532 1474 532 1474 532 1474 532 2429 531 1474 532 2428 532 1474 532 1474 532 2429 532 1474 532 1474 532 1474 532 2428 532 14007 9125 2258 530 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 4604 4427 561 1442 562 1443 561 1444 537 1469 536 1469 562 1445 561 2399 560 1446 559 2424 534 1472 533 2426 533 1473 532 2428 531 1475 531 1474 531 1474 531 1473 4575 4457 530 1473 531 1475 531 1475 530 1475 531 1475 531 1475 530 2429 531 1475 530 2429 530 1475 530 2430 530 1475 530 2429 531 1475 531 1475 531 1475 530 14008 9122 2260 530 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 4582 4424 562 1442 562 1471 534 1471 509 1496 510 1496 534 1472 534 2424 536 1470 536 1470 536 1470 536 1470 535 2424 535 2425 534 2426 534 1472 533 1473 533 1472 4581 4453 532 1472 532 1473 533 1473 533 1473 533 1473 533 1473 533 2428 532 1473 532 1473 532 1474 532 1474 532 2428 533 2428 532 2428 532 1474 532 1474 532 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1369 311 1327 312 498 1162 1286 355 1285 362 457 1221 458 1221 458 1221 458 1222 457 1221 458 1219 1312 6796 1310 330 1282 356 454 1219 1281 360 1280 367 452 1227 452 1227 452 1227 452 1227 452 1227 452 1225 1280 6815 1280 359 1279 359 451 1220 1280 361 1279 368 451 1228 451 1228 451 1228 451 1228 451 1228 451 1226 1279 6827 1279 382 1256 382 428 1245 1255 384 1256 391 427 1251 428 1252 426 1252 427 1252 427 1252 427 1250 1255 6838 1255 383 1255 383 426 1245 1255 385 1255 392 426 1252 427 1252 426 1252 426 1252 427 1252 426 1250 1255 6849 1255 383 1255 383 426 1245 1255 385 1254 392 426 1252 426 1252 426 1252 426 1252 426 1252 426 1250 1254 6835 1254 383 1254 383 426 1245 1254 385 1254 392 426 1252 426 1252 426 1252 426 1252 426 1252 426 1250 1254 6852 1254 383 1254 384 425 1245 1254 386 1253 392 426 1253 425 1252 426 1252 426 1253 425 1253 425 1251 1253 6835 1253 384 1253 384 425 1245 1253 386 1253 393 425 1252 425 1253 425 1253 425 1253 425 1253 425 1251 1253 6852 1252 384 1253 384 425 1246 1252 386 1253 393 425 1253 424 1253 425 1253 425 1254 424 1253 425 1252 1252 6835 1253 385 1252 385 424 1247 1252 387 1252 394 424 1254 424 1254 424 1254 424 1254 424 1254 424 1252 1251 6850 1251 386 1251 386 423 1248 1251 388 1250 395 423 1255 422 1256 422 1279 399 1280 398 1279 399 1277 1227 6862 1226 411 1226 411 398 1273 1226 413 1226 420 397 1280 398 1279 398 1280 397 1280 398 1280 398 1278 1226 6892 1226 411 1225 411 397 1273 1225 413 1225 420 397 1280 397 1280 398 1280 397 1280 397 1280 397 1279 1224 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1308 332 1305 332 479 1190 1309 333 1307 364 455 1199 479 1198 481 1198 480 1198 480 1197 1331 339 480 7657 1306 332 1305 332 479 1194 1304 335 1305 342 478 1201 477 1201 478 1201 477 1201 478 1199 1305 342 478 7647 1305 333 1304 333 478 1194 1304 335 1304 342 477 1201 477 1201 478 1201 477 1201 477 1199 1305 342 478 7660 1303 334 1304 333 478 1194 1304 336 1303 343 477 1202 477 1202 476 1202 477 1202 476 1200 1304 343 477 7647 1303 334 1304 334 476 1195 1303 336 1303 343 476 1202 476 1202 476 1202 476 1202 476 1200 1303 343 476 7659 1302 335 1302 335 476 1196 1302 337 1302 344 475 1203 475 1203 475 1203 475 1203 475 1201 1302 344 476 7646 1302 335 1300 338 474 1197 1300 338 1301 345 474 1204 474 1204 474 1204 449 1229 449 1227 1275 370 449 7690 1275 362 1275 361 449 1222 1275 364 1275 371 448 1230 448 1230 448 1231 447 1232 446 1229 1274 372 447 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1338 312 1380 310 446 1133 1313 356 1284 362 457 1221 457 1219 1285 363 456 1221 457 1222 482 1196 482 7655 1282 356 1281 357 453 1219 1279 360 1279 367 452 1226 452 1224 1280 367 452 1226 452 1226 452 1226 452 7671 1279 358 1279 358 452 1219 1279 360 1279 367 452 1227 451 1225 1279 367 451 1227 451 1227 451 1227 451 7682 1279 359 1278 359 451 1220 1278 361 1278 368 451 1227 450 1225 1278 368 451 1227 451 1228 450 1228 450 7691 1277 360 1277 360 450 1221 1277 362 1277 368 450 1228 449 1226 1277 369 449 1229 449 1252 426 1252 426 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1338 311 1326 312 497 1134 1364 311 1276 361 457 1221 457 1220 457 1218 1283 361 456 1221 456 1221 457 7676 1285 351 1285 351 457 1213 1286 353 1285 360 457 1220 457 1220 457 1219 1285 361 456 1221 456 1222 481 7639 1283 353 1284 353 455 1216 1283 356 1282 363 454 1223 455 1223 454 1221 1283 363 454 1223 454 1223 454 7676 1282 354 1282 354 454 1217 1282 356 1282 364 453 1223 454 1223 454 1221 1282 363 454 1224 453 1224 454 7681 1281 355 1281 355 453 1217 1281 357 1281 364 453 1225 452 1225 452 1222 1281 365 452 1225 452 1225 452 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 3565 3379 984 2506 984 2505 985 797 900 2590 900 2590 926 2572 926 826 925 829 922 858 894 859 894 858 895 2604 894 859 894 859 894 2596 894 859 894 859 894 867 894 2596 894 2596 894 2596 894 2596 894 2596 894 867 894 40343 3530 3468 895 2596 894 2596 894 859 894 2596 894 2596 894 2604 894 859 894 859 894 859 894 859 894 859 894 2604 894 859 894 859 894 2596 894 859 894 859 894 867 894 2596 894 2596 894 2596 894 2596 895 2596 894 866 895 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 3595 3377 930 2561 929 2561 929 853 900 2591 899 2590 900 2597 901 2590 925 2565 924 2567 922 2570 920 2596 894 866 895 858 895 858 895 2596 894 858 895 859 894 866 895 858 895 858 895 858 895 859 894 858 895 2604 894 40343 3533 3467 895 2595 895 2596 894 858 895 2596 894 2596 894 2604 895 2596 894 2596 894 2596 894 2596 894 2596 894 867 894 859 894 859 894 2596 894 859 894 859 894 867 894 859 894 859 894 859 894 859 894 859 894 2605 893 40319 3533 3442 920 2595 895 2596 894 858 895 2596 894 2596 894 2604 894 2596 894 2596 894 2596 894 2596 894 2596 894 867 894 859 894 859 894 2596 894 859 894 859 894 867 894 859 894 859 894 859 894 859 894 859 894 2604 894 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 3594 3380 981 2505 930 2560 930 853 900 2590 900 2590 900 2598 900 2589 900 853 924 2568 921 2571 919 2596 894 867 894 859 894 859 894 2596 894 859 894 859 894 867 894 859 894 2596 894 859 894 859 894 859 894 2604 894 40335 3532 3467 895 2596 894 2596 895 859 894 2596 894 2596 894 2605 894 2596 894 859 894 2596 894 2597 894 2596 894 867 894 859 894 859 894 2596 894 859 894 859 894 867 894 859 894 2597 894 859 894 859 894 859 894 2605 893 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 3534 3439 954 2505 985 2535 955 798 954 2535 899 2591 899 2599 899 853 925 2566 924 2567 922 2596 894 2596 894 867 894 859 894 860 893 2597 894 859 894 859 894 867 894 2597 893 859 894 859 894 860 893 859 894 2605 894 40336 3531 3469 894 2597 893 2597 893 859 894 2597 893 2597 893 2605 893 860 893 2597 893 2597 893 2597 894 2597 893 868 893 860 893 860 893 2597 893 860 893 860 893 868 893 2597 893 860 893 860 893 860 893 860 893 2605 893 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 1A 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 1370 314 1375 320 519 1167 1370 322 1339 350 465 1221 467 1222 467 1222 466 1221 467 1221 467 1221 1317 7067 1317 372 1341 349 491 1198 1340 352 1337 353 486 1202 486 1226 462 1226 462 1227 461 1227 462 1227 1311 7073 1312 378 1311 378 462 1227 1311 378 1312 378 462 1227 462 1227 461 1227 462 1227 461 1227 461 1227 1311 7074 1311 378 1311 378 462 1227 1311 379 1310 379 461 1228 461 1228 460 1228 460 1228 460 1229 459 1228 1310 7076 1309 381 1309 380 460 1229 1310 381 1309 381 458 1230 458 1230 459 1230 459 1230 459 1230 458 1230 1309 7077 1309 380 1310 380 460 1229 1310 380 1310 380 459 1229 460 1229 459 1229 460 1229 459 1229 459 1229 1310 7075 1310 379 1310 380 459 1229 1310 380 1310 379 460 1229 460 1229 459 1229 460 1228 460 1229 459 1229 1310 7074 1310 380 1310 379 460 1229 1310 379 1310 379 460 1229 459 1229 459 1229 460 1229 460 1229 460 1228 1311 # -name: SPEED+ +name: Speed_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 1394 321 1369 321 520 1141 1397 321 1368 321 519 1142 495 1194 495 1194 494 1195 494 1195 1366 351 491 7891 1341 350 1337 353 487 1201 1337 354 1336 354 487 1202 487 1202 487 1202 487 1202 487 1202 1336 354 487 7900 1336 354 1337 354 486 1202 1337 354 1336 354 487 1202 487 1202 487 1203 486 1202 487 1202 1336 354 487 7901 1335 354 1336 354 487 1203 1335 354 1336 355 486 1203 486 1203 486 1203 486 1203 486 1203 1335 355 486 7900 1335 355 1335 355 486 1203 1335 355 1335 355 486 1203 486 1204 485 1204 485 1204 485 1203 1335 356 485 7900 1334 356 1334 356 485 1204 1334 356 1334 356 485 1204 485 1204 484 1204 485 1204 485 1204 1333 357 484 7901 1333 357 1333 380 460 1228 1310 380 1310 380 460 1228 460 1228 460 1228 460 1228 460 1228 1310 380 460 7924 1309 380 1310 380 460 1229 1309 380 1310 380 460 1229 459 1229 460 1229 459 1230 459 1230 1309 381 458 # -name: ROTATE +name: Rotate type: raw frequency: 38000 duty_cycle: 0.330000 data: 1343 372 1318 372 467 1194 1346 372 1318 372 467 1193 525 1164 1400 319 495 1166 523 1166 523 1167 521 7890 1344 347 1340 350 489 1200 1339 351 1339 351 488 1201 488 1201 1338 351 488 1201 488 1201 488 1201 488 7899 1338 352 1338 352 487 1201 1339 352 1338 352 488 1201 488 1201 1339 352 487 1202 487 1201 488 1201 488 7899 1338 352 1338 352 487 1201 1338 352 1338 352 487 1202 487 1202 1337 353 486 1202 487 1202 487 1202 487 7900 1337 353 1337 353 486 1202 1338 353 1337 353 486 1202 487 1202 1338 353 486 1202 487 1202 487 1202 487 7900 1337 353 1337 353 486 1203 1336 354 1336 354 485 1203 486 1204 1335 354 485 1203 485 1203 486 1203 486 7901 1336 378 1312 355 484 1205 1335 378 1312 378 461 1227 462 1227 1313 378 461 1228 461 1228 461 1228 461 7925 1312 378 1312 378 461 1228 1311 378 1312 378 461 1228 461 1228 1312 378 461 1228 461 1228 461 1228 461 # -name: TIMER +name: Timer type: raw frequency: 38000 duty_cycle: 0.330000 data: 1370 319 1371 321 519 1167 1371 322 1366 324 488 1198 466 1222 466 1222 1317 375 464 1221 467 1220 468 7915 1317 372 1341 350 490 1197 1340 376 1313 377 462 1226 462 1226 462 1226 1312 377 462 1226 462 1226 462 7921 1312 377 1313 377 462 1226 1312 377 1312 377 462 1226 462 1226 462 1226 1312 378 462 1226 462 1226 462 7922 1312 377 1313 377 462 1226 1313 377 1312 377 462 1226 462 1226 462 1226 1313 377 462 1226 462 1226 462 7921 1312 377 1312 377 462 1226 1312 377 1313 377 462 1226 462 1226 462 1226 1312 377 462 1226 462 1226 462 7921 1312 377 1313 377 462 1226 1313 377 1312 354 485 1202 486 1202 486 1202 1337 352 487 1202 487 1201 487 7897 1337 352 1337 351 488 1200 1339 351 1339 352 487 1201 487 1201 488 1201 1338 352 487 1201 487 1201 488 7896 1338 352 1337 352 487 1201 1337 352 1337 352 487 1201 487 1201 487 1201 1338 352 487 1201 487 1201 487 # -name: MODE +name: Mode type: raw frequency: 38000 duty_cycle: 0.330000 diff --git a/assets/resources/infrared/assets/projectors.ir b/assets/resources/infrared/assets/projectors.ir index 43c3723ef6..673120e616 100644 --- a/assets/resources/infrared/assets/projectors.ir +++ b/assets/resources/infrared/assets/projectors.ir @@ -4,908 +4,908 @@ Version: 1 # Last Checked 17th May, 2023 # # ON -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 310 27591 171 27662 241 27731 307 27575 107 27749 306 27551 130 55520 243 27614 217 55584 129 27743 119 27756 115 27747 163 27712 308 27502 243 27650 217 27732 175 27693 167 27698 166 27689 171 27622 215 27712 133 27658 216 27716 129 27732 162 27698 305 27571 131 27753 310 27570 170 27707 162 27707 175 10960 9194 4518 618 542 618 543 725 434 672 1623 671 1647 646 514 592 568 592 568 592 1702 592 568 592 567 593 1702 592 568 618 1676 618 1676 618 1676 618 543 617 543 617 543 617 1677 617 544 616 544 616 544 616 544 616 1678 616 1678 616 1678 616 544 616 1678 616 1679 615 1678 616 1678 616 40239 9196 2250 617 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 08 00 00 00 command: 48 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 08 00 00 00 command: 49 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 08 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 08 00 00 00 command: 0B 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 40 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 48 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 44 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 30 00 00 command: 83 7C 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 30 00 00 command: 82 7D 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 08 13 00 00 command: 87 78 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9055 4338 672 1551 669 1553 618 1603 619 481 617 482 616 481 617 507 591 1605 645 479 619 1577 645 1578 644 1578 644 479 619 480 618 1581 641 480 617 1605 617 1606 616 1606 615 483 615 1608 614 484 614 484 614 484 614 484 614 484 614 484 614 1609 614 484 614 1609 614 1609 613 1609 613 40058 9000 2068 614 95467 9022 2068 614 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 87 4E 00 00 command: 29 D6 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 87 4E 00 00 command: 08 F7 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 87 4E 00 00 command: 04 FB 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 83 55 00 00 command: 93 6C 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 02 00 00 00 command: 15 00 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9032 4462 598 501 627 1604 627 530 598 531 677 423 706 422 706 421 707 451 677 1554 677 451 598 1633 598 1634 597 1634 598 1634 598 1634 625 1606 681 1550 626 502 598 530 599 529 600 1632 600 528 600 528 601 528 601 528 601 1631 600 1631 625 1607 625 504 625 1607 624 1608 624 1608 623 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 02 00 00 00 command: 02 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 02 00 00 00 command: 1D 00 00 00 # # ON -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9096 4436 620 505 647 478 648 501 623 1599 647 1624 623 502 623 503 621 504 619 1628 618 507 617 507 617 1630 617 508 616 1630 617 1630 617 1631 616 508 616 508 617 508 616 1631 616 508 617 508 617 508 616 508 616 1630 616 1630 616 1631 616 508 616 1630 617 1630 617 1630 617 1631 617 509 616 508 616 509 616 509 616 509 616 509 615 509 616 508 617 1631 616 1631 615 1631 616 1631 616 1631 616 1631 616 1631 615 1631 616 14435 9093 2186 615 96359 9095 2184 617 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9091 4465 594 530 595 530 594 530 594 1651 595 1652 595 529 621 504 620 504 619 1628 618 507 617 508 616 1631 616 509 615 1631 616 1631 616 1632 615 509 616 509 616 509 615 1631 616 509 616 508 616 1631 616 509 616 1631 615 1631 616 1631 617 508 616 1631 616 1631 616 508 616 1631 617 508 617 509 616 509 616 509 616 509 616 509 616 509 616 509 616 1631 616 1631 616 1631 616 1631 616 1631 615 1631 615 1631 615 1631 616 14435 9090 2190 615 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9092 4439 620 506 619 506 618 530 593 1627 620 1630 643 504 620 505 618 506 617 1630 617 508 616 508 616 1632 616 508 617 1631 616 1631 616 1631 616 1631 616 509 616 508 616 1631 616 509 616 509 615 1632 616 509 616 508 616 1631 616 1631 616 508 616 1631 615 1631 616 509 615 1632 615 509 616 509 616 509 616 509 616 509 616 510 615 509 616 509 616 1631 616 1631 615 1631 616 1631 615 1631 615 1631 615 1631 615 1631 615 14434 9088 2191 615 96339 9115 2189 616 96343 9117 2189 616 96343 9114 2189 616 -# AV-MUTE -name: MUTE +# AV-Mute +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9092 4439 620 506 618 506 618 530 594 1627 619 1629 643 505 619 505 619 506 617 1629 617 508 616 508 616 1631 616 508 616 1630 616 1630 616 1630 617 1630 616 1630 616 1631 616 508 616 508 616 508 616 1631 616 508 617 508 616 508 616 508 616 1630 616 1631 615 1631 616 508 616 1631 616 508 617 508 616 509 615 509 616 508 616 509 615 509 616 508 616 1631 615 1631 615 1631 616 1631 615 1631 615 1631 615 1631 615 1631 616 14433 9088 2191 615 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9014 4332 661 1570 661 471 660 473 658 474 657 476 655 498 633 498 634 502 633 499 633 1599 632 1599 632 1599 632 1599 632 1599 632 1600 631 1603 632 500 632 501 631 501 631 501 631 501 631 501 631 1601 631 504 631 1601 631 1601 631 1601 631 1601 631 1601 630 1601 630 501 631 1601 631 38177 8983 2149 630 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 4C 00 00 00 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9042 4306 690 1541 665 468 664 468 664 469 663 470 662 471 660 495 636 499 636 497 634 1597 634 1598 633 1598 633 1599 633 1599 632 1599 633 1603 632 1599 633 499 633 499 633 500 632 499 633 500 632 1600 632 503 633 500 632 1600 632 1600 632 1600 633 1600 632 1600 632 500 632 1600 632 37912 8986 2145 633 # ON -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 3522 1701 472 426 444 1269 472 426 444 426 443 427 443 427 443 426 444 427 443 426 444 427 442 428 441 429 440 431 438 1304 437 433 437 433 438 433 437 433 437 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 1305 436 434 436 434 436 1305 436 435 435 435 435 435 435 435 435 435 435 435 435 435 435 459 411 459 411 459 411 1330 411 1330 411 1330 411 1330 411 1330 411 460 410 459 411 459 411 1330 411 1330 411 460 410 1330 411 1330 411 1331 410 1330 411 74392 3516 1736 436 433 437 1304 437 433 437 433 437 433 437 433 437 433 437 434 436 433 437 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 435 435 1305 436 435 435 435 435 1306 435 435 435 435 435 435 435 436 434 436 434 436 434 435 435 436 434 436 434 436 434 1330 411 1331 410 1330 411 1330 411 1330 411 459 411 460 410 460 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74392 3515 1736 437 433 437 1304 437 433 437 433 437 434 436 433 437 434 436 433 437 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 435 436 434 436 1306 435 435 435 435 435 1306 435 435 435 435 435 435 435 435 435 435 435 436 434 436 434 435 435 436 434 435 435 1306 435 1330 411 1307 434 1331 410 1308 433 436 434 436 434 460 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74392 3515 1736 437 433 437 1304 437 434 436 433 437 434 436 433 437 434 436 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 435 435 434 436 434 436 434 436 434 436 434 436 1306 435 435 435 435 435 435 435 1306 435 435 435 436 434 1306 435 435 435 436 434 436 434 435 435 436 434 436 434 460 410 460 410 460 410 460 410 1331 410 1331 410 1331 410 1331 410 1331 410 460 410 460 410 460 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74392 3515 1736 437 433 437 1304 437 433 437 434 436 434 436 433 437 434 436 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 434 436 434 436 434 436 435 435 435 435 434 436 1306 435 434 436 435 435 435 435 1306 435 436 434 435 435 1306 435 435 435 436 434 436 434 436 434 436 434 460 410 437 433 459 411 460 410 460 410 1331 410 1331 410 1331 410 1331 410 1331 410 460 410 460 410 460 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74393 3514 1736 437 434 436 1304 437 433 437 434 436 433 437 434 436 433 437 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 434 436 435 435 434 436 434 436 435 435 434 436 1305 436 435 435 435 435 435 435 1306 435 435 435 435 435 1306 435 435 435 436 434 435 435 459 411 436 434 435 435 459 411 459 411 459 411 459 411 1330 411 1306 435 1330 411 1330 411 1331 410 460 410 460 410 460 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 # ON -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 529 7218 126 6585 219 703 180 5362 427 18618 177 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9069 4362 622 486 621 487 621 491 622 1608 623 1603 622 487 621 487 621 491 622 1604 621 487 622 491 622 1604 621 491 622 1608 622 1609 621 1604 622 486 622 487 621 491 621 1605 621 487 621 491 622 1604 622 491 621 1609 621 1609 621 1604 622 491 621 1609 622 1604 621 491 621 1604 622 487 621 487 622 486 622 487 621 488 621 487 621 488 620 491 621 1609 622 1609 620 1609 621 1609 621 1609 621 1609 621 1609 621 1618 621 14330 9047 2137 620 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9047 4362 621 486 622 463 645 490 622 1609 622 1604 622 487 620 487 621 491 622 1604 622 484 625 490 621 1605 649 463 621 1609 620 1611 621 1608 622 1605 621 486 622 491 622 1604 621 487 621 492 620 1604 621 488 621 492 620 1609 622 1604 621 492 622 1609 620 1605 621 491 622 1603 622 488 621 488 620 488 620 488 621 488 620 487 622 485 621 492 596 1635 621 1609 622 1585 643 1611 620 1608 621 1610 619 1611 620 1619 619 14332 9074 2109 647 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9073 4336 648 461 647 484 624 489 623 1607 623 1603 622 486 622 486 622 491 622 1604 621 487 621 491 622 1604 622 491 621 1609 621 1609 621 1609 621 1608 622 1609 621 1604 621 486 622 486 622 491 622 1604 622 486 622 487 621 487 621 491 622 1608 622 1609 621 1604 622 491 621 1604 621 487 621 486 622 487 621 487 621 487 621 487 621 487 621 491 622 1608 622 1608 622 1609 621 1608 622 1608 622 1608 622 1609 621 1617 622 14330 9047 2137 620 # ON -name: POWER +name: Power type: parsed protocol: NECext address: 83 F4 00 00 command: 4F B0 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 19 00 00 command: 10 EF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 80 19 00 00 command: 1C E3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 80 19 00 00 command: 46 B9 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 51 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 40 40 00 00 command: 0A F5 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 30 00 00 command: 4E B1 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 30 00 00 command: 0E F1 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 30 00 00 command: 0D F2 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 30 00 00 command: 4F B0 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 30 00 00 command: 14 EB 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 08 16 00 00 command: 87 78 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 08 16 00 00 command: C8 37 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 01 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 02 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 28 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 29 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 84 F4 00 00 command: 0B F4 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 33 00 00 00 command: 00 FF 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 33 00 00 00 command: 1E E1 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 33 00 00 00 command: 1D E2 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 33 00 00 00 command: 0B F4 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 55 00 00 command: 90 6F 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 83 55 00 00 command: 99 66 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 83 55 00 00 command: 98 67 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 DF 00 00 command: 1C E3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 DF 00 00 command: 4F B0 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 DF 00 00 command: 4B B4 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 32 00 00 00 command: 02 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 32 00 00 00 command: 2E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 32 00 00 00 command: 52 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 20 00 00 00 command: 41 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 51 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 56 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 5A 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC15 address: 54 00 00 00 command: 15 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 83 F4 00 00 command: 82 7D 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 83 F4 00 00 command: 83 7C 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 83 F4 00 00 command: 14 EB 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 31 00 00 00 command: 91 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 31 00 00 00 command: 90 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 31 00 00 00 command: D0 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 31 00 00 00 command: 89 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 86 00 00 00 command: 00 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 86 00 00 00 command: 30 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 86 00 00 00 command: 31 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 86 00 00 00 command: 32 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 30 00 00 00 command: 00 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 87 4E 00 00 command: 0D 00 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9032 4479 597 560 572 558 564 566 566 1666 589 1671 594 562 570 560 562 568 564 1669 596 560 562 568 564 1669 596 560 562 1671 594 1666 588 1671 594 562 570 560 562 568 564 1669 596 560 562 568 564 566 566 563 569 1664 591 1669 596 1664 590 565 567 1667 598 1661 593 1666 588 1671 594 562 570 560 562 568 564 565 567 563 569 560 562 568 564 565 567 1666 588 1671 594 1665 589 1670 595 1665 590 1669 596 1664 590 1668 597 13983 9029 2222 599 96237 9030 2221 589 96244 9034 2217 594 96244 9033 2218 592 96249 9038 2213 597 96239 9037 2214 596 96238 9028 2223 598 96221 9032 2215 595 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9034 4482 593 563 569 561 571 559 563 1698 566 1694 570 559 563 568 564 566 566 1695 569 560 572 559 563 1671 593 563 569 1692 562 1671 593 1693 571 558 564 567 565 565 567 1693 571 532 590 567 565 1695 569 560 562 1698 566 1694 570 1663 591 539 593 1693 571 1688 566 564 568 1691 563 567 565 565 567 563 569 561 571 559 563 567 565 565 567 563 569 1690 564 1695 569 1691 563 1696 568 1691 563 1697 567 1692 562 1697 567 13988 9030 2223 597 96250 9035 2219 591 96245 9032 2221 589 96240 9038 2215 595 96235 9033 2220 590 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9028 4482 593 563 569 561 571 558 564 1696 568 1690 564 566 566 563 569 561 571 1688 566 563 569 561 571 1688 566 563 569 1690 564 1695 569 1689 565 1668 596 560 562 568 564 1695 569 560 562 568 564 1695 569 560 562 568 564 1695 569 1690 564 566 566 1692 572 1687 567 563 569 1690 564 566 566 564 568 562 570 559 563 567 565 565 567 562 570 560 562 1696 568 1665 589 1670 594 1665 589 1670 594 1664 590 1669 647 1612 590 13987 9031 2220 590 96223 9033 2217 593 96223 9034 2218 592 96225 9032 2219 591 96221 9087 2164 595 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9031 4479 596 560 572 558 564 566 566 1693 571 1688 566 563 569 561 571 559 563 1696 568 561 571 559 563 1697 567 562 570 1689 565 1694 570 1688 566 1693 571 1661 593 1693 571 558 564 566 566 564 568 1691 563 541 591 564 568 562 570 560 562 1697 567 1692 562 1696 568 562 570 1689 565 564 568 561 571 559 563 567 565 564 568 562 570 560 562 567 565 1694 570 1689 565 1694 570 1688 566 1693 571 1688 566 1693 571 1662 592 13987 9031 2220 590 96231 9034 2217 593 96234 9030 2222 588 96247 9037 2215 595 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 32 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 32 00 00 00 command: 14 00 00 00 # OFF -name: POWER +name: Power type: parsed protocol: NECext address: 83 F4 00 00 command: 4E B1 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 03 00 00 00 command: 1D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 03 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 03 00 00 00 command: 15 00 00 00 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9075 4307 677 433 675 456 651 461 651 1579 650 1576 649 459 649 460 648 465 648 1578 647 461 622 491 622 1604 647 465 647 1583 622 1608 647 1579 647 461 647 466 622 1604 647 465 647 1579 647 461 645 463 648 465 648 1583 646 1580 646 466 647 1579 622 491 647 1583 622 1608 647 1579 647 461 647 461 622 486 622 486 647 461 647 462 646 462 622 491 646 1584 622 1608 647 1584 621 1608 647 1583 646 1584 647 1584 646 1592 622 14330 9047 2137 621 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 07 00 00 00 command: E6 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 07 00 00 00 command: 07 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 07 00 00 00 command: 0B 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 07 00 00 00 command: 0F 00 00 00 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 3523 1701 472 426 444 1269 472 426 444 426 442 429 443 427 443 426 444 426 444 426 443 427 442 429 440 430 439 432 438 1304 437 433 437 432 438 432 438 433 437 433 437 433 437 433 437 433 437 433 437 1304 437 433 437 433 437 433 437 1304 437 433 437 433 437 1304 437 433 437 434 436 433 437 434 436 434 436 434 436 433 437 433 437 434 436 1304 437 1305 436 1305 436 1305 436 1305 436 1305 436 434 436 434 436 1305 436 1305 436 1305 436 434 436 1305 436 1305 436 1306 435 1306 435 74393 3515 1736 437 433 437 1304 437 433 437 433 437 433 437 433 437 433 437 433 437 433 437 434 436 433 437 434 436 434 436 1304 437 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 1305 436 434 436 434 436 1306 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 436 434 435 435 1307 434 1331 410 1307 434 1307 434 1330 411 1307 434 460 410 460 410 1331 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74393 3515 1736 437 433 437 1304 437 433 437 433 437 433 437 433 437 433 437 433 437 433 437 434 436 434 436 433 437 433 437 1304 437 434 436 434 436 434 437 434 436 434 436 434 436 434 436 434 436 434 436 1305 436 434 436 434 436 434 436 1305 436 435 435 434 436 1305 436 434 436 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1307 434 1306 435 1307 434 1307 434 1307 434 1331 410 460 410 460 410 1331 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 74393 3515 1736 437 433 437 1304 437 433 437 433 437 433 437 433 437 433 437 433 437 433 437 433 437 433 437 434 436 433 437 1304 437 433 437 434 436 434 436 434 436 434 436 434 436 434 436 434 436 434 437 1305 436 434 436 434 436 434 436 1305 436 434 436 434 436 1306 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 435 1307 434 1330 411 1330 411 1330 411 1330 411 1330 411 460 410 460 410 1331 410 1331 410 1331 410 460 410 1331 410 1331 410 1331 410 1331 410 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9093 4441 620 507 618 530 594 531 593 1652 595 1653 620 505 620 505 619 506 617 1630 616 508 616 508 616 1632 615 509 615 1631 616 1632 615 1632 615 510 615 509 615 1632 615 509 615 1632 615 510 615 510 614 509 615 1632 614 1633 614 509 615 1633 614 509 615 1632 615 1632 614 1633 614 510 614 510 615 510 615 510 614 510 614 510 615 510 615 510 614 1632 615 1632 614 1632 615 1632 615 1632 615 1632 615 1632 615 1633 614 14439 9088 2192 614 96349 9112 2190 616 # OFF -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 243 27700 170 27632 246 27694 282 27595 307 27497 241 27696 177 27710 164 27644 245 27629 246 27712 174 27638 211 27736 131 27741 306 27504 214 27727 135 27749 132 27761 126 27744 131 27753 127 27764 121 27767 132 27773 307 27577 131 27706 213 27761 129 27759 128 27770 125 27694 213 27751 307 27578 131 27737 131 27745 304 27575 335 27540 124 27752 132 27749 132 27747 134 27757 134 27758 127 27762 131 27748 131 27750 122 27749 130 27748 125 27772 131 27774 136 27762 135 27686 215 27742 131 27749 132 27756 133 27764 126 24073 9255 4460 672 488 618 541 619 541 619 1675 619 1676 618 542 618 542 618 542 618 1676 618 542 618 543 617 1678 616 568 592 1702 592 1702 592 1703 617 543 617 543 617 1677 617 543 617 1678 615 544 616 544 616 544 616 1678 616 1679 615 544 616 1679 615 545 615 1679 615 1679 615 1679 615 40240 9173 2273 591 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 219 27658 217 27663 216 27658 216 27634 216 27642 215 27646 217 27662 217 27637 216 27649 216 27649 218 27656 217 27658 215 27640 214 27636 217 27649 216 27644 218 27635 217 27630 215 27645 216 27631 215 27632 216 27650 216 27628 217 27630 214 27627 217 27623 215 27632 215 27641 216 27634 214 27633 215 27648 215 27648 217 27651 215 27635 216 27629 216 27630 216 2021 9254 4461 618 542 618 542 618 542 618 1675 619 1676 618 541 619 541 619 542 618 1677 617 543 617 543 617 1678 616 568 592 1702 592 1702 618 1676 618 542 618 542 618 543 617 1677 617 543 617 544 616 1678 616 544 616 1678 616 1678 616 1678 616 544 616 1678 616 1678 616 544 616 1678 616 40239 9200 2247 617 99930 110 27739 119 27738 123 27750 126 27738 175 27617 214 27716 203 27604 213 27639 217 27631 214 27722 136 27753 119 27736 175 27618 246 27683 177 27619 245 27685 171 55486 244 27693 158 27635 241 27695 170 27693 129 27717 340 27530 113 27757 106 27751 124 27728 172 27707 126 27666 215 27708 123 27733 123 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 18 E9 00 00 command: 49 B6 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 02 00 00 00 command: 14 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 02 00 00 00 command: 48 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 02 00 00 00 command: 40 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 02 00 00 00 command: 18 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: B8 57 00 00 command: 0C F3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: B8 57 00 00 command: 0D F2 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: B8 57 00 00 command: 1E E1 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: B8 57 00 00 command: 1F E0 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 32 00 00 00 command: 81 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 32 00 00 00 command: 8F 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 32 00 00 00 command: 8C 00 00 00 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9066 4428 608 507 609 1622 609 507 609 507 609 1623 608 1623 609 507 609 506 610 1623 609 507 609 1622 610 1623 608 507 609 506 610 1622 609 1623 609 506 610 1622 610 506 610 1623 637 478 690 425 638 478 637 1594 637 1594 664 451 636 1594 610 506 610 1621 611 1621 610 1621 610 505 611 40183 9065 2156 637 95953 9037 2185 608 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: A8 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 00 00 00 00 command: 88 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 9C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 8C 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 87 45 00 00 command: 17 E8 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9064 4354 666 1559 666 1562 662 1586 638 475 636 477 635 477 635 478 635 1590 635 1591 634 478 635 1591 634 478 634 478 635 478 634 1591 635 478 634 1591 634 478 635 478 634 478 635 1591 634 478 634 1591 635 478 634 478 634 1591 634 1591 635 1591 634 478 635 1591 634 478 634 1591 635 40957 9035 2144 634 95483 9047 2155 632 95484 9048 2153 633 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 87 45 00 00 command: 50 AF 00 00 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9034 4385 638 1587 664 1562 663 1587 637 476 635 478 634 478 635 478 635 1591 634 1591 634 478 635 1591 635 478 634 478 635 478 635 1591 635 478 634 478 634 1591 634 478 635 479 634 1591 635 478 634 1591 635 478 634 1592 634 478 634 1591 635 1591 635 478 634 1592 634 478 634 1591 634 40958 9033 2144 635 # -name: POWER +name: Power type: parsed protocol: NECext address: FF FF 00 00 command: E8 17 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: FF FF 00 00 command: BD 42 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: FF FF 00 00 command: F2 0D 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: 41 54 32 00 command: 05 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Kaseikyo address: 41 54 32 00 command: 70 01 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Kaseikyo address: 41 54 32 00 command: 71 01 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 31 00 00 00 command: 81 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 F4 00 00 command: 17 E8 00 00 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.33 data: 9010 4413 532 1617 532 1617 533 489 533 489 533 489 558 464 558 465 557 1593 557 465 557 466 556 1594 555 467 555 1595 529 1621 554 1595 581 1569 581 441 581 1569 581 441 581 441 581 441 581 441 581 441 581 1569 581 1569 581 441 581 1569 580 1569 580 1570 580 1595 554 1595 555 468 554 42156 8983 2135 556 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.33 data: 9032 4390 556 1592 559 1591 559 463 559 463 558 464 557 465 556 465 557 1593 583 440 581 441 580 1569 581 441 581 1569 580 1569 581 1569 581 1570 580 1596 554 1596 554 468 554 468 554 468 554 442 580 442 580 1596 554 469 553 469 553 1596 554 1596 553 1597 550 1598 553 1598 552 469 551 42155 9008 2107 531 95218 9006 2108 582 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.33 data: 9011 4388 557 1617 532 1617 532 489 533 489 558 464 558 440 582 440 582 1593 556 466 556 466 556 1594 556 467 555 1595 555 1595 529 1620 554 1596 554 467 554 468 555 1595 579 443 581 1569 581 441 581 441 580 442 581 1569 581 1569 581 441 581 1569 580 441 581 1569 581 1569 581 1570 579 42152 8957 2159 556 # -name: POWER +name: Power type: parsed protocol: NECext address: 4F 50 00 00 command: 02 FD 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 4F 50 00 00 command: 08 F7 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 4F 50 00 00 command: 0B F4 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 81 03 00 00 command: F0 0F 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 87 45 00 00 command: 51 AE 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 87 45 00 00 command: 52 AD 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 8811 4222 530 1580 531 1579 531 507 531 507 531 507 531 508 531 508 530 1582 528 1583 527 535 503 1608 502 536 501 1609 501 537 501 1610 500 538 500 1611 499 538 500 539 500 538 500 1611 500 539 499 538 500 1611 499 539 499 1611 499 1611 500 1611 499 539 499 1611 500 1611 500 539 499 35437 8784 4252 500 1611 500 1612 500 539 500 539 500 539 500 539 500 539 500 1611 500 1612 499 539 500 1612 500 539 500 1612 499 539 500 1612 500 539 500 1612 499 539 500 539 500 539 499 1612 499 540 499 539 500 1612 499 539 500 1612 499 1613 499 1612 499 539 500 1612 500 1612 500 539 500 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 06 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 09 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 1A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 00 00 00 00 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9035 4437 563 548 563 548 563 522 594 1645 591 1639 592 518 593 548 563 552 563 1640 592 548 563 553 562 1668 564 524 592 1642 594 1674 562 1673 563 1639 593 548 563 552 564 1669 562 548 563 520 615 529 586 1645 587 529 587 1650 586 1646 586 529 586 1650 586 1649 587 1646 586 524 587 524 587 524 587 524 587 525 643 467 644 440 671 467 644 472 643 1592 644 1593 643 1593 642 1594 641 1594 587 1649 585 1651 563 1682 562 14430 9008 2205 562 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 84 F4 00 00 command: 2C D3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 84 F4 00 00 command: 2F D0 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 4F 50 00 00 command: 0F F0 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 02 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 02 00 00 00 command: 06 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 02 00 00 00 diff --git a/assets/resources/infrared/assets/tv.ir b/assets/resources/infrared/assets/tv.ir index a0fe73bd93..ab608cf1bc 100755 --- a/assets/resources/infrared/assets/tv.ir +++ b/assets/resources/infrared/assets/tv.ir @@ -3,1898 +3,1898 @@ Version: 1 # Last Updated 17th May, 2023 # Last Checked 17th May, 2023 # -name: POWER +name: Power type: parsed protocol: SIRC address: 01 00 00 00 command: 15 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC address: 01 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC address: 01 00 00 00 command: 13 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: SIRC address: 01 00 00 00 command: 10 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: SIRC address: 01 00 00 00 command: 11 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: SIRC address: 01 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 40 00 00 00 command: 0B 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 40 00 00 00 command: 11 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 40 00 00 00 command: 10 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 40 00 00 00 command: 13 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 40 00 00 00 command: 12 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 40 00 00 00 command: 14 00 00 00 # -name: POWER +name: Power type: parsed protocol: Kaseikyo address: 80 02 20 00 command: D0 03 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Kaseikyo address: 80 02 20 00 command: 00 02 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Kaseikyo address: 80 02 20 00 command: 10 02 00 00 # -name: MUTE +name: Mute type: parsed protocol: Kaseikyo address: 80 02 20 00 command: 20 03 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: Kaseikyo address: 80 02 20 00 command: 40 03 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: Kaseikyo address: 80 02 20 00 command: 50 03 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 04 00 00 00 command: 40 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 04 00 00 00 command: 12 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 7F 00 00 command: 15 EA 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 7F 00 00 command: 16 E9 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 7F 00 00 command: 1B E4 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 7F 00 00 command: 1A E5 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 7F 00 00 command: 19 E6 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 7F 00 00 command: 18 E7 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 FB 00 00 command: 0F F0 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 FB 00 00 command: 0A F5 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 FB 00 00 command: 58 A7 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 FB 00 00 command: 4B B4 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 FB 00 00 command: 1F E0 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 FB 00 00 command: 1E E1 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 DF 00 00 command: 1C E3 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 DF 00 00 command: 4B B4 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 DF 00 00 command: 4F B0 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 DF 00 00 command: 08 F7 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 DF 00 00 command: 09 F6 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 DF 00 00 command: 05 FA 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 03 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5 address: 00 00 00 00 command: 20 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC5 address: 00 00 00 00 command: 21 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 00 00 00 00 command: 11 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 00 00 00 00 command: 10 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 03 00 00 00 command: 1D 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 7F 00 00 command: 4E B1 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 03 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 03 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 19 00 00 00 command: 18 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 19 00 00 00 command: 56 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 19 00 00 00 command: 4F 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 19 00 00 00 command: 0D 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 19 00 00 00 command: 4C 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 19 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: BA A0 00 00 command: 4C B3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: BA A0 00 00 command: 01 FE 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: AD ED 00 00 command: B5 4A 00 00 # # ON -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 40 00 00 00 # ON -name: POWER +name: Power type: parsed protocol: NECext address: A0 B7 00 00 command: E9 16 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 10 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 08 00 00 00 command: 05 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 08 00 00 00 command: 00 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 08 00 00 00 command: 01 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 08 00 00 00 command: 02 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 08 00 00 00 command: 03 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 08 00 00 00 command: 0B 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 DF 00 00 command: 1C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 DF 00 00 command: 4B 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 DF 00 00 command: 4F 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 DF 00 00 command: 09 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 DF 00 00 command: 05 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 DF 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 0C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 0D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 14 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 15 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 12 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: Samsung32 address: 0E 00 00 00 command: 13 00 00 00 # -name: POWER +name: Power type: parsed protocol: RC6 address: 00 00 00 00 command: 0C 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 07 00 00 00 command: 02 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 50 00 00 00 command: 17 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 31 49 00 00 command: 63 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: AA 00 00 00 command: 1C 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 38 00 00 00 command: 1C 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 7A 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 53 00 00 00 command: 17 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 18 18 00 00 command: C0 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 38 00 00 00 command: 10 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: AA 00 00 00 command: C5 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 04 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 18 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 71 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 6F 00 00 command: 0A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 48 00 00 00 command: 00 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 7B 00 00 command: 13 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 7E 00 00 command: 18 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 50 00 00 00 command: 08 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 75 00 00 command: 0A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 57 00 00 command: 0A 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 0B 00 00 00 command: 0A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: AA 00 00 00 command: 1B 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 85 46 00 00 command: 12 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 05 00 00 00 command: 02 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 08 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 01 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 07 00 00 00 command: E6 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 07 00 00 00 command: 07 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 07 00 00 00 command: 0B 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: Samsung32 address: 07 00 00 00 command: 12 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: Samsung32 address: 07 00 00 00 command: 10 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 07 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 71 00 00 00 command: 4A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 60 00 00 00 command: 03 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 60 00 00 00 command: 00 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 42 00 00 00 command: 01 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 50 AD 00 00 command: 00 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 50 AD 00 00 command: 02 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 50 00 00 00 command: 3F 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 06 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 08 00 00 00 command: 12 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 08 00 00 00 command: 0B 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 83 55 00 00 command: C2 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 51 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 BD 00 00 command: 01 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 00 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 16 00 00 00 command: 0F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 01 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 80 68 00 00 command: 49 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 86 02 00 00 command: 49 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 7F 00 00 command: 0A F5 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 01 72 00 00 command: 1E E1 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 01 72 00 00 command: 48 B7 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 01 72 00 00 command: 44 BB 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 01 72 00 00 command: 0A F5 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 01 72 00 00 command: 06 F9 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 01 72 00 00 command: 5C A3 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 86 05 00 00 command: 0F F0 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 86 05 00 00 command: 0C F3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 86 05 00 00 command: 0D F2 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 86 05 00 00 command: 0A F5 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 86 05 00 00 command: 0B F4 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 86 05 00 00 command: 0E F1 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 02 7D 00 00 command: 46 B9 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 02 7D 00 00 command: 4C B3 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 02 7D 00 00 command: 0F F0 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 02 7D 00 00 command: 5A A5 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 02 7D 00 00 command: 0C F3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 02 7D 00 00 command: 19 E6 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 02 7D 00 00 command: 41 BE 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 02 7D 00 00 command: 42 BD 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 02 7D 00 00 command: 57 A8 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 02 7D 00 00 command: 15 EA 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 84 E0 00 00 command: 20 DF 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 84 E0 00 00 command: 50 AF 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 84 E0 00 00 command: 51 AE 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 84 E0 00 00 command: 60 9F 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 84 E0 00 00 command: 61 9E 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 84 E0 00 00 command: 64 9B 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 84 E0 00 00 command: 57 A8 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 6E 00 00 00 command: 02 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 6E 00 00 00 command: 06 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 6E 00 00 00 command: 0C 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 6E 00 00 00 command: 08 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 6E 00 00 00 command: 0E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 6E 00 00 00 command: 04 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 04 00 00 00 command: 02 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 04 00 00 00 command: 03 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 04 00 00 00 command: 09 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 04 00 00 00 command: 00 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 04 00 00 00 command: 01 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 50 00 00 00 command: 0B 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 50 00 00 00 command: 12 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 50 00 00 00 command: 15 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 50 00 00 00 command: 19 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 50 00 00 00 command: 18 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 85 7C 00 00 command: 80 7F 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 85 7C 00 00 command: 8F 70 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 85 7C 00 00 command: 93 6C 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 85 7C 00 00 command: 8D 72 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 85 7C 00 00 command: 91 6E 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 85 7C 00 00 command: 97 68 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 85 7C 00 00 command: 96 69 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: EA C7 00 00 command: 17 E8 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: EA C7 00 00 command: 0F F0 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: EA C7 00 00 command: 10 EF 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: EA C7 00 00 command: 20 DF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC6 address: 00 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC6 address: 00 00 00 00 command: 11 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC6 address: 00 00 00 00 command: 4C 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC6 address: 00 00 00 00 command: 4D 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC6 address: 00 00 00 00 command: 0D 00 00 00 # Samsung Standby -name: POWER +name: Power type: parsed protocol: Samsung32 address: 07 00 00 00 command: E0 00 00 00 # Samsung Power Off -name: POWER +name: Power type: parsed protocol: Samsung32 address: 07 00 00 00 command: 98 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 01 00 00 00 command: 6D 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: SIRC address: 01 00 00 00 command: 73 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: SIRC address: 01 00 00 00 command: 72 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: SIRC15 address: 97 00 00 00 command: 3C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 02 00 00 00 command: 1F 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 02 00 00 00 command: 1E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 02 00 00 00 command: 1C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 40 00 00 00 command: 1A 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 40 00 00 00 command: 1E 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 40 00 00 00 command: 1B 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 40 00 00 00 command: 1F 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 04 00 00 00 command: 1A 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 01 00 00 00 command: 10 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 01 00 00 00 command: 0E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 01 00 00 00 command: 0F 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 01 00 00 00 command: 0C 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 01 00 00 00 command: 0D 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 17 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 08 00 00 00 command: D7 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 08 00 00 00 command: 80 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 08 00 00 00 command: 8E 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 08 00 00 00 command: 83 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 08 00 00 00 command: 86 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 08 00 00 00 command: DF 00 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 01 00 00 00 command: 0C 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5 address: 01 00 00 00 command: 0D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 01 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 01 00 00 00 command: 11 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5 address: 01 00 00 00 command: 20 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC5 address: 01 00 00 00 command: 21 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 7F 00 00 command: 50 AF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 7F 00 00 command: 1E E1 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 7F 00 00 command: 5F A0 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 7F 00 00 command: 1F E0 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 7F 00 00 command: 5C A3 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 64 46 00 00 command: 5D A2 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 64 46 00 00 command: DE 21 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 64 46 00 00 command: DB 24 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 20 00 00 00 command: 52 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 20 00 00 00 command: 53 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 20 00 00 00 command: 02 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 20 00 00 00 command: 09 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 20 00 00 00 command: 03 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 20 00 00 00 command: 41 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 BF 00 00 command: 0D F2 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 BF 00 00 command: 44 BB 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 BF 00 00 command: 43 BC 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 BF 00 00 command: 0E F1 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 BF 00 00 command: 4A B5 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 BF 00 00 command: 4B B4 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 03 00 00 00 command: 0C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 03 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 03 00 00 00 command: 11 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5 address: 03 00 00 00 command: 20 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC5 address: 03 00 00 00 command: 21 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5 address: 03 00 00 00 command: 0D 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 00 BF 00 00 command: 00 FF 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 BF 00 00 command: 48 B7 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 BF 00 00 command: 49 B6 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 BF 00 00 command: 01 FE 00 00 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 17 00 00 00 command: 14 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: Samsung32 address: 17 00 00 00 command: 11 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: Samsung32 address: 17 00 00 00 command: 10 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 17 00 00 00 command: 13 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 17 00 00 00 command: 12 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 17 00 00 00 command: 15 00 00 00 # -name: POWER +name: Power type: parsed protocol: RC5 address: 00 00 00 00 command: 0C 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5X address: 00 00 00 00 command: 10 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC5X address: 00 00 00 00 command: 11 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5X address: 00 00 00 00 command: 16 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5X address: 00 00 00 00 command: 15 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: RC5 address: 00 00 00 00 command: 0D 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC6 address: 00 00 00 00 command: 20 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC6 address: 00 00 00 00 command: 21 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: A0 00 00 00 command: 5F 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: A0 00 00 00 command: 1C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: A0 00 00 00 command: 40 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: A0 00 00 00 command: 5D 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: A0 00 00 00 command: 03 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: A0 00 00 00 command: 1F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 38 00 00 00 command: 12 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 38 00 00 00 command: 0E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 38 00 00 00 command: 0F 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 38 00 00 00 command: 18 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 38 00 00 00 command: 0A 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 38 00 00 00 command: 0B 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 01 00 00 00 command: 2E 00 00 00 # -name: POWER +name: Power type: parsed protocol: SIRC address: 01 00 00 00 command: 2F 00 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: EA C7 00 00 command: 97 68 00 00 # -name: POWER +name: Power type: parsed protocol: NECext address: 40 40 00 00 command: 0A F5 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 40 40 00 00 command: 15 EA 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 40 40 00 00 command: 1C E3 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 40 40 00 00 command: 1F E0 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 40 40 00 00 command: 1E E1 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 40 40 00 00 command: 0F F0 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 01 00 00 00 command: 41 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: A0 B7 00 00 command: AF 50 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: AD ED 00 00 command: BA 45 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: AD ED 00 00 command: BB 44 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: AD ED 00 00 command: B0 4F 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: AD ED 00 00 command: B1 4E 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: AD ED 00 00 command: C5 3A 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 00 00 00 00 command: 1A 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 00 00 00 00 command: 11 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 00 00 00 00 command: 33 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 28 00 00 00 command: 0B 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NEC address: 28 00 00 00 command: 0C 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NEC address: 28 00 00 00 command: 0D 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 28 00 00 00 command: 0E 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 28 00 00 00 command: 0F 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 28 00 00 00 command: 10 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5 address: 01 00 00 00 command: 14 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: SIRC20 address: 5A 0E 00 00 command: 10 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: SIRC20 address: 5A 0E 00 00 command: 11 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: RC5 address: 00 00 00 00 command: 15 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: RC5 address: 00 00 00 00 command: 14 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: RC5 address: 00 00 00 00 command: 18 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: RC5 address: 00 00 00 00 command: 17 00 00 00 # -name: POWER +name: Power type: parsed protocol: NEC address: 80 00 00 00 command: 12 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NEC address: 80 00 00 00 command: 1A 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NEC address: 80 00 00 00 command: 1E 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: NEC address: 80 00 00 00 command: 10 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: SIRC20 address: 10 01 00 00 command: 34 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: SIRC20 address: 10 01 00 00 @@ -1902,73 +1902,73 @@ command: 33 00 00 00 # # Sharp TV # -name: POWER +name: Power type: parsed protocol: NECext address: 00 BD 00 00 command: 01 FE 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: NECext address: 00 BD 00 00 command: 0C F3 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: NECext address: 00 BD 00 00 command: 10 EF 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: NECext address: 00 BD 00 00 command: 18 E7 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: NECext address: 00 BD 00 00 command: 1C E3 00 00 # -name: MUTE +name: Mute type: parsed protocol: NECext address: 00 BD 00 00 command: 04 FB 00 00 # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 278 1811 277 788 246 794 250 764 280 786 248 792 252 1813 275 1815 273 791 253 1812 276 789 255 785 249 791 253 1812 276 789 255 45322 280 1809 279 786 248 766 278 788 246 794 250 1815 273 792 252 788 246 1819 280 785 249 1817 271 1819 280 1810 278 787 247 1818 281 43217 274 1818 270 794 250 764 280 786 248 792 252 788 256 1809 279 1811 277 788 246 1819 280 785 249 766 278 762 272 1819 280 785 248 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 278 1812 276 762 282 758 276 765 279 761 273 1818 281 1809 279 1811 277 762 282 1809 279 760 274 766 278 762 282 1809 279 760 274 44279 276 1813 275 763 281 759 275 766 278 762 272 768 276 764 280 760 274 1817 271 768 276 1815 273 1817 271 1819 280 759 275 1816 272 44276 279 1812 276 763 281 758 276 765 279 761 273 1818 281 1810 278 1811 277 762 272 1819 279 760 274 766 278 762 282 1809 279 760 274 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 272 1817 271 794 250 790 254 786 248 792 252 762 272 794 250 1815 273 792 252 1813 275 790 254 785 249 766 278 1813 275 789 255 46372 273 1817 271 794 250 763 281 785 248 792 252 1813 275 1814 274 791 253 1812 276 789 255 1810 278 1812 276 1813 275 790 254 1811 277 42170 277 1814 274 791 253 787 247 793 251 763 281 759 275 791 253 1812 276 789 255 1810 278 787 247 793 251 789 255 1810 278 787 247 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 275 1814 274 791 253 787 247 793 251 789 255 1810 278 787 247 1818 281 785 249 1816 272 793 251 789 255 785 249 1816 272 766 278 45325 274 1815 273 792 252 762 272 794 250 790 254 786 247 1818 270 794 250 1815 273 792 252 1813 275 1815 273 1816 272 793 251 1814 274 43224 277 1814 274 764 280 786 248 792 252 788 246 1820 279 786 247 1817 271 768 276 1815 273 792 252 761 273 794 250 1815 273 791 253 # -name: CH+ +name: Ch_next type: raw frequency: 38000 duty_cycle: 0.330000 data: 272 1817 271 794 250 790 254 786 248 792 252 1813 275 790 254 759 275 792 252 1813 275 789 255 785 248 792 252 1813 275 789 255 46372 273 1817 271 793 251 763 281 759 275 791 253 787 247 1818 281 1810 278 1812 276 789 255 1809 279 1811 277 1813 275 790 254 1811 277 42169 277 1815 273 792 252 787 247 794 250 789 255 1810 278 787 247 794 250 789 255 1810 278 761 273 793 251 789 255 1810 278 787 247 # -name: CH- +name: Ch_prev type: raw frequency: 38000 duty_cycle: 0.330000 @@ -1976,73 +1976,73 @@ data: 273 1816 272 767 277 789 255 785 249 791 253 787 246 1818 281 785 248 765 # # Brandt TV # -name: POWER +name: Power type: raw frequency: 38000 duty_cycle: 0.330000 data: 9346 4516 657 502 659 502 688 473 687 475 634 527 635 527 634 1662 633 528 662 1634 662 1658 635 1660 608 1687 609 1687 633 1662 634 527 634 1662 634 528 633 1663 632 529 632 530 631 1665 630 531 630 531 631 531 630 1666 630 531 630 1666 630 1666 630 532 630 1666 630 1666 630 1666 630 # -name: VOL+ +name: Vol_up type: raw frequency: 38000 duty_cycle: 0.330000 data: 9348 4542 631 529 632 503 659 502 688 474 634 527 634 527 634 1661 635 528 661 1636 660 1659 634 1637 632 1687 608 1687 609 1687 609 552 632 1664 633 528 633 1663 633 529 632 1664 631 1665 631 531 630 531 631 531 631 1665 631 531 631 1666 630 531 631 531 630 1666 630 1666 630 1666 631 # -name: VOL- +name: Vol_dn type: raw frequency: 38000 duty_cycle: 0.330000 data: 9376 4512 660 475 684 475 635 527 634 528 633 527 634 527 634 1662 662 525 636 1658 637 1658 637 1658 636 1659 636 1660 635 1660 635 526 635 1661 634 527 634 1662 633 1663 632 1664 631 1665 630 531 631 531 630 531 630 1666 630 531 630 531 631 531 630 531 631 1666 630 1666 630 1667 630 # -name: CH+ +name: Ch_next type: raw frequency: 38000 duty_cycle: 0.330000 data: 9315 4513 657 501 660 501 659 500 661 502 688 499 661 474 634 1660 634 527 634 1660 634 1686 608 1687 607 1686 608 1686 608 1686 608 552 608 1686 608 1687 607 1687 632 530 631 1664 630 1665 630 531 630 531 630 531 630 531 630 531 630 1665 630 531 630 531 630 1665 630 1665 630 1665 630 # -name: CH- +name: Ch_prev type: raw frequency: 38000 duty_cycle: 0.330000 data: 9345 4540 631 503 658 529 661 475 683 476 635 526 635 527 634 1661 634 527 662 1658 636 1659 634 1660 608 1686 609 1686 634 1661 634 527 634 1661 634 1662 633 1662 633 1663 632 1664 630 1665 630 531 630 531 630 531 630 531 631 531 630 531 630 531 630 532 629 1666 630 1666 629 1666 629 # -name: MUTE +name: Mute type: raw frequency: 38000 duty_cycle: 0.330000 data: 9348 4516 657 501 660 502 659 502 659 502 688 474 634 527 634 1662 634 528 633 1687 634 1660 608 1664 631 1687 608 1687 609 1686 609 552 609 1687 608 553 632 529 633 529 632 530 631 1665 630 531 630 531 631 531 630 1666 630 1666 630 1666 630 1666 630 531 631 1666 630 1666 630 1666 630 # -name: POWER +name: Power type: parsed protocol: Samsung32 address: 3E 00 00 00 command: 0C 00 00 00 # -name: VOL+ +name: Vol_up type: parsed protocol: Samsung32 address: 3E 00 00 00 command: 14 00 00 00 # -name: VOL- +name: Vol_dn type: parsed protocol: Samsung32 address: 3E 00 00 00 command: 15 00 00 00 # -name: CH+ +name: Ch_next type: parsed protocol: Samsung32 address: 3E 00 00 00 command: 12 00 00 00 # -name: CH- +name: Ch_prev type: parsed protocol: Samsung32 address: 3E 00 00 00 command: 13 00 00 00 # -name: MUTE +name: Mute type: parsed protocol: Samsung32 address: 3E 00 00 00 diff --git a/documentation/FuriHalBus.md b/documentation/FuriHalBus.md new file mode 100644 index 0000000000..5c754018b9 --- /dev/null +++ b/documentation/FuriHalBus.md @@ -0,0 +1,113 @@ +# Using FuriHalBus API + +## Basic info + +On system startup, most of the peripheral devices are under reset and not clocked by default. This is done to reduce power consumption and to guarantee that the device will always be in the same state before use. +Some crucial peripherals are enabled right away by the system, others must be explicitly enabled by the user code. + +**NOTE:** Here and afterwards the word *"system"* refers to any code belonging to the operating system, hardware drivers or built-in applications. + +To **ENABLE** a peripheral, call `furi_hal_bus_enable()`. At the time of the call, the peripheral in question MUST be disabled, otherwise a crash will occur to indicate improper use. This means that any given peripheral cannot be enabled twice or more without disabling it first. + +To **DISABLE** a peripheral, call `furi_hal_bus_disable()`. Likewise, the peripheral in question MUST be enabled, otherwise a crash will occur. + +To **RESET** a peripheral, call `furi_hal_bus_reset()`. The peripheral in question MUST be enabled, otherwise a crash will occur. This method is used whenever it is necessary to reset all the peripheral's registers to their initial states without disabling it. + +## Peripherals + +Built-in peripherals are divided into three categories: +- Enabled by the system on startup, never disabled; +- Enabled and disabled by the system on demand; +- Enabled and disabled by the user code. + +### Always-on peripherals + +Below is the list of peripherals that are enabled by the system. The user code must NEVER attempt to disable them. If a corresponding API is provided, the user code must employ it in order to access the peripheral. + +*Table 1* - Peripherals enabled by the system + +| Peripheral | Enabled at | +| :-----------: | :-----------------------: | +| DMA1 | `furi_hal_dma.c` | +| DMA2 | -- | +| DMAMUX | -- | +| GPIOA | `furi_hal_resources.c` | +| GPIOB | -- | +| GPIOC | -- | +| GPIOD | -- | +| GPIOE | -- | +| GPIOH | -- | +| PKA | `furi_hal_bt.c` | +| AES2 | -- | +| HSEM | -- | +| IPCC | -- | +| FLASH | enabled by hardware | + +### On-demand system peripherals + +Below is the list of peripherals that are enabled and disabled by the system. The user code must avoid using them directly, preferring the respective APIs instead. + +When not using the API, these peripherals MUST be enabled by the user code and then disabled when not needed anymore. + +*Table 2* - Peripherals enabled and disabled by the system + +| Peripheral | API header file | +| :-----------: | :-------------------: | +| RNG | `furi_hal_random.h` | +| SPI1 | `furi_hal_spi.h` | +| SPI2 | -- | +| I2C1 | `furi_hal_i2c.h` | +| I2C3 | -- | +| USART1 | `furi_hal_uart.h` | +| LPUART1 | -- | +| USB | `furi_hal_usb.h` | + +### On-demand shared peripherals + +Below is the list of peripherals that are not enabled by default and MUST be enabled by the user code each time it accesses them. + +Note that some of these peripherals may also be used by the system to implement its certain features. +The system will take over any given peripheral only when the respective feature is in use. + +*Table 3* - Peripherals enabled and disabled by user + +| Peripheral | System | Purpose | +| :-----------: | :-------: | ------------------------------------- | +| CRC | | | +| TSC | | | +| ADC | | | +| QUADSPI | | | +| TIM1 | yes | subghz, lfrfid, nfc, infrared, etc... | +| TIM2 | yes | -- | +| TIM16 | yes | speaker | +| TIM17 | | | +| LPTIM1 | yes | tickless idle timer | +| LPTIM2 | yes | pwm | +| SAI1 | | | +| LCD | | | + + +## DMA + +The DMA1,2 peripherals are a special case in that they have multiple independent channels. Some of the channels may be in use by the system. + +Below is the list of DMA channels and their usage by the system. + +*Table 4* - DMA channels + +| DMA | Channel | System | Purpose | +| :---: | :-------: | :-------: | ------------------------- | +| DMA1 | 1 | yes | digital signal | +| -- | 2 | yes | -- | +| -- | 3 | | | +| -- | 4 | yes | pulse reader | +| -- | 5 | | | +| -- | 6 | | | +| -- | 7 | | | +| DMA2 | 1 | yes | infrared, lfrfid, subghz | +| -- | 2 | yes | -- | +| -- | 3 | yes | SPI | +| -- | 4 | yes | SPI | +| -- | 5 | | | +| -- | 6 | | | +| -- | 7 | | | diff --git a/documentation/fbt.md b/documentation/fbt.md index d9eb8f4aab..c19780ef59 100644 --- a/documentation/fbt.md +++ b/documentation/fbt.md @@ -114,6 +114,8 @@ To run cleanup (think of `make clean`) for specified targets, add the `-c` optio Default configuration variables are set in the configuration file: `fbt_options.py`. Values set in the command line have higher precedence over the configuration file. +You can also create a file called `fbt_options_local.py` that will be evaluated when loading default options file, enabling persisent overriding of default options without modifying default configuration. + You can find out available options with `./fbt -h`. ### Firmware application set diff --git a/fbt_options.py b/fbt_options.py index c9552520d9..561b818d46 100644 --- a/fbt_options.py +++ b/fbt_options.py @@ -1,7 +1,9 @@ +from pathlib import Path import posixpath # For more details on these options, run 'fbt -h' +FIRMWARE_ORIGIN = "Unleashed" # Default hardware target TARGET_HW = 7 @@ -88,3 +90,8 @@ } FIRMWARE_APP_SET = "default" + +custom_options_fn = "fbt_options_local.py" + +if Path(custom_options_fn).exists(): + exec(compile(Path(custom_options_fn).read_text(), custom_options_fn, "exec")) diff --git a/firmware.scons b/firmware.scons index c469968991..a91b7cdfc6 100644 --- a/firmware.scons +++ b/firmware.scons @@ -18,6 +18,7 @@ env = ENV.Clone( "fbt_apps", "pvsstudio", "fbt_hwtarget", + "fbt_envhooks", ], COMPILATIONDB_USE_ABSPATH=False, BUILD_DIR=fw_build_meta["build_dir"], @@ -72,6 +73,8 @@ env = ENV.Clone( _APP_ICONS=None, ) +env.PreConfigureFwEnvionment() + if env["IS_BASE_FIRMWARE"]: env.Append( FIRMWARE_BUILD_CFG="firmware", @@ -100,6 +103,13 @@ lib_targets = env.BuildModules( ], ) +# Configure firmware origin definitions +env.Append( + CPPDEFINES=[ + env.subst("FW_ORIGIN_${FIRMWARE_ORIGIN}"), + ] +) + # Now, env is fully set up with everything to build apps fwenv = env.Clone(FW_ARTIFACTS=[]) @@ -271,5 +281,6 @@ if should_gen_cdb_and_link_dir(fwenv, BUILD_TARGETS): Alias(fwenv["FIRMWARE_BUILD_CFG"] + "_all", fw_artifacts) +env.PostConfigureFwEnvionment() Return("fwenv") diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index 68248a6d2b..3c075e0d15 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,27.0,, +Version,+,28.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -40,8 +40,10 @@ Header,-,firmware/targets/f18/furi_hal/furi_hal_power_calibration.h,, Header,+,firmware/targets/f18/furi_hal/furi_hal_resources.h,, Header,+,firmware/targets/f18/furi_hal/furi_hal_spi_config.h,, Header,+,firmware/targets/f18/furi_hal/furi_hal_target_hw.h,, +Header,+,firmware/targets/f7/furi_hal/furi_hal_bus.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_clock.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_console.h,, +Header,+,firmware/targets/f7/furi_hal/furi_hal_dma.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_flash.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_gpio.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_i2c_config.h,, @@ -78,6 +80,7 @@ Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_version.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_vibro.h,, +Header,+,lib/digital_signal/digital_signal.h,, Header,+,lib/flipper_application/api_hashtable/api_hashtable.h,, Header,+,lib/flipper_application/api_hashtable/compilesort.hpp,, Header,+,lib/flipper_application/flipper_application.h,, @@ -615,6 +618,24 @@ Function,+,dialog_message_set_text,void,"DialogMessage*, const char*, uint8_t, u Function,+,dialog_message_show,DialogMessageButton,"DialogsApp*, const DialogMessage*" Function,+,dialog_message_show_storage_error,void,"DialogsApp*, const char*" Function,-,difftime,double,"time_t, time_t" +Function,-,digital_sequence_add,void,"DigitalSequence*, uint8_t" +Function,-,digital_sequence_alloc,DigitalSequence*,"uint32_t, const GpioPin*" +Function,-,digital_sequence_clear,void,DigitalSequence* +Function,-,digital_sequence_free,void,DigitalSequence* +Function,-,digital_sequence_send,_Bool,DigitalSequence* +Function,-,digital_sequence_set_sendtime,void,"DigitalSequence*, uint32_t" +Function,-,digital_sequence_set_signal,void,"DigitalSequence*, uint8_t, DigitalSignal*" +Function,-,digital_sequence_timebase_correction,void,"DigitalSequence*, float" +Function,-,digital_signal_add,void,"DigitalSignal*, uint32_t" +Function,-,digital_signal_add_pulse,void,"DigitalSignal*, uint32_t, _Bool" +Function,-,digital_signal_alloc,DigitalSignal*,uint32_t +Function,-,digital_signal_append,_Bool,"DigitalSignal*, DigitalSignal*" +Function,-,digital_signal_free,void,DigitalSignal* +Function,-,digital_signal_get_edge,uint32_t,"DigitalSignal*, uint32_t" +Function,-,digital_signal_get_edges_cnt,uint32_t,DigitalSignal* +Function,-,digital_signal_get_start_level,_Bool,DigitalSignal* +Function,-,digital_signal_prepare_arr,void,DigitalSignal* +Function,-,digital_signal_send,void,"DigitalSignal*, const GpioPin*" Function,-,diprintf,int,"int, const char*, ..." Function,+,dir_walk_alloc,DirWalk*,Storage* Function,+,dir_walk_close,void,DirWalk* @@ -873,6 +894,12 @@ Function,+,furi_hal_bt_stop_tone_tx,void, Function,+,furi_hal_bt_unlock_core2,void, Function,+,furi_hal_bt_update_battery_level,void,uint8_t Function,+,furi_hal_bt_update_power_state,void, +Function,+,furi_hal_bus_deinit_early,void, +Function,+,furi_hal_bus_disable,void,FuriHalBus +Function,+,furi_hal_bus_enable,void,FuriHalBus +Function,+,furi_hal_bus_init_early,void, +Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus +Function,+,furi_hal_bus_reset,void,FuriHalBus Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t" @@ -915,6 +942,8 @@ Function,+,furi_hal_debug_disable,void, Function,+,furi_hal_debug_enable,void, Function,+,furi_hal_debug_is_gdb_session_active,_Bool, Function,-,furi_hal_deinit_early,void, +Function,+,furi_hal_dma_deinit_early,void, +Function,+,furi_hal_dma_init_early,void, Function,-,furi_hal_flash_erase,void,uint8_t Function,-,furi_hal_flash_get_base,size_t, Function,-,furi_hal_flash_get_cycles_count,size_t, @@ -1033,6 +1062,7 @@ Function,+,furi_hal_pwm_start,void,"FuriHalPwmOutputId, uint32_t, uint8_t" Function,+,furi_hal_pwm_stop,void,FuriHalPwmOutputId Function,+,furi_hal_random_fill_buf,void,"uint8_t*, uint32_t" Function,+,furi_hal_random_get,uint32_t, +Function,+,furi_hal_random_init,void, Function,+,furi_hal_region_get,const FuriHalRegion*, Function,+,furi_hal_region_get_band,const FuriHalRegionBand*,uint32_t Function,+,furi_hal_region_get_name,const char*, @@ -1048,6 +1078,8 @@ Function,+,furi_hal_rtc_datetime_to_timestamp,uint32_t,FuriHalRtcDateTime* Function,-,furi_hal_rtc_deinit_early,void, Function,+,furi_hal_rtc_get_boot_mode,FuriHalRtcBootMode, Function,+,furi_hal_rtc_get_datetime,void,FuriHalRtcDateTime* +Function,+,furi_hal_rtc_get_days_per_month,uint8_t,"_Bool, uint8_t" +Function,+,furi_hal_rtc_get_days_per_year,uint16_t,uint16_t Function,+,furi_hal_rtc_get_fault_data,uint32_t, Function,+,furi_hal_rtc_get_heap_track_mode,FuriHalRtcHeapTrackMode, Function,+,furi_hal_rtc_get_locale_dateformat,FuriHalRtcLocaleDateFormat, @@ -1060,6 +1092,7 @@ Function,+,furi_hal_rtc_get_timestamp,uint32_t, Function,-,furi_hal_rtc_init,void, Function,-,furi_hal_rtc_init_early,void, Function,+,furi_hal_rtc_is_flag_set,_Bool,FuriHalRtcFlag +Function,+,furi_hal_rtc_is_leap_year,_Bool,uint16_t Function,+,furi_hal_rtc_reset_flag,void,FuriHalRtcFlag Function,+,furi_hal_rtc_set_boot_mode,void,FuriHalRtcBootMode Function,+,furi_hal_rtc_set_datetime,void,FuriHalRtcDateTime* @@ -1989,6 +2022,8 @@ Function,-,vdprintf,int,"int, const char*, __gnuc_va_list" Function,+,version_get,const Version*, Function,+,version_get_builddate,const char*,const Version* Function,+,version_get_dirty_flag,_Bool,const Version* +Function,+,version_get_firmware_origin,const char*,const Version* +Function,+,version_get_git_origin,const char*,const Version* Function,+,version_get_gitbranch,const char*,const Version* Function,+,version_get_gitbranchnum,const char*,const Version* Function,+,version_get_githash,const char*,const Version* diff --git a/firmware/targets/f18/furi_hal/furi_hal.c b/firmware/targets/f18/furi_hal/furi_hal.c index 4064dd6472..5f4e6165dc 100644 --- a/firmware/targets/f18/furi_hal/furi_hal.c +++ b/firmware/targets/f18/furi_hal/furi_hal.c @@ -9,6 +9,8 @@ void furi_hal_init_early() { furi_hal_cortex_init_early(); furi_hal_clock_init_early(); + furi_hal_bus_init_early(); + furi_hal_dma_init_early(); furi_hal_resources_init_early(); furi_hal_os_init(); furi_hal_spi_config_init_early(); @@ -22,12 +24,15 @@ void furi_hal_deinit_early() { furi_hal_i2c_deinit_early(); furi_hal_spi_config_deinit_early(); furi_hal_resources_deinit_early(); + furi_hal_dma_deinit_early(); + furi_hal_bus_deinit_early(); furi_hal_clock_deinit_early(); } void furi_hal_init() { furi_hal_mpu_init(); furi_hal_clock_init(); + furi_hal_random_init(); furi_hal_console_init(); furi_hal_rtc_init(); furi_hal_interrupt_init(); diff --git a/firmware/targets/f18/furi_hal/furi_hal_resources.c b/firmware/targets/f18/furi_hal/furi_hal_resources.c index 6db483dbcb..32c9b619c4 100644 --- a/firmware/targets/f18/furi_hal/furi_hal_resources.c +++ b/firmware/targets/f18/furi_hal/furi_hal_resources.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -118,6 +119,13 @@ static void furi_hal_resources_init_input_pins(GpioMode mode) { } void furi_hal_resources_init_early() { + furi_hal_bus_enable(FuriHalBusGPIOA); + furi_hal_bus_enable(FuriHalBusGPIOB); + furi_hal_bus_enable(FuriHalBusGPIOC); + furi_hal_bus_enable(FuriHalBusGPIOD); + furi_hal_bus_enable(FuriHalBusGPIOE); + furi_hal_bus_enable(FuriHalBusGPIOH); + furi_hal_resources_init_input_pins(GpioModeInput); // SD Card stepdown control @@ -162,6 +170,12 @@ void furi_hal_resources_init_early() { void furi_hal_resources_deinit_early() { furi_hal_resources_init_input_pins(GpioModeAnalog); + furi_hal_bus_disable(FuriHalBusGPIOA); + furi_hal_bus_disable(FuriHalBusGPIOB); + furi_hal_bus_disable(FuriHalBusGPIOC); + furi_hal_bus_disable(FuriHalBusGPIOD); + furi_hal_bus_disable(FuriHalBusGPIOE); + furi_hal_bus_disable(FuriHalBusGPIOH); } void furi_hal_resources_init() { diff --git a/firmware/targets/f18/furi_hal/furi_hal_spi_config.c b/firmware/targets/f18/furi_hal/furi_hal_spi_config.c index 0fbe55e2ac..5ac84906f8 100644 --- a/firmware/targets/f18/furi_hal/furi_hal_spi_config.c +++ b/firmware/targets/f18/furi_hal/furi_hal_spi_config.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -96,28 +97,17 @@ void furi_hal_spi_config_init() { static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) { if(event == FuriHalSpiBusEventInit) { furi_hal_spi_bus_r_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalSpiBusEventDeinit) { furi_mutex_free(furi_hal_spi_bus_r_mutex); - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalSpiBusEventLock) { furi_check(furi_mutex_acquire(furi_hal_spi_bus_r_mutex, FuriWaitForever) == FuriStatusOk); } else if(event == FuriHalSpiBusEventUnlock) { furi_check(furi_mutex_release(furi_hal_spi_bus_r_mutex) == FuriStatusOk); } else if(event == FuriHalSpiBusEventActivate) { - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusSPI1); } else if(event == FuriHalSpiBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusSPI1); } } @@ -131,28 +121,17 @@ FuriMutex* furi_hal_spi_bus_d_mutex = NULL; static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) { if(event == FuriHalSpiBusEventInit) { furi_hal_spi_bus_d_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalSpiBusEventDeinit) { furi_mutex_free(furi_hal_spi_bus_d_mutex); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalSpiBusEventLock) { furi_check(furi_mutex_acquire(furi_hal_spi_bus_d_mutex, FuriWaitForever) == FuriStatusOk); } else if(event == FuriHalSpiBusEventUnlock) { furi_check(furi_mutex_release(furi_hal_spi_bus_d_mutex) == FuriStatusOk); } else if(event == FuriHalSpiBusEventActivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusSPI2); } else if(event == FuriHalSpiBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusSPI2); } } diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index ae38d0c844..c033cf3ea4 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,27.0,, +Version,+,28.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -36,8 +36,10 @@ Header,+,applications/services/notification/notification_messages.h,, Header,+,applications/services/power/power_service/power.h,, Header,+,applications/services/rpc/rpc_app.h,, Header,+,applications/services/storage/storage.h,, +Header,+,firmware/targets/f7/furi_hal/furi_hal_bus.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_clock.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_console.h,, +Header,+,firmware/targets/f7/furi_hal/furi_hal_dma.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_flash.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_gpio.h,, Header,+,firmware/targets/f7/furi_hal/furi_hal_i2c_config.h,, @@ -84,6 +86,7 @@ Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_usb_hid_u2f.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_version.h,, Header,+,firmware/targets/furi_hal_include/furi_hal_vibro.h,, +Header,+,lib/digital_signal/digital_signal.h,, Header,+,lib/flipper_application/api_hashtable/api_hashtable.h,, Header,+,lib/flipper_application/api_hashtable/compilesort.hpp,, Header,+,lib/flipper_application/flipper_application.h,, @@ -1090,6 +1093,12 @@ Function,+,furi_hal_bt_stop_tone_tx,void, Function,+,furi_hal_bt_unlock_core2,void, Function,+,furi_hal_bt_update_battery_level,void,uint8_t Function,+,furi_hal_bt_update_power_state,void, +Function,+,furi_hal_bus_deinit_early,void, +Function,+,furi_hal_bus_disable,void,FuriHalBus +Function,+,furi_hal_bus_enable,void,FuriHalBus +Function,+,furi_hal_bus_init_early,void, +Function,+,furi_hal_bus_is_enabled,_Bool,FuriHalBus +Function,+,furi_hal_bus_reset,void,FuriHalBus Function,+,furi_hal_cdc_get_ctrl_line_state,uint8_t,uint8_t Function,+,furi_hal_cdc_get_port_settings,usb_cdc_line_coding*,uint8_t Function,+,furi_hal_cdc_receive,int32_t,"uint8_t, uint8_t*, uint16_t" @@ -1132,6 +1141,8 @@ Function,+,furi_hal_debug_disable,void, Function,+,furi_hal_debug_enable,void, Function,+,furi_hal_debug_is_gdb_session_active,_Bool, Function,-,furi_hal_deinit_early,void, +Function,+,furi_hal_dma_deinit_early,void, +Function,+,furi_hal_dma_init_early,void, Function,-,furi_hal_flash_erase,void,uint8_t Function,-,furi_hal_flash_get_base,size_t, Function,-,furi_hal_flash_get_cycles_count,size_t, @@ -1300,6 +1311,7 @@ Function,+,furi_hal_pwm_start,void,"FuriHalPwmOutputId, uint32_t, uint8_t" Function,+,furi_hal_pwm_stop,void,FuriHalPwmOutputId Function,+,furi_hal_random_fill_buf,void,"uint8_t*, uint32_t" Function,+,furi_hal_random_get,uint32_t, +Function,+,furi_hal_random_init,void, Function,+,furi_hal_region_get,const FuriHalRegion*, Function,+,furi_hal_region_get_band,const FuriHalRegionBand*,uint32_t Function,+,furi_hal_region_get_name,const char*, @@ -1310,35 +1322,29 @@ Function,-,furi_hal_resources_deinit_early,void, Function,+,furi_hal_resources_get_ext_pin_number,int32_t,const GpioPin* Function,-,furi_hal_resources_init,void, Function,-,furi_hal_resources_init_early,void, -Function,+,furi_hal_rfid_change_read_config,void,"float, float" Function,+,furi_hal_rfid_comp_set_callback,void,"FuriHalRfidCompCallback, void*" Function,+,furi_hal_rfid_comp_start,void, Function,+,furi_hal_rfid_comp_stop,void, Function,-,furi_hal_rfid_init,void, Function,+,furi_hal_rfid_pin_pull_pulldown,void, Function,+,furi_hal_rfid_pin_pull_release,void, -Function,+,furi_hal_rfid_pins_emulate,void, -Function,+,furi_hal_rfid_pins_read,void, Function,+,furi_hal_rfid_pins_reset,void, -Function,+,furi_hal_rfid_set_emulate_period,void,uint32_t -Function,+,furi_hal_rfid_set_emulate_pulse,void,uint32_t Function,+,furi_hal_rfid_set_read_period,void,uint32_t Function,+,furi_hal_rfid_set_read_pulse,void,uint32_t -Function,+,furi_hal_rfid_tim_emulate,void,float Function,+,furi_hal_rfid_tim_emulate_dma_start,void,"uint32_t*, uint32_t*, size_t, FuriHalRfidDMACallback, void*" Function,+,furi_hal_rfid_tim_emulate_dma_stop,void, -Function,+,furi_hal_rfid_tim_emulate_start,void,"FuriHalRfidEmulateCallback, void*" -Function,+,furi_hal_rfid_tim_emulate_stop,void, -Function,+,furi_hal_rfid_tim_read,void,"float, float" Function,+,furi_hal_rfid_tim_read_capture_start,void,"FuriHalRfidReadCaptureCallback, void*" Function,+,furi_hal_rfid_tim_read_capture_stop,void, -Function,+,furi_hal_rfid_tim_read_start,void, +Function,+,furi_hal_rfid_tim_read_continue,void, +Function,+,furi_hal_rfid_tim_read_pause,void, +Function,+,furi_hal_rfid_tim_read_start,void,"float, float" Function,+,furi_hal_rfid_tim_read_stop,void, -Function,+,furi_hal_rfid_tim_reset,void, Function,+,furi_hal_rtc_datetime_to_timestamp,uint32_t,FuriHalRtcDateTime* Function,-,furi_hal_rtc_deinit_early,void, Function,+,furi_hal_rtc_get_boot_mode,FuriHalRtcBootMode, Function,+,furi_hal_rtc_get_datetime,void,FuriHalRtcDateTime* +Function,+,furi_hal_rtc_get_days_per_month,uint8_t,"_Bool, uint8_t" +Function,+,furi_hal_rtc_get_days_per_year,uint16_t,uint16_t Function,+,furi_hal_rtc_get_fault_data,uint32_t, Function,+,furi_hal_rtc_get_heap_track_mode,FuriHalRtcHeapTrackMode, Function,+,furi_hal_rtc_get_locale_dateformat,FuriHalRtcLocaleDateFormat, @@ -1351,6 +1357,7 @@ Function,+,furi_hal_rtc_get_timestamp,uint32_t, Function,-,furi_hal_rtc_init,void, Function,-,furi_hal_rtc_init_early,void, Function,+,furi_hal_rtc_is_flag_set,_Bool,FuriHalRtcFlag +Function,+,furi_hal_rtc_is_leap_year,_Bool,uint16_t Function,+,furi_hal_rtc_reset_flag,void,FuriHalRtcFlag Function,+,furi_hal_rtc_set_boot_mode,void,FuriHalRtcBootMode Function,+,furi_hal_rtc_set_datetime,void,FuriHalRtcDateTime* @@ -1811,9 +1818,6 @@ Function,-,j1f,float,float Function,-,jn,double,"int, double" Function,-,jnf,float,"int, float" Function,-,jrand48,long,unsigned short[3] -Function,-,keeloq_reset_kl_type,void, -Function,-,keeloq_reset_mfname,void, -Function,-,keeloq_reset_original_btn,void, Function,-,l64a,char*,long Function,-,labs,long,long Function,-,lcong48,void,unsigned short[7] @@ -2039,6 +2043,8 @@ Function,-,mf_df_cat_key_settings,void,"MifareDesfireKeySettings*, FuriString*" Function,-,mf_df_cat_version,void,"MifareDesfireVersion*, FuriString*" Function,-,mf_df_check_card_type,_Bool,"uint8_t, uint8_t, uint8_t" Function,-,mf_df_clear,void,MifareDesfireData* +Function,-,mf_df_get_application,MifareDesfireApplication*,"MifareDesfireData*, const uint8_t[3]*" +Function,-,mf_df_get_file,MifareDesfireFile*,"MifareDesfireApplication*, uint8_t" Function,-,mf_df_parse_get_application_ids_response,_Bool,"uint8_t*, uint16_t, MifareDesfireApplication**" Function,-,mf_df_parse_get_file_ids_response,_Bool,"uint8_t*, uint16_t, MifareDesfireFile**" Function,-,mf_df_parse_get_file_settings_response,_Bool,"uint8_t*, uint16_t, MifareDesfireFile*" @@ -2555,8 +2561,6 @@ Function,+,srand,void,unsigned Function,-,srand48,void,long Function,-,srandom,void,unsigned Function,+,sscanf,int,"const char*, const char*, ..." -Function,-,star_line_reset_kl_type,void, -Function,-,star_line_reset_mfname,void, Function,+,storage_common_copy,FS_Error,"Storage*, const char*, const char*" Function,+,storage_common_exists,_Bool,"Storage*, const char*" Function,+,storage_common_fs_info,FS_Error,"Storage*, const char*, uint64_t*, uint64_t*" @@ -2703,13 +2707,6 @@ Function,+,subghz_block_generic_deserialize,SubGhzProtocolStatus,"SubGhzBlockGen Function,+,subghz_block_generic_deserialize_check_count_bit,SubGhzProtocolStatus,"SubGhzBlockGeneric*, FlipperFormat*, uint16_t" Function,+,subghz_block_generic_get_preset_name,void,"const char*, FuriString*" Function,+,subghz_block_generic_serialize,SubGhzProtocolStatus,"SubGhzBlockGeneric*, FlipperFormat*, SubGhzRadioPreset*" -Function,-,subghz_custom_btn_get,uint8_t, -Function,-,subghz_custom_btn_get_original,uint8_t, -Function,-,subghz_custom_btn_is_allowed,_Bool, -Function,-,subghz_custom_btn_set,_Bool,uint8_t -Function,-,subghz_custom_btn_set_max,void,uint8_t -Function,-,subghz_custom_btn_set_original,void,uint8_t -Function,-,subghz_custom_btns_reset,void, Function,+,subghz_environment_alloc,SubGhzEnvironment*, Function,+,subghz_environment_free,void,SubGhzEnvironment* Function,+,subghz_environment_get_alutech_at_4n_rainbow_table_file_name,const char*,SubGhzEnvironment* @@ -2719,6 +2716,7 @@ Function,+,subghz_environment_get_nice_flor_s_rainbow_table_file_name,const char Function,+,subghz_environment_get_protocol_name_registry,const char*,"SubGhzEnvironment*, size_t" Function,+,subghz_environment_get_protocol_registry,void*,SubGhzEnvironment* Function,+,subghz_environment_load_keystore,_Bool,"SubGhzEnvironment*, const char*" +Function,+,subghz_environment_reset_keeloq,void,SubGhzEnvironment* Function,+,subghz_environment_set_alutech_at_4n_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*" Function,+,subghz_environment_set_came_atomo_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*" Function,+,subghz_environment_set_nice_flor_s_rainbow_table_file_name,void,"SubGhzEnvironment*, const char*" @@ -2729,6 +2727,7 @@ Function,-,subghz_keystore_get_data,SubGhzKeyArray_t*,SubGhzKeystore* Function,-,subghz_keystore_load,_Bool,"SubGhzKeystore*, const char*" Function,-,subghz_keystore_raw_encrypted_save,_Bool,"const char*, const char*, uint8_t*" Function,-,subghz_keystore_raw_get_data,_Bool,"const char*, size_t, uint8_t*, size_t" +Function,-,subghz_keystore_reset_kl,void,SubGhzKeystore* Function,-,subghz_keystore_save,_Bool,"SubGhzKeystore*, const char*, uint8_t*" Function,-,subghz_protocol_alutech_at_4n_create_data,_Bool,"void*, FlipperFormat*, uint32_t, uint8_t, uint16_t, SubGhzRadioPreset*" Function,+,subghz_protocol_blocks_add_bit,void,"SubGhzBlockDecoder*, uint8_t" @@ -3367,6 +3366,7 @@ Function,+,submenu_set_header,void,"Submenu*, const char*" Function,+,submenu_set_selected_item,void,"Submenu*, uint32_t" Function,-,system,int,const char* Function,+,t5577_write,void,LFRFIDT5577* +Function,-,t5577_write_with_pass,void,"LFRFIDT5577*, uint32_t" Function,-,tan,double,double Function,-,tanf,float,float Function,-,tanh,double,double @@ -3539,6 +3539,8 @@ Function,+,version_get,const Version*, Function,+,version_get_builddate,const char*,const Version* Function,+,version_get_custom_name,const char*,const Version* Function,+,version_get_dirty_flag,_Bool,const Version* +Function,+,version_get_firmware_origin,const char*,const Version* +Function,+,version_get_git_origin,const char*,const Version* Function,+,version_get_gitbranch,const char*,const Version* Function,+,version_get_gitbranchnum,const char*,const Version* Function,+,version_get_githash,const char*,const Version* diff --git a/firmware/targets/f7/furi_hal/furi_hal.c b/firmware/targets/f7/furi_hal/furi_hal.c index c9b4c80887..691729ccf9 100644 --- a/firmware/targets/f7/furi_hal/furi_hal.c +++ b/firmware/targets/f7/furi_hal/furi_hal.c @@ -9,6 +9,8 @@ void furi_hal_init_early() { furi_hal_cortex_init_early(); furi_hal_clock_init_early(); + furi_hal_bus_init_early(); + furi_hal_dma_init_early(); furi_hal_resources_init_early(); furi_hal_os_init(); furi_hal_spi_config_init_early(); @@ -22,12 +24,15 @@ void furi_hal_deinit_early() { furi_hal_i2c_deinit_early(); furi_hal_spi_config_deinit_early(); furi_hal_resources_deinit_early(); + furi_hal_dma_deinit_early(); + furi_hal_bus_deinit_early(); furi_hal_clock_deinit_early(); } void furi_hal_init() { furi_hal_mpu_init(); furi_hal_clock_init(); + furi_hal_random_init(); furi_hal_console_init(); furi_hal_rtc_init(); furi_hal_interrupt_init(); diff --git a/firmware/targets/f7/furi_hal/furi_hal_bt.c b/firmware/targets/f7/furi_hal/furi_hal_bt.c index 4e8b3091fc..7939c5c8ea 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_bt.c +++ b/firmware/targets/f7/furi_hal/furi_hal_bt.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "battery_service.h" #include @@ -80,6 +81,11 @@ FuriHalBtProfileConfig profile_config[FuriHalBtProfileNumber] = { FuriHalBtProfileConfig* current_profile = NULL; void furi_hal_bt_init() { + furi_hal_bus_enable(FuriHalBusHSEM); + furi_hal_bus_enable(FuriHalBusIPCC); + furi_hal_bus_enable(FuriHalBusAES2); + furi_hal_bus_enable(FuriHalBusPKA); + if(!furi_hal_bt_core2_mtx) { furi_hal_bt_core2_mtx = furi_mutex_alloc(FuriMutexTypeNormal); furi_assert(furi_hal_bt_core2_mtx); @@ -269,6 +275,11 @@ void furi_hal_bt_reinit() { furi_delay_ms(100); ble_glue_thread_stop(); + furi_hal_bus_disable(FuriHalBusHSEM); + furi_hal_bus_disable(FuriHalBusIPCC); + furi_hal_bus_disable(FuriHalBusAES2); + furi_hal_bus_disable(FuriHalBusPKA); + FURI_LOG_I(TAG, "Start BT initialization"); furi_hal_bt_init(); diff --git a/firmware/targets/f7/furi_hal/furi_hal_bus.c b/firmware/targets/f7/furi_hal/furi_hal_bus.c new file mode 100644 index 0000000000..0a07e9f9e6 --- /dev/null +++ b/firmware/targets/f7/furi_hal/furi_hal_bus.c @@ -0,0 +1,302 @@ +#include +#include + +#include + +/* Bus bitmask definitions */ +#define FURI_HAL_BUS_IGNORE (0x0U) + +#define FURI_HAL_BUS_AHB1_GRP1 \ + (LL_AHB1_GRP1_PERIPH_DMA1 | LL_AHB1_GRP1_PERIPH_DMA2 | LL_AHB1_GRP1_PERIPH_DMAMUX1 | \ + LL_AHB1_GRP1_PERIPH_CRC | LL_AHB1_GRP1_PERIPH_TSC) + +#if defined(ADC_SUPPORT_5_MSPS) +#define FURI_HAL_BUS_AHB2_GRP1 \ + (LL_AHB2_GRP1_PERIPH_GPIOA | LL_AHB2_GRP1_PERIPH_GPIOB | LL_AHB2_GRP1_PERIPH_GPIOC | \ + LL_AHB2_GRP1_PERIPH_GPIOD | LL_AHB2_GRP1_PERIPH_GPIOE | LL_AHB2_GRP1_PERIPH_GPIOH | \ + LL_AHB2_GRP1_PERIPH_ADC | LL_AHB2_GRP1_PERIPH_AES1) + +#define FURI_HAL_BUS_APB2_GRP1 \ + (LL_APB2_GRP1_PERIPH_TIM1 | LL_APB2_GRP1_PERIPH_SPI1 | LL_APB2_GRP1_PERIPH_USART1 | \ + LL_APB2_GRP1_PERIPH_TIM16 | LL_APB2_GRP1_PERIPH_TIM17 | LL_APB2_GRP1_PERIPH_SAI1) +#else +#define FURI_HAL_BUS_AHB2_GRP1 \ + (LL_AHB2_GRP1_PERIPH_GPIOA | LL_AHB2_GRP1_PERIPH_GPIOB | LL_AHB2_GRP1_PERIPH_GPIOC | \ + LL_AHB2_GRP1_PERIPH_GPIOD | LL_AHB2_GRP1_PERIPH_GPIOE | LL_AHB2_GRP1_PERIPH_GPIOH | \ + LL_AHB2_GRP1_PERIPH_AES1) + +#define FURI_HAL_BUS_APB2_GRP1 \ + (LL_APB2_GRP1_PERIPH_ADC | LL_APB2_GRP1_PERIPH_TIM1 | LL_APB2_GRP1_PERIPH_SPI1 | \ + LL_APB2_GRP1_PERIPH_USART1 | LL_APB2_GRP1_PERIPH_TIM16 | LL_APB2_GRP1_PERIPH_TIM17 | \ + LL_APB2_GRP1_PERIPH_SAI1) +#endif + +#define FURI_HAL_BUS_AHB3_GRP1 \ + (LL_AHB3_GRP1_PERIPH_QUADSPI | LL_AHB3_GRP1_PERIPH_PKA | LL_AHB3_GRP1_PERIPH_AES2 | \ + LL_AHB3_GRP1_PERIPH_RNG | LL_AHB3_GRP1_PERIPH_HSEM | LL_AHB3_GRP1_PERIPH_IPCC) +// LL_AHB3_GRP1_PERIPH_FLASH enabled by default + +#define FURI_HAL_BUS_APB1_GRP1 \ + (LL_APB1_GRP1_PERIPH_TIM2 | LL_APB1_GRP1_PERIPH_LCD | LL_APB1_GRP1_PERIPH_RTCAPB | \ + LL_APB1_GRP1_PERIPH_SPI2 | LL_APB1_GRP1_PERIPH_I2C1 | LL_APB1_GRP1_PERIPH_I2C3 | \ + LL_APB1_GRP1_PERIPH_CRS | LL_APB1_GRP1_PERIPH_USB | LL_APB1_GRP1_PERIPH_LPTIM1) + +#define FURI_HAL_BUS_APB1_GRP2 (LL_APB1_GRP2_PERIPH_LPUART1 | LL_APB1_GRP2_PERIPH_LPTIM2) +#define FURI_HAL_BUS_APB3_GRP1 (LL_APB3_GRP1_PERIPH_RF) + +/* Test macro definitions */ +#define FURI_HAL_BUS_IS_ALL_CLEAR(reg, value) (READ_BIT((reg), (value)) == 0UL) +#define FURI_HAL_BUS_IS_ALL_SET(reg, value) (READ_BIT((reg), (value)) == (value)) + +#define FURI_HAL_BUS_IS_CLOCK_ENABLED(bus, value, ...) \ + (FURI_HAL_BUS_IS_ALL_SET(RCC->bus##ENR##__VA_ARGS__, (value))) +#define FURI_HAL_BUS_IS_CLOCK_DISABLED(bus, value, ...) \ + (FURI_HAL_BUS_IS_ALL_CLEAR(RCC->bus##ENR##__VA_ARGS__, (value))) + +#define FURI_HAL_BUS_IS_RESET_ASSERTED(bus, value, ...) \ + (FURI_HAL_BUS_IS_ALL_SET(RCC->bus##RSTR##__VA_ARGS__, (value))) +#define FURI_HAL_BUS_IS_RESET_DEASSERTED(bus, value, ...) \ + (FURI_HAL_BUS_IS_ALL_CLEAR(RCC->bus##RSTR##__VA_ARGS__, (value))) + +#define FURI_HAL_BUS_IS_PERIPH_ENABLED(bus, value, ...) \ + (FURI_HAL_BUS_IS_RESET_DEASSERTED(bus, (value), __VA_ARGS__) && \ + FURI_HAL_BUS_IS_CLOCK_ENABLED(bus, (value), __VA_ARGS__)) + +#define FURI_HAL_BUS_IS_PERIPH_DISABLED(bus, value, ...) \ + (FURI_HAL_BUS_IS_CLOCK_DISABLED(bus, (value), __VA_ARGS__) && \ + FURI_HAL_BUS_IS_RESET_ASSERTED(bus, (value), __VA_ARGS__)) + +/* Control macro definitions */ +#define FURI_HAL_BUS_RESET_ASSERT(bus, value, grp) LL_##bus##_GRP##grp##_ForceReset(value) +#define FURI_HAL_BUS_RESET_DEASSERT(bus, value, grp) LL_##bus##_GRP##grp##_ReleaseReset(value) + +#define FURI_HAL_BUS_CLOCK_ENABLE(bus, value, grp) LL_##bus##_GRP##grp##_EnableClock(value) +#define FURI_HAL_BUS_CLOCK_DISABLE(bus, value, grp) LL_##bus##_GRP##grp##_DisableClock(value) + +#define FURI_HAL_BUS_PERIPH_ENABLE(bus, value, grp) \ + FURI_HAL_BUS_CLOCK_ENABLE(bus, value, grp); \ + FURI_HAL_BUS_RESET_DEASSERT(bus, value, grp) + +#define FURI_HAL_BUS_PERIPH_DISABLE(bus, value, grp) \ + FURI_HAL_BUS_RESET_ASSERT(bus, value, grp); \ + FURI_HAL_BUS_CLOCK_DISABLE(bus, value, grp) + +#define FURI_HAL_BUS_PERIPH_RESET(bus, value, grp) \ + FURI_HAL_BUS_RESET_ASSERT(bus, value, grp); \ + FURI_HAL_BUS_RESET_DEASSERT(bus, value, grp) + +static const uint32_t furi_hal_bus[] = { + [FuriHalBusAHB1_GRP1] = FURI_HAL_BUS_AHB1_GRP1, + [FuriHalBusDMA1] = LL_AHB1_GRP1_PERIPH_DMA1, + [FuriHalBusDMA2] = LL_AHB1_GRP1_PERIPH_DMA2, + [FuriHalBusDMAMUX1] = LL_AHB1_GRP1_PERIPH_DMAMUX1, + [FuriHalBusCRC] = LL_AHB1_GRP1_PERIPH_CRC, + [FuriHalBusTSC] = LL_AHB1_GRP1_PERIPH_TSC, + + [FuriHalBusAHB2_GRP1] = FURI_HAL_BUS_AHB2_GRP1, + [FuriHalBusGPIOA] = LL_AHB2_GRP1_PERIPH_GPIOA, + [FuriHalBusGPIOB] = LL_AHB2_GRP1_PERIPH_GPIOB, + [FuriHalBusGPIOC] = LL_AHB2_GRP1_PERIPH_GPIOC, + [FuriHalBusGPIOD] = LL_AHB2_GRP1_PERIPH_GPIOD, + [FuriHalBusGPIOE] = LL_AHB2_GRP1_PERIPH_GPIOE, + [FuriHalBusGPIOH] = LL_AHB2_GRP1_PERIPH_GPIOH, +#if defined(ADC_SUPPORT_5_MSPS) + [FuriHalBusADC] = LL_AHB2_GRP1_PERIPH_ADC, +#endif + [FuriHalBusAES1] = LL_AHB2_GRP1_PERIPH_AES1, + + [FuriHalBusAHB3_GRP1] = FURI_HAL_BUS_AHB3_GRP1, + [FuriHalBusQUADSPI] = LL_AHB3_GRP1_PERIPH_QUADSPI, + [FuriHalBusPKA] = LL_AHB3_GRP1_PERIPH_PKA, + [FuriHalBusAES2] = LL_AHB3_GRP1_PERIPH_AES2, + [FuriHalBusRNG] = LL_AHB3_GRP1_PERIPH_RNG, + [FuriHalBusHSEM] = LL_AHB3_GRP1_PERIPH_HSEM, + [FuriHalBusIPCC] = LL_AHB3_GRP1_PERIPH_IPCC, + [FuriHalBusFLASH] = LL_AHB3_GRP1_PERIPH_FLASH, + + [FuriHalBusAPB1_GRP1] = FURI_HAL_BUS_APB1_GRP1, + [FuriHalBusTIM2] = LL_APB1_GRP1_PERIPH_TIM2, + [FuriHalBusLCD] = LL_APB1_GRP1_PERIPH_LCD, + [FuriHalBusSPI2] = LL_APB1_GRP1_PERIPH_SPI2, + [FuriHalBusI2C1] = LL_APB1_GRP1_PERIPH_I2C1, + [FuriHalBusI2C3] = LL_APB1_GRP1_PERIPH_I2C3, + [FuriHalBusCRS] = LL_APB1_GRP1_PERIPH_CRS, + [FuriHalBusUSB] = LL_APB1_GRP1_PERIPH_USB, + [FuriHalBusLPTIM1] = LL_APB1_GRP1_PERIPH_LPTIM1, + + [FuriHalBusAPB1_GRP2] = FURI_HAL_BUS_APB1_GRP2, + [FuriHalBusLPUART1] = LL_APB1_GRP2_PERIPH_LPUART1, + [FuriHalBusLPTIM2] = LL_APB1_GRP2_PERIPH_LPTIM2, + + [FuriHalBusAPB2_GRP1] = FURI_HAL_BUS_APB2_GRP1, +#if defined(ADC_SUPPORT_2_5_MSPS) + [FuriHalBusADC] = LL_APB2_GRP1_PERIPH_ADC, +#endif + [FuriHalBusTIM1] = LL_APB2_GRP1_PERIPH_TIM1, + [FuriHalBusSPI1] = LL_APB2_GRP1_PERIPH_SPI1, + [FuriHalBusUSART1] = LL_APB2_GRP1_PERIPH_USART1, + [FuriHalBusTIM16] = LL_APB2_GRP1_PERIPH_TIM16, + [FuriHalBusTIM17] = LL_APB2_GRP1_PERIPH_TIM17, + [FuriHalBusSAI1] = LL_APB2_GRP1_PERIPH_SAI1, + + [FuriHalBusAPB3_GRP1] = FURI_HAL_BUS_IGNORE, // APB3_GRP1 clocking cannot be changed + [FuriHalBusRF] = LL_APB3_GRP1_PERIPH_RF, +}; + +void furi_hal_bus_init_early() { + FURI_CRITICAL_ENTER(); + + FURI_HAL_BUS_PERIPH_DISABLE(AHB1, FURI_HAL_BUS_AHB1_GRP1, 1); + FURI_HAL_BUS_PERIPH_DISABLE(AHB2, FURI_HAL_BUS_AHB2_GRP1, 1); + FURI_HAL_BUS_PERIPH_DISABLE(AHB3, FURI_HAL_BUS_AHB3_GRP1, 1); + FURI_HAL_BUS_PERIPH_DISABLE(APB1, FURI_HAL_BUS_APB1_GRP1, 1); + FURI_HAL_BUS_PERIPH_DISABLE(APB1, FURI_HAL_BUS_APB1_GRP2, 2); + FURI_HAL_BUS_PERIPH_DISABLE(APB2, FURI_HAL_BUS_APB2_GRP1, 1); + + FURI_HAL_BUS_RESET_ASSERT(APB3, FURI_HAL_BUS_APB3_GRP1, 1); + + FURI_CRITICAL_EXIT(); +} + +void furi_hal_bus_deinit_early() { + FURI_CRITICAL_ENTER(); + + FURI_HAL_BUS_PERIPH_ENABLE(AHB1, FURI_HAL_BUS_AHB1_GRP1, 1); + FURI_HAL_BUS_PERIPH_ENABLE(AHB2, FURI_HAL_BUS_AHB2_GRP1, 1); + FURI_HAL_BUS_PERIPH_ENABLE(AHB3, FURI_HAL_BUS_AHB3_GRP1, 1); + FURI_HAL_BUS_PERIPH_ENABLE(APB1, FURI_HAL_BUS_APB1_GRP1, 1); + FURI_HAL_BUS_PERIPH_ENABLE(APB1, FURI_HAL_BUS_APB1_GRP2, 2); + FURI_HAL_BUS_PERIPH_ENABLE(APB2, FURI_HAL_BUS_APB2_GRP1, 1); + + FURI_HAL_BUS_RESET_DEASSERT(APB3, FURI_HAL_BUS_APB3_GRP1, 1); + + FURI_CRITICAL_EXIT(); +} + +void furi_hal_bus_enable(FuriHalBus bus) { + furi_check(bus < FuriHalBusMAX); + const uint32_t value = furi_hal_bus[bus]; + if(!value) { + return; + } + + FURI_CRITICAL_ENTER(); + if(bus < FuriHalBusAHB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(AHB1, value)); + FURI_HAL_BUS_PERIPH_ENABLE(AHB1, value, 1); + } else if(bus < FuriHalBusAHB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(AHB2, value)); + FURI_HAL_BUS_PERIPH_ENABLE(AHB2, value, 1); + } else if(bus < FuriHalBusAPB1_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(AHB3, value)); + FURI_HAL_BUS_PERIPH_ENABLE(AHB3, value, 1); + } else if(bus < FuriHalBusAPB1_GRP2) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(APB1, value, 1)); + FURI_HAL_BUS_PERIPH_ENABLE(APB1, value, 1); + } else if(bus < FuriHalBusAPB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(APB1, value, 2)); + FURI_HAL_BUS_PERIPH_ENABLE(APB1, value, 2); + } else if(bus < FuriHalBusAPB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_DISABLED(APB2, value)); + FURI_HAL_BUS_PERIPH_ENABLE(APB2, value, 1); + } else { + furi_check(FURI_HAL_BUS_IS_RESET_ASSERTED(APB3, value)); + FURI_HAL_BUS_RESET_DEASSERT(APB3, FURI_HAL_BUS_APB3_GRP1, 1); + } + FURI_CRITICAL_EXIT(); +} + +void furi_hal_bus_reset(FuriHalBus bus) { + furi_check(bus < FuriHalBusMAX); + const uint32_t value = furi_hal_bus[bus]; + if(!value) { + return; + } + + FURI_CRITICAL_ENTER(); + if(bus < FuriHalBusAHB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB1, value)); + FURI_HAL_BUS_PERIPH_RESET(AHB1, value, 1); + } else if(bus < FuriHalBusAHB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB2, value)); + FURI_HAL_BUS_PERIPH_RESET(AHB2, value, 1); + } else if(bus < FuriHalBusAPB1_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB3, value)); + FURI_HAL_BUS_PERIPH_RESET(AHB3, value, 1); + } else if(bus < FuriHalBusAPB1_GRP2) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 1)); + FURI_HAL_BUS_PERIPH_RESET(APB1, value, 1); + } else if(bus < FuriHalBusAPB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 2)); + FURI_HAL_BUS_PERIPH_RESET(APB1, value, 2); + } else if(bus < FuriHalBusAPB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB2, value)); + FURI_HAL_BUS_PERIPH_RESET(APB2, value, 1); + } else { + furi_check(FURI_HAL_BUS_IS_RESET_DEASSERTED(APB3, value)); + FURI_HAL_BUS_PERIPH_RESET(APB3, value, 1); + } + FURI_CRITICAL_EXIT(); +} + +void furi_hal_bus_disable(FuriHalBus bus) { + furi_check(bus < FuriHalBusMAX); + const uint32_t value = furi_hal_bus[bus]; + if(!value) { + return; + } + + FURI_CRITICAL_ENTER(); + if(bus < FuriHalBusAHB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB1, value)); + FURI_HAL_BUS_PERIPH_DISABLE(AHB1, value, 1); + } else if(bus < FuriHalBusAHB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB2, value)); + FURI_HAL_BUS_PERIPH_DISABLE(AHB2, value, 1); + } else if(bus < FuriHalBusAPB1_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB3, value)); + FURI_HAL_BUS_PERIPH_DISABLE(AHB3, value, 1); + } else if(bus < FuriHalBusAPB1_GRP2) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 1)); + FURI_HAL_BUS_PERIPH_DISABLE(APB1, value, 1); + } else if(bus < FuriHalBusAPB2_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 2)); + FURI_HAL_BUS_PERIPH_DISABLE(APB1, value, 2); + } else if(bus < FuriHalBusAPB3_GRP1) { + furi_check(FURI_HAL_BUS_IS_PERIPH_ENABLED(APB2, value)); + FURI_HAL_BUS_PERIPH_DISABLE(APB2, value, 1); + } else { + furi_check(FURI_HAL_BUS_IS_RESET_DEASSERTED(APB3, value)); + FURI_HAL_BUS_RESET_ASSERT(APB3, FURI_HAL_BUS_APB3_GRP1, 1); + } + FURI_CRITICAL_EXIT(); +} + +bool furi_hal_bus_is_enabled(FuriHalBus bus) { + furi_check(bus < FuriHalBusMAX); + const uint32_t value = furi_hal_bus[bus]; + if(value == FURI_HAL_BUS_IGNORE) { + return true; + } + + bool ret = false; + FURI_CRITICAL_ENTER(); + if(bus < FuriHalBusAHB2_GRP1) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB1, value); + } else if(bus < FuriHalBusAHB3_GRP1) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB2, value); + } else if(bus < FuriHalBusAPB1_GRP1) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(AHB3, value); + } else if(bus < FuriHalBusAPB1_GRP2) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 1); + } else if(bus < FuriHalBusAPB2_GRP1) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(APB1, value, 2); + } else if(bus < FuriHalBusAPB3_GRP1) { + ret = FURI_HAL_BUS_IS_PERIPH_ENABLED(APB2, value); + } else { + ret = FURI_HAL_BUS_IS_RESET_DEASSERTED(APB3, value); + } + FURI_CRITICAL_EXIT(); + + return ret; +} diff --git a/firmware/targets/f7/furi_hal/furi_hal_bus.h b/firmware/targets/f7/furi_hal/furi_hal_bus.h new file mode 100644 index 0000000000..ad4bbec324 --- /dev/null +++ b/firmware/targets/f7/furi_hal/furi_hal_bus.h @@ -0,0 +1,112 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stm32wbxx.h" +#include "stdbool.h" + +typedef enum { + FuriHalBusAHB1_GRP1, + FuriHalBusDMA1, + FuriHalBusDMA2, + FuriHalBusDMAMUX1, + FuriHalBusCRC, + FuriHalBusTSC, + + FuriHalBusAHB2_GRP1, + FuriHalBusGPIOA, + FuriHalBusGPIOB, + FuriHalBusGPIOC, + FuriHalBusGPIOD, + FuriHalBusGPIOE, + FuriHalBusGPIOH, +#if defined(ADC_SUPPORT_5_MSPS) + FuriHalBusADC, +#endif + FuriHalBusAES1, + + FuriHalBusAHB3_GRP1, + FuriHalBusQUADSPI, + FuriHalBusPKA, + FuriHalBusAES2, + FuriHalBusRNG, + FuriHalBusHSEM, + FuriHalBusIPCC, + FuriHalBusFLASH, + + FuriHalBusAPB1_GRP1, + FuriHalBusTIM2, + FuriHalBusLCD, + FuriHalBusSPI2, + FuriHalBusI2C1, + FuriHalBusI2C3, + FuriHalBusCRS, + FuriHalBusUSB, + FuriHalBusLPTIM1, + + FuriHalBusAPB1_GRP2, + FuriHalBusLPUART1, + FuriHalBusLPTIM2, + + FuriHalBusAPB2_GRP1, +#if defined(ADC_SUPPORT_2_5_MSPS) + FuriHalBusADC, +#endif + FuriHalBusTIM1, + FuriHalBusSPI1, + FuriHalBusUSART1, + FuriHalBusTIM16, + FuriHalBusTIM17, + FuriHalBusSAI1, + + FuriHalBusAPB3_GRP1, + FuriHalBusRF, + + FuriHalBusMAX, +} FuriHalBus; + +/** Early initialization */ +void furi_hal_bus_init_early(); + +/** Early de-initialization */ +void furi_hal_bus_deinit_early(); + +/** + * Enable a peripheral by turning the clocking on and deasserting the reset. + * @param [in] bus Peripheral to be enabled. + * @warning Peripheral must be in disabled state in order to be enabled. + */ +void furi_hal_bus_enable(FuriHalBus bus); + +/** + * Reset a peripheral by sequentially asserting and deasserting the reset. + * @param [in] bus Peripheral to be reset. + * @warning Peripheral must be in enabled state in order to be reset. + */ +void furi_hal_bus_reset(FuriHalBus bus); + +/** + * Disable a peripheral by turning the clocking off and asserting the reset. + * @param [in] bus Peripheral to be disabled. + * @warning Peripheral must be in enabled state in order to be disabled. + */ +void furi_hal_bus_disable(FuriHalBus bus); + +/** Check if peripheral is enabled + * + * @warning FuriHalBusAPB3_GRP1 is a special group of shared peripherals, for + * core1 its clock is always on and the only status we can report is + * peripheral reset status. Check code and Reference Manual for + * details. + * + * @param[in] bus The peripheral to check + * + * @return true if enabled or always enabled, false otherwise + */ +bool furi_hal_bus_is_enabled(FuriHalBus bus); + +#ifdef __cplusplus +} +#endif diff --git a/firmware/targets/f7/furi_hal/furi_hal_clock.c b/firmware/targets/f7/furi_hal/furi_hal_clock.c index a76fbfbca7..9d228f0f55 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_clock.c +++ b/firmware/targets/f7/furi_hal/furi_hal_clock.c @@ -6,7 +6,6 @@ #include #include #include -#include #define TAG "FuriHalClock" @@ -19,36 +18,9 @@ void furi_hal_clock_init_early() { LL_SetSystemCoreClock(CPU_CLOCK_HZ_EARLY); LL_Init1msTick(SystemCoreClock); - - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOE); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH); - - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2); - - LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPTIM2); - - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C3); } void furi_hal_clock_deinit_early() { - LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_I2C1); - LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_I2C3); - - LL_APB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_SPI1); - LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_SPI2); - - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOA); - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOB); - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOC); - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOD); - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOE); - LL_AHB2_GRP1_DisableClock(LL_AHB2_GRP1_PERIPH_GPIOH); } void furi_hal_clock_init() { @@ -137,68 +109,12 @@ void furi_hal_clock_init() { SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), TICK_INT_PRIORITY, 0)); NVIC_EnableIRQ(SysTick_IRQn); - LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2); - LL_RCC_SetLPUARTClockSource(LL_RCC_LPUART1_CLKSOURCE_PCLK1); - LL_RCC_SetADCClockSource(LL_RCC_ADC_CLKSOURCE_PLLSAI1); - LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1); - LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48); - LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1); LL_RCC_SetCLK48ClockSource(LL_RCC_CLK48_CLKSOURCE_PLLSAI1); LL_RCC_HSI_EnableInStopMode(); // Ensure that MR is capable of work in STOP0 LL_RCC_SetSMPSClockSource(LL_RCC_SMPS_CLKSOURCE_HSE); LL_RCC_SetSMPSPrescaler(LL_RCC_SMPS_DIV_1); LL_RCC_SetRFWKPClockSource(LL_RCC_RFWKP_CLKSOURCE_LSE); - // AHB1 GRP1 - LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); - LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA2); - LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMAMUX1); - LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_CRC); - // LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_TSC); - - // AHB2 GRP1 - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOE); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_ADC); - LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_AES1); - - // AHB3 GRP1 - // LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_QUADSPI); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PKA); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_AES2); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_RNG); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_HSEM); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_IPCC); - LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_FLASH); - - // APB1 GRP1 - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2); - // LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LCD); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_RTCAPB); - // LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_WWDG); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C1); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_I2C3); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_CRS); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USB); - LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_LPTIM1); - - // APB1 GRP2 - LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1); - - // APB2 - // LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SPI1); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM16); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM17); - // LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SAI1); - FURI_LOG_I(TAG, "Init OK"); } diff --git a/firmware/targets/f7/furi_hal/furi_hal_crypto.c b/firmware/targets/f7/furi_hal/furi_hal_crypto.c index e0ed3ab9be..eb5c3b782c 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_crypto.c +++ b/firmware/targets/f7/furi_hal/furi_hal_crypto.c @@ -1,8 +1,9 @@ #include #include #include +#include + #include -#include #include #include @@ -241,6 +242,8 @@ bool furi_hal_crypto_store_load_key(uint8_t slot, const uint8_t* iv) { furi_assert(furi_hal_crypto_mutex); furi_check(furi_mutex_acquire(furi_hal_crypto_mutex, FuriWaitForever) == FuriStatusOk); + furi_hal_bus_enable(FuriHalBusAES1); + if(!furi_hal_bt_is_alive()) { return false; } @@ -267,10 +270,7 @@ bool furi_hal_crypto_store_unload_key(uint8_t slot) { SHCI_CmdStatus_t shci_state = SHCI_C2_FUS_UnloadUsrKey(slot); furi_assert(shci_state == SHCI_Success); - FURI_CRITICAL_ENTER(); - LL_AHB2_GRP1_ForceReset(LL_AHB2_GRP1_PERIPH_AES1); - LL_AHB2_GRP1_ReleaseReset(LL_AHB2_GRP1_PERIPH_AES1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusAES1); furi_check(furi_mutex_release(furi_hal_crypto_mutex) == FuriStatusOk); return (shci_state == SHCI_Success); diff --git a/firmware/targets/f7/furi_hal/furi_hal_dma.c b/firmware/targets/f7/furi_hal/furi_hal_dma.c new file mode 100644 index 0000000000..a6a30d906d --- /dev/null +++ b/firmware/targets/f7/furi_hal/furi_hal_dma.c @@ -0,0 +1,14 @@ +#include +#include + +void furi_hal_dma_init_early() { + furi_hal_bus_enable(FuriHalBusDMA1); + furi_hal_bus_enable(FuriHalBusDMA2); + furi_hal_bus_enable(FuriHalBusDMAMUX1); +} + +void furi_hal_dma_deinit_early() { + furi_hal_bus_disable(FuriHalBusDMA1); + furi_hal_bus_disable(FuriHalBusDMA2); + furi_hal_bus_disable(FuriHalBusDMAMUX1); +} diff --git a/firmware/targets/f7/furi_hal/furi_hal_dma.h b/firmware/targets/f7/furi_hal/furi_hal_dma.h new file mode 100644 index 0000000000..cadcc7733e --- /dev/null +++ b/firmware/targets/f7/furi_hal/furi_hal_dma.h @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/** Early initialization */ +void furi_hal_dma_init_early(); + +/** Early de-initialization */ +void furi_hal_dma_deinit_early(); + +#ifdef __cplusplus +} +#endif diff --git a/firmware/targets/f7/furi_hal/furi_hal_flash.c b/firmware/targets/f7/furi_hal/furi_hal_flash.c index 94d269345b..796d20b19f 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_flash.c +++ b/firmware/targets/f7/furi_hal/furi_hal_flash.c @@ -11,20 +11,20 @@ #define TAG "FuriHalFlash" #define FURI_HAL_CRITICAL_MSG "Critical flash operation fail" -#define FURI_HAL_FLASH_READ_BLOCK 8 -#define FURI_HAL_FLASH_WRITE_BLOCK 8 -#define FURI_HAL_FLASH_PAGE_SIZE 4096 -#define FURI_HAL_FLASH_CYCLES_COUNT 10000 -#define FURI_HAL_FLASH_TIMEOUT 1000 -#define FURI_HAL_FLASH_KEY1 0x45670123U -#define FURI_HAL_FLASH_KEY2 0xCDEF89ABU -#define FURI_HAL_FLASH_TOTAL_PAGES 256 +#define FURI_HAL_FLASH_READ_BLOCK (8U) +#define FURI_HAL_FLASH_WRITE_BLOCK (8U) +#define FURI_HAL_FLASH_PAGE_SIZE (4096U) +#define FURI_HAL_FLASH_CYCLES_COUNT (10000U) +#define FURI_HAL_FLASH_TIMEOUT (1000U) +#define FURI_HAL_FLASH_KEY1 (0x45670123U) +#define FURI_HAL_FLASH_KEY2 (0xCDEF89ABU) +#define FURI_HAL_FLASH_TOTAL_PAGES (256U) #define FURI_HAL_FLASH_SR_ERRORS \ (FLASH_SR_OPERR | FLASH_SR_PROGERR | FLASH_SR_WRPERR | FLASH_SR_PGAERR | FLASH_SR_SIZERR | \ FLASH_SR_PGSERR | FLASH_SR_MISERR | FLASH_SR_FASTERR | FLASH_SR_RDERR | FLASH_SR_OPTVERR) -#define FURI_HAL_FLASH_OPT_KEY1 0x08192A3B -#define FURI_HAL_FLASH_OPT_KEY2 0x4C5D6E7F +#define FURI_HAL_FLASH_OPT_KEY1 (0x08192A3BU) +#define FURI_HAL_FLASH_OPT_KEY2 (0x4C5D6E7FU) #define FURI_HAL_FLASH_OB_TOTAL_WORDS (0x80 / (sizeof(uint32_t) * 2)) /* STM32CubeWB/Projects/P-NUCLEO-WB55.Nucleo/Applications/BLE/BLE_RfWithFlash/Core/Src/flash_driver.c @@ -35,7 +35,7 @@ > If for any reason this test is never passed, this means there is a failure in the system and there is no other > way to recover than applying a device reset. */ -#define FURI_HAL_FLASH_C2_LOCK_TIMEOUT_MS 3000u /* 3 seconds */ +#define FURI_HAL_FLASH_C2_LOCK_TIMEOUT_MS (3000U) /* 3 seconds */ #define IS_ADDR_ALIGNED_64BITS(__VALUE__) (((__VALUE__)&0x7U) == (0x00UL)) #define IS_FLASH_PROGRAM_ADDRESS(__VALUE__) \ diff --git a/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c index afc4fdf524..f9d88abb37 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c +++ b/firmware/targets/f7/furi_hal/furi_hal_i2c_config.c @@ -1,7 +1,8 @@ #include #include #include -#include +#include + #include /** Timing register value is computed with the STM32CubeMX Tool, @@ -21,17 +22,9 @@ FuriMutex* furi_hal_i2c_bus_power_mutex = NULL; static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) { if(event == FuriHalI2cBusEventInit) { furi_hal_i2c_bus_power_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalI2cBusEventDeinit) { furi_mutex_free(furi_hal_i2c_bus_power_mutex); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalI2cBusEventLock) { furi_check( furi_mutex_acquire(furi_hal_i2c_bus_power_mutex, FuriWaitForever) == FuriStatusOk); @@ -39,12 +32,11 @@ static void furi_hal_i2c_bus_power_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent furi_check(furi_mutex_release(furi_hal_i2c_bus_power_mutex) == FuriStatusOk); } else if(event == FuriHalI2cBusEventActivate) { FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C1); + furi_hal_bus_enable(FuriHalBusI2C1); + LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_PCLK1); FURI_CRITICAL_EXIT(); } else if(event == FuriHalI2cBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusI2C1); } } @@ -58,17 +50,9 @@ FuriMutex* furi_hal_i2c_bus_external_mutex = NULL; static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEvent event) { if(event == FuriHalI2cBusEventInit) { furi_hal_i2c_bus_external_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_RCC_SetI2CClockSource(LL_RCC_I2C3_CLKSOURCE_PCLK1); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalI2cBusEventDeinit) { furi_mutex_free(furi_hal_i2c_bus_external_mutex); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C3); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalI2cBusEventLock) { furi_check( furi_mutex_acquire(furi_hal_i2c_bus_external_mutex, FuriWaitForever) == FuriStatusOk); @@ -76,13 +60,11 @@ static void furi_hal_i2c_bus_external_event(FuriHalI2cBus* bus, FuriHalI2cBusEve furi_check(furi_mutex_release(furi_hal_i2c_bus_external_mutex) == FuriStatusOk); } else if(event == FuriHalI2cBusEventActivate) { FURI_CRITICAL_ENTER(); + furi_hal_bus_enable(FuriHalBusI2C3); LL_RCC_SetI2CClockSource(LL_RCC_I2C3_CLKSOURCE_PCLK1); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_I2C3); FURI_CRITICAL_EXIT(); } else if(event == FuriHalI2cBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_I2C3); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusI2C3); } } diff --git a/firmware/targets/f7/furi_hal/furi_hal_ibutton.c b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c index c8041c9f2c..f8f7e4966d 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_ibutton.c +++ b/firmware/targets/f7/furi_hal/furi_hal_ibutton.c @@ -1,14 +1,15 @@ #include #include #include +#include #include -#include #include #define TAG "FuriHalIbutton" #define FURI_HAL_IBUTTON_TIMER TIM1 +#define FURI_HAL_IBUTTON_TIMER_BUS FuriHalBusTIM1 #define FURI_HAL_IBUTTON_TIMER_IRQ FuriHalInterruptIdTim1UpTim16 typedef enum { @@ -49,9 +50,7 @@ void furi_hal_ibutton_emulate_start( furi_hal_ibutton->callback = callback; furi_hal_ibutton->context = context; - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(FURI_HAL_IBUTTON_TIMER); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FURI_HAL_IBUTTON_TIMER_BUS); furi_hal_interrupt_set_isr(FURI_HAL_IBUTTON_TIMER_IRQ, furi_hal_ibutton_emulate_isr, NULL); @@ -81,10 +80,7 @@ void furi_hal_ibutton_emulate_stop() { furi_hal_ibutton->state = FuriHalIbuttonStateIdle; LL_TIM_DisableCounter(FURI_HAL_IBUTTON_TIMER); - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(FURI_HAL_IBUTTON_TIMER); - FURI_CRITICAL_EXIT(); - + furi_hal_bus_disable(FURI_HAL_IBUTTON_TIMER_BUS); furi_hal_interrupt_set_isr(FURI_HAL_IBUTTON_TIMER_IRQ, NULL, NULL); furi_hal_ibutton->callback = NULL; diff --git a/firmware/targets/f7/furi_hal/furi_hal_idle_timer.h b/firmware/targets/f7/furi_hal/furi_hal_idle_timer.h index 9f91db14e6..e1ffb1b25f 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_idle_timer.h +++ b/firmware/targets/f7/furi_hal/furi_hal_idle_timer.h @@ -1,8 +1,10 @@ #pragma once #include -#include #include +#include + +#include // Timer used for tickless idle #define FURI_HAL_IDLE_TIMER_MAX 0xFFFF @@ -10,6 +12,7 @@ #define FURI_HAL_IDLE_TIMER_IRQ LPTIM1_IRQn static inline void furi_hal_idle_timer_init() { + furi_hal_bus_enable(FuriHalBusLPTIM1); // Configure clock source LL_RCC_SetLPTIMClockSource(LL_RCC_LPTIM1_CLKSOURCE_LSE); // There is a theoretical possibility that we need it @@ -40,7 +43,7 @@ static inline void furi_hal_idle_timer_start(uint32_t count) { static inline void furi_hal_idle_timer_reset() { // Hard reset timer // THE ONLY RELIABLE WAY to stop it according to errata - LL_LPTIM_DeInit(FURI_HAL_IDLE_TIMER); + furi_hal_bus_reset(FuriHalBusLPTIM1); // Prevent IRQ handler call NVIC_ClearPendingIRQ(FURI_HAL_IDLE_TIMER_IRQ); } diff --git a/firmware/targets/f7/furi_hal/furi_hal_info.c b/firmware/targets/f7/furi_hal/furi_hal_info.c index 4c034ff352..47672c97a3 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_info.c +++ b/firmware/targets/f7/furi_hal/furi_hal_info.c @@ -26,7 +26,7 @@ void furi_hal_info_get(PropertyValueCallback out, char sep, void* context) { property_value_out(&property_context, NULL, 2, "format", "minor", "1"); } else { property_value_out(&property_context, NULL, 3, "device", "info", "major", "2"); - property_value_out(&property_context, NULL, 3, "device", "info", "minor", "1"); + property_value_out(&property_context, NULL, 3, "device", "info", "minor", "2"); } // Model name @@ -173,6 +173,24 @@ void furi_hal_info_get(PropertyValueCallback out, char sep, void* context) { &property_context, "%d", 3, "firmware", "api", "major", api_version_major); property_value_out( &property_context, "%d", 3, "firmware", "api", "minor", api_version_minor); + + property_value_out( + &property_context, + NULL, + 3, + "firmware", + "origin", + "fork", + version_get_firmware_origin(firmware_version)); + + property_value_out( + &property_context, + NULL, + 3, + "firmware", + "origin", + "git", + version_get_git_origin(firmware_version)); } if(furi_hal_bt_is_alive()) { diff --git a/firmware/targets/f7/furi_hal/furi_hal_infrared.c b/firmware/targets/f7/furi_hal/furi_hal_infrared.c index e833c47317..e6fb693079 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_infrared.c +++ b/firmware/targets/f7/furi_hal/furi_hal_infrared.c @@ -1,14 +1,11 @@ #include -#include -#include "stm32wbxx_ll_dma.h" #include #include +#include -#include #include -#include +#include -#include #include #include @@ -21,13 +18,23 @@ (TIM_CCMR2_OC3PE | LL_TIM_OCMODE_FORCED_INACTIVE) /* Space time - force low */ /* DMA Channels definition */ -#define IR_DMA DMA2 -#define IR_DMA_CH1_CHANNEL LL_DMA_CHANNEL_1 -#define IR_DMA_CH2_CHANNEL LL_DMA_CHANNEL_2 -#define IR_DMA_CH1_IRQ FuriHalInterruptIdDma2Ch1 -#define IR_DMA_CH2_IRQ FuriHalInterruptIdDma2Ch2 -#define IR_DMA_CH1_DEF IR_DMA, IR_DMA_CH1_CHANNEL -#define IR_DMA_CH2_DEF IR_DMA, IR_DMA_CH2_CHANNEL +#define INFRARED_DMA DMA2 +#define INFRARED_DMA_CH1_CHANNEL LL_DMA_CHANNEL_1 +#define INFRARED_DMA_CH2_CHANNEL LL_DMA_CHANNEL_2 +#define INFRARED_DMA_CH1_IRQ FuriHalInterruptIdDma2Ch1 +#define INFRARED_DMA_CH2_IRQ FuriHalInterruptIdDma2Ch2 +#define INFRARED_DMA_CH1_DEF INFRARED_DMA, INFRARED_DMA_CH1_CHANNEL +#define INFRARED_DMA_CH2_DEF INFRARED_DMA, INFRARED_DMA_CH2_CHANNEL + +/* Timers definition */ +#define INFRARED_RX_TIMER TIM2 +#define INFRARED_DMA_TIMER TIM1 +#define INFRARED_RX_TIMER_BUS FuriHalBusTIM2 +#define INFRARED_DMA_TIMER_BUS FuriHalBusTIM1 + +/* Misc */ +#define INFRARED_RX_GPIO_ALT GpioAltFn1TIM2 +#define INFRARED_RX_IRQ FuriHalInterruptIdTIM2 typedef struct { FuriHalInfraredRxCaptureCallback capture_callback; @@ -94,8 +101,8 @@ static void furi_hal_infrared_tim_rx_isr() { static uint32_t previous_captured_ch2 = 0; /* Timeout */ - if(LL_TIM_IsActiveFlag_CC3(TIM2)) { - LL_TIM_ClearFlag_CC3(TIM2); + if(LL_TIM_IsActiveFlag_CC3(INFRARED_RX_TIMER)) { + LL_TIM_ClearFlag_CC3(INFRARED_RX_TIMER); furi_assert(furi_hal_infrared_state == InfraredStateAsyncRx); /* Timers CNT register starts to counting from 0 to ARR, but it is @@ -111,13 +118,13 @@ static void furi_hal_infrared_tim_rx_isr() { } /* Rising Edge */ - if(LL_TIM_IsActiveFlag_CC1(TIM2)) { - LL_TIM_ClearFlag_CC1(TIM2); + if(LL_TIM_IsActiveFlag_CC1(INFRARED_RX_TIMER)) { + LL_TIM_ClearFlag_CC1(INFRARED_RX_TIMER); furi_assert(furi_hal_infrared_state == InfraredStateAsyncRx); - if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC1S)) { + if(READ_BIT(INFRARED_RX_TIMER->CCMR1, TIM_CCMR1_CC1S)) { /* Low pin level is a Mark state of INFRARED signal. Invert level for further processing. */ - uint32_t duration = LL_TIM_IC_GetCaptureCH1(TIM2) - previous_captured_ch2; + uint32_t duration = LL_TIM_IC_GetCaptureCH1(INFRARED_RX_TIMER) - previous_captured_ch2; if(infrared_tim_rx.capture_callback) infrared_tim_rx.capture_callback(infrared_tim_rx.capture_context, 1, duration); } else { @@ -126,13 +133,13 @@ static void furi_hal_infrared_tim_rx_isr() { } /* Falling Edge */ - if(LL_TIM_IsActiveFlag_CC2(TIM2)) { - LL_TIM_ClearFlag_CC2(TIM2); + if(LL_TIM_IsActiveFlag_CC2(INFRARED_RX_TIMER)) { + LL_TIM_ClearFlag_CC2(INFRARED_RX_TIMER); furi_assert(furi_hal_infrared_state == InfraredStateAsyncRx); - if(READ_BIT(TIM2->CCMR1, TIM_CCMR1_CC2S)) { + if(READ_BIT(INFRARED_RX_TIMER->CCMR1, TIM_CCMR1_CC2S)) { /* High pin level is a Space state of INFRARED signal. Invert level for further processing. */ - uint32_t duration = LL_TIM_IC_GetCaptureCH2(TIM2); + uint32_t duration = LL_TIM_IC_GetCaptureCH2(INFRARED_RX_TIMER); previous_captured_ch2 = duration; if(infrared_tim_rx.capture_callback) infrared_tim_rx.capture_callback(infrared_tim_rx.capture_context, 0, duration); @@ -146,62 +153,66 @@ void furi_hal_infrared_async_rx_start(void) { furi_assert(furi_hal_infrared_state == InfraredStateIdle); furi_hal_gpio_init_ex( - &gpio_infrared_rx, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn1TIM2); + &gpio_infrared_rx, + GpioModeAltFunctionPushPull, + GpioPullNo, + GpioSpeedLow, + INFRARED_RX_GPIO_ALT); + + furi_hal_bus_enable(INFRARED_RX_TIMER_BUS); LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Prescaler = 64 - 1; TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct.Autoreload = 0x7FFFFFFE; TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; - LL_TIM_Init(TIM2, &TIM_InitStruct); - - LL_TIM_SetClockSource(TIM2, LL_TIM_CLOCKSOURCE_INTERNAL); - LL_TIM_DisableARRPreload(TIM2); - LL_TIM_SetTriggerInput(TIM2, LL_TIM_TS_TI1FP1); - LL_TIM_SetSlaveMode(TIM2, LL_TIM_SLAVEMODE_RESET); - LL_TIM_CC_DisableChannel(TIM2, LL_TIM_CHANNEL_CH2); - LL_TIM_IC_SetFilter(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_IC_FILTER_FDIV1); - LL_TIM_IC_SetPolarity(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_IC_POLARITY_FALLING); - LL_TIM_DisableIT_TRIG(TIM2); - LL_TIM_DisableDMAReq_TRIG(TIM2); - LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET); - LL_TIM_EnableMasterSlaveMode(TIM2); - LL_TIM_IC_SetActiveInput(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_ACTIVEINPUT_DIRECTTI); - LL_TIM_IC_SetPrescaler(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_ICPSC_DIV1); - LL_TIM_IC_SetFilter(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1); - LL_TIM_IC_SetPolarity(TIM2, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_RISING); - LL_TIM_IC_SetActiveInput(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_ACTIVEINPUT_INDIRECTTI); - LL_TIM_IC_SetPrescaler(TIM2, LL_TIM_CHANNEL_CH2, LL_TIM_ICPSC_DIV1); - - furi_hal_interrupt_set_isr(FuriHalInterruptIdTIM2, furi_hal_infrared_tim_rx_isr, NULL); + LL_TIM_Init(INFRARED_RX_TIMER, &TIM_InitStruct); + + LL_TIM_SetClockSource(INFRARED_RX_TIMER, LL_TIM_CLOCKSOURCE_INTERNAL); + LL_TIM_DisableARRPreload(INFRARED_RX_TIMER); + LL_TIM_SetTriggerInput(INFRARED_RX_TIMER, LL_TIM_TS_TI1FP1); + LL_TIM_SetSlaveMode(INFRARED_RX_TIMER, LL_TIM_SLAVEMODE_RESET); + LL_TIM_CC_DisableChannel(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2); + LL_TIM_IC_SetFilter(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2, LL_TIM_IC_FILTER_FDIV1); + LL_TIM_IC_SetPolarity(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2, LL_TIM_IC_POLARITY_FALLING); + LL_TIM_DisableIT_TRIG(INFRARED_RX_TIMER); + LL_TIM_DisableDMAReq_TRIG(INFRARED_RX_TIMER); + LL_TIM_SetTriggerOutput(INFRARED_RX_TIMER, LL_TIM_TRGO_RESET); + LL_TIM_EnableMasterSlaveMode(INFRARED_RX_TIMER); + LL_TIM_IC_SetActiveInput(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH1, LL_TIM_ACTIVEINPUT_DIRECTTI); + LL_TIM_IC_SetPrescaler(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH1, LL_TIM_ICPSC_DIV1); + LL_TIM_IC_SetFilter(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1); + LL_TIM_IC_SetPolarity(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_RISING); + LL_TIM_IC_SetActiveInput(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2, LL_TIM_ACTIVEINPUT_INDIRECTTI); + LL_TIM_IC_SetPrescaler(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2, LL_TIM_ICPSC_DIV1); + + furi_hal_interrupt_set_isr(INFRARED_RX_IRQ, furi_hal_infrared_tim_rx_isr, NULL); furi_hal_infrared_state = InfraredStateAsyncRx; - LL_TIM_EnableIT_CC1(TIM2); - LL_TIM_EnableIT_CC2(TIM2); - LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH1); - LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH2); + LL_TIM_EnableIT_CC1(INFRARED_RX_TIMER); + LL_TIM_EnableIT_CC2(INFRARED_RX_TIMER); + LL_TIM_CC_EnableChannel(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH1); + LL_TIM_CC_EnableChannel(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH2); - LL_TIM_SetCounter(TIM2, 0); - LL_TIM_EnableCounter(TIM2); + LL_TIM_SetCounter(INFRARED_RX_TIMER, 0); + LL_TIM_EnableCounter(INFRARED_RX_TIMER); } void furi_hal_infrared_async_rx_stop(void) { furi_assert(furi_hal_infrared_state == InfraredStateAsyncRx); FURI_CRITICAL_ENTER(); - - LL_TIM_DeInit(TIM2); - furi_hal_interrupt_set_isr(FuriHalInterruptIdTIM2, NULL, NULL); + furi_hal_bus_disable(INFRARED_RX_TIMER_BUS); + furi_hal_interrupt_set_isr(INFRARED_RX_IRQ, NULL, NULL); furi_hal_infrared_state = InfraredStateIdle; - FURI_CRITICAL_EXIT(); } void furi_hal_infrared_async_rx_set_timeout(uint32_t timeout_us) { - LL_TIM_OC_SetCompareCH3(TIM2, timeout_us); - LL_TIM_OC_SetMode(TIM2, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_ACTIVE); - LL_TIM_CC_EnableChannel(TIM2, LL_TIM_CHANNEL_CH3); - LL_TIM_EnableIT_CC3(TIM2); + LL_TIM_OC_SetCompareCH3(INFRARED_RX_TIMER, timeout_us); + LL_TIM_OC_SetMode(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_ACTIVE); + LL_TIM_CC_EnableChannel(INFRARED_RX_TIMER, LL_TIM_CHANNEL_CH3); + LL_TIM_EnableIT_CC3(INFRARED_RX_TIMER); } bool furi_hal_infrared_is_busy(void) { @@ -223,16 +234,16 @@ void furi_hal_infrared_async_rx_set_timeout_isr_callback( } static void furi_hal_infrared_tx_dma_terminate(void) { - LL_DMA_DisableIT_TC(IR_DMA_CH1_DEF); - LL_DMA_DisableIT_HT(IR_DMA_CH2_DEF); - LL_DMA_DisableIT_TC(IR_DMA_CH2_DEF); + LL_DMA_DisableIT_TC(INFRARED_DMA_CH1_DEF); + LL_DMA_DisableIT_HT(INFRARED_DMA_CH2_DEF); + LL_DMA_DisableIT_TC(INFRARED_DMA_CH2_DEF); furi_assert(furi_hal_infrared_state == InfraredStateAsyncTxStopInProgress); - LL_DMA_DisableIT_TC(IR_DMA_CH1_DEF); - LL_DMA_DisableChannel(IR_DMA_CH2_DEF); - LL_DMA_DisableChannel(IR_DMA_CH1_DEF); - LL_TIM_DisableCounter(TIM1); + LL_DMA_DisableIT_TC(INFRARED_DMA_CH1_DEF); + LL_DMA_DisableChannel(INFRARED_DMA_CH2_DEF); + LL_DMA_DisableChannel(INFRARED_DMA_CH1_DEF); + LL_TIM_DisableCounter(INFRARED_DMA_TIMER); FuriStatus status = furi_semaphore_release(infrared_tim_tx.stop_semaphore); furi_check(status == FuriStatusOk); furi_hal_infrared_state = InfraredStateAsyncTxStopped; @@ -240,7 +251,7 @@ static void furi_hal_infrared_tx_dma_terminate(void) { static uint8_t furi_hal_infrared_get_current_dma_tx_buffer(void) { uint8_t buf_num = 0; - uint32_t buffer_adr = LL_DMA_GetMemoryAddress(IR_DMA_CH2_DEF); + uint32_t buffer_adr = LL_DMA_GetMemoryAddress(INFRARED_DMA_CH2_DEF); if(buffer_adr == (uint32_t)infrared_tim_tx.buffer[0].data) { buf_num = 0; } else if(buffer_adr == (uint32_t)infrared_tim_tx.buffer[1].data) { @@ -252,13 +263,13 @@ static uint8_t furi_hal_infrared_get_current_dma_tx_buffer(void) { } static void furi_hal_infrared_tx_dma_polarity_isr() { -#if IR_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 - if(LL_DMA_IsActiveFlag_TE1(IR_DMA)) { - LL_DMA_ClearFlag_TE1(IR_DMA); +#if INFRARED_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 + if(LL_DMA_IsActiveFlag_TE1(INFRARED_DMA)) { + LL_DMA_ClearFlag_TE1(INFRARED_DMA); furi_crash(NULL); } - if(LL_DMA_IsActiveFlag_TC1(IR_DMA) && LL_DMA_IsEnabledIT_TC(IR_DMA_CH1_DEF)) { - LL_DMA_ClearFlag_TC1(IR_DMA); + if(LL_DMA_IsActiveFlag_TC1(INFRARED_DMA) && LL_DMA_IsEnabledIT_TC(INFRARED_DMA_CH1_DEF)) { + LL_DMA_ClearFlag_TC1(INFRARED_DMA); furi_check( (furi_hal_infrared_state == InfraredStateAsyncTx) || @@ -274,23 +285,23 @@ static void furi_hal_infrared_tx_dma_polarity_isr() { } static void furi_hal_infrared_tx_dma_isr() { -#if IR_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2 - if(LL_DMA_IsActiveFlag_TE2(IR_DMA)) { - LL_DMA_ClearFlag_TE2(IR_DMA); +#if INFRARED_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2 + if(LL_DMA_IsActiveFlag_TE2(INFRARED_DMA)) { + LL_DMA_ClearFlag_TE2(INFRARED_DMA); furi_crash(NULL); } - if(LL_DMA_IsActiveFlag_HT2(IR_DMA) && LL_DMA_IsEnabledIT_HT(IR_DMA_CH2_DEF)) { - LL_DMA_ClearFlag_HT2(IR_DMA); + if(LL_DMA_IsActiveFlag_HT2(INFRARED_DMA) && LL_DMA_IsEnabledIT_HT(INFRARED_DMA_CH2_DEF)) { + LL_DMA_ClearFlag_HT2(INFRARED_DMA); uint8_t buf_num = furi_hal_infrared_get_current_dma_tx_buffer(); uint8_t next_buf_num = !buf_num; if(infrared_tim_tx.buffer[buf_num].last_packet_end) { - LL_DMA_DisableIT_HT(IR_DMA_CH2_DEF); + LL_DMA_DisableIT_HT(INFRARED_DMA_CH2_DEF); } else if( !infrared_tim_tx.buffer[buf_num].packet_end || (furi_hal_infrared_state == InfraredStateAsyncTx)) { furi_hal_infrared_tx_fill_buffer(next_buf_num, 0); if(infrared_tim_tx.buffer[next_buf_num].last_packet_end) { - LL_DMA_DisableIT_HT(IR_DMA_CH2_DEF); + LL_DMA_DisableIT_HT(INFRARED_DMA_CH2_DEF); } } else if(furi_hal_infrared_state == InfraredStateAsyncTxStopReq) { /* fallthrough */ @@ -298,8 +309,8 @@ static void furi_hal_infrared_tx_dma_isr() { furi_crash(NULL); } } - if(LL_DMA_IsActiveFlag_TC2(IR_DMA) && LL_DMA_IsEnabledIT_TC(IR_DMA_CH2_DEF)) { - LL_DMA_ClearFlag_TC2(IR_DMA); + if(LL_DMA_IsActiveFlag_TC2(INFRARED_DMA) && LL_DMA_IsEnabledIT_TC(INFRARED_DMA_CH2_DEF)) { + LL_DMA_ClearFlag_TC2(INFRARED_DMA); furi_check( (furi_hal_infrared_state == InfraredStateAsyncTxStopInProgress) || (furi_hal_infrared_state == InfraredStateAsyncTxStopReq) || @@ -331,37 +342,42 @@ static void furi_hal_infrared_tx_dma_isr() { } static void furi_hal_infrared_configure_tim_pwm_tx(uint32_t freq, float duty_cycle) { - LL_TIM_DisableCounter(TIM1); - LL_TIM_SetRepetitionCounter(TIM1, 0); - LL_TIM_SetCounter(TIM1, 0); - LL_TIM_SetPrescaler(TIM1, 0); - LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP); - LL_TIM_EnableARRPreload(TIM1); + LL_TIM_DisableCounter(INFRARED_DMA_TIMER); + LL_TIM_SetRepetitionCounter(INFRARED_DMA_TIMER, 0); + LL_TIM_SetCounter(INFRARED_DMA_TIMER, 0); + LL_TIM_SetPrescaler(INFRARED_DMA_TIMER, 0); + LL_TIM_SetCounterMode(INFRARED_DMA_TIMER, LL_TIM_COUNTERMODE_UP); + LL_TIM_EnableARRPreload(INFRARED_DMA_TIMER); LL_TIM_SetAutoReload( - TIM1, __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(TIM1), freq)); + INFRARED_DMA_TIMER, + __LL_TIM_CALC_ARR(SystemCoreClock, LL_TIM_GetPrescaler(INFRARED_DMA_TIMER), freq)); if(infrared_external_output) { - LL_TIM_OC_SetCompareCH1(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle))); - LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH1); + LL_TIM_OC_SetCompareCH1( + INFRARED_DMA_TIMER, + ((LL_TIM_GetAutoReload(INFRARED_DMA_TIMER) + 1) * (1 - duty_cycle))); + LL_TIM_OC_EnablePreload(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH1); /* LL_TIM_OCMODE_PWM2 set by DMA */ - LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_FORCED_INACTIVE); - LL_TIM_OC_SetPolarity(TIM1, LL_TIM_CHANNEL_CH1N, LL_TIM_OCPOLARITY_HIGH); - LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH1); - LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N); - LL_TIM_DisableIT_CC1(TIM1); + LL_TIM_OC_SetMode(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH1, LL_TIM_OCMODE_FORCED_INACTIVE); + LL_TIM_OC_SetPolarity(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH1N, LL_TIM_OCPOLARITY_HIGH); + LL_TIM_OC_DisableFast(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH1); + LL_TIM_CC_EnableChannel(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH1N); + LL_TIM_DisableIT_CC1(INFRARED_DMA_TIMER); } else { - LL_TIM_OC_SetCompareCH3(TIM1, ((LL_TIM_GetAutoReload(TIM1) + 1) * (1 - duty_cycle))); - LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH3); + LL_TIM_OC_SetCompareCH3( + INFRARED_DMA_TIMER, + ((LL_TIM_GetAutoReload(INFRARED_DMA_TIMER) + 1) * (1 - duty_cycle))); + LL_TIM_OC_EnablePreload(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH3); /* LL_TIM_OCMODE_PWM2 set by DMA */ - LL_TIM_OC_SetMode(TIM1, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_FORCED_INACTIVE); - LL_TIM_OC_SetPolarity(TIM1, LL_TIM_CHANNEL_CH3N, LL_TIM_OCPOLARITY_HIGH); - LL_TIM_OC_DisableFast(TIM1, LL_TIM_CHANNEL_CH3); - LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH3N); - LL_TIM_DisableIT_CC3(TIM1); + LL_TIM_OC_SetMode(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH3, LL_TIM_OCMODE_FORCED_INACTIVE); + LL_TIM_OC_SetPolarity(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH3N, LL_TIM_OCPOLARITY_HIGH); + LL_TIM_OC_DisableFast(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH3); + LL_TIM_CC_EnableChannel(INFRARED_DMA_TIMER, LL_TIM_CHANNEL_CH3N); + LL_TIM_DisableIT_CC3(INFRARED_DMA_TIMER); } - LL_TIM_DisableMasterSlaveMode(TIM1); - LL_TIM_EnableAllOutputs(TIM1); - LL_TIM_DisableIT_UPDATE(TIM1); - LL_TIM_EnableDMAReq_UPDATE(TIM1); + LL_TIM_DisableMasterSlaveMode(INFRARED_DMA_TIMER); + LL_TIM_EnableAllOutputs(INFRARED_DMA_TIMER); + LL_TIM_DisableIT_UPDATE(INFRARED_DMA_TIMER); + LL_TIM_EnableDMAReq_UPDATE(INFRARED_DMA_TIMER); NVIC_SetPriority(TIM1_UP_TIM16_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0)); NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); @@ -370,9 +386,9 @@ static void furi_hal_infrared_configure_tim_pwm_tx(uint32_t freq, float duty_cyc static void furi_hal_infrared_configure_tim_cmgr2_dma_tx(void) { LL_DMA_InitTypeDef dma_config = {0}; if(infrared_external_output) { - dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR1); + dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (INFRARED_DMA_TIMER->CCMR1); } else { - dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->CCMR2); + dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (INFRARED_DMA_TIMER->CCMR2); } dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL; dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; @@ -385,24 +401,25 @@ static void furi_hal_infrared_configure_tim_cmgr2_dma_tx(void) { dma_config.NbData = 0; dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM1_UP; dma_config.Priority = LL_DMA_PRIORITY_VERYHIGH; - LL_DMA_Init(IR_DMA_CH1_DEF, &dma_config); + LL_DMA_Init(INFRARED_DMA_CH1_DEF, &dma_config); -#if IR_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 - LL_DMA_ClearFlag_TE1(IR_DMA); - LL_DMA_ClearFlag_TC1(IR_DMA); +#if INFRARED_DMA_CH1_CHANNEL == LL_DMA_CHANNEL_1 + LL_DMA_ClearFlag_TE1(INFRARED_DMA); + LL_DMA_ClearFlag_TC1(INFRARED_DMA); #else #error Update this code. Would you kindly? #endif - LL_DMA_EnableIT_TE(IR_DMA_CH1_DEF); - LL_DMA_EnableIT_TC(IR_DMA_CH1_DEF); + LL_DMA_EnableIT_TE(INFRARED_DMA_CH1_DEF); + LL_DMA_EnableIT_TC(INFRARED_DMA_CH1_DEF); - furi_hal_interrupt_set_isr_ex(IR_DMA_CH1_IRQ, 4, furi_hal_infrared_tx_dma_polarity_isr, NULL); + furi_hal_interrupt_set_isr_ex( + INFRARED_DMA_CH1_IRQ, 4, furi_hal_infrared_tx_dma_polarity_isr, NULL); } static void furi_hal_infrared_configure_tim_rcr_dma_tx(void) { LL_DMA_InitTypeDef dma_config = {0}; - dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (TIM1->RCR); + dma_config.PeriphOrM2MSrcAddress = (uint32_t) & (INFRARED_DMA_TIMER->RCR); dma_config.MemoryOrM2MDstAddress = (uint32_t)NULL; dma_config.Direction = LL_DMA_DIRECTION_MEMORY_TO_PERIPH; dma_config.Mode = LL_DMA_MODE_NORMAL; @@ -413,21 +430,21 @@ static void furi_hal_infrared_configure_tim_rcr_dma_tx(void) { dma_config.NbData = 0; dma_config.PeriphRequest = LL_DMAMUX_REQ_TIM1_UP; dma_config.Priority = LL_DMA_PRIORITY_MEDIUM; - LL_DMA_Init(IR_DMA_CH2_DEF, &dma_config); + LL_DMA_Init(INFRARED_DMA_CH2_DEF, &dma_config); -#if IR_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2 - LL_DMA_ClearFlag_TC2(IR_DMA); - LL_DMA_ClearFlag_HT2(IR_DMA); - LL_DMA_ClearFlag_TE2(IR_DMA); +#if INFRARED_DMA_CH2_CHANNEL == LL_DMA_CHANNEL_2 + LL_DMA_ClearFlag_TC2(INFRARED_DMA); + LL_DMA_ClearFlag_HT2(INFRARED_DMA); + LL_DMA_ClearFlag_TE2(INFRARED_DMA); #else #error Update this code. Would you kindly? #endif - LL_DMA_EnableIT_TC(IR_DMA_CH2_DEF); - LL_DMA_EnableIT_HT(IR_DMA_CH2_DEF); - LL_DMA_EnableIT_TE(IR_DMA_CH2_DEF); + LL_DMA_EnableIT_TC(INFRARED_DMA_CH2_DEF); + LL_DMA_EnableIT_HT(INFRARED_DMA_CH2_DEF); + LL_DMA_EnableIT_TE(INFRARED_DMA_CH2_DEF); - furi_hal_interrupt_set_isr_ex(IR_DMA_CH2_IRQ, 5, furi_hal_infrared_tx_dma_isr, NULL); + furi_hal_interrupt_set_isr_ex(INFRARED_DMA_CH2_IRQ, 5, furi_hal_infrared_tx_dma_isr, NULL); } static void furi_hal_infrared_tx_fill_buffer_last(uint8_t buf_num) { @@ -529,14 +546,14 @@ static void furi_hal_infrared_tx_dma_set_polarity(uint8_t buf_num, uint8_t polar furi_assert(buffer->polarity != NULL); FURI_CRITICAL_ENTER(); - bool channel_enabled = LL_DMA_IsEnabledChannel(IR_DMA_CH1_DEF); + bool channel_enabled = LL_DMA_IsEnabledChannel(INFRARED_DMA_CH1_DEF); if(channel_enabled) { - LL_DMA_DisableChannel(IR_DMA_CH1_DEF); + LL_DMA_DisableChannel(INFRARED_DMA_CH1_DEF); } - LL_DMA_SetMemoryAddress(IR_DMA_CH1_DEF, (uint32_t)buffer->polarity); - LL_DMA_SetDataLength(IR_DMA_CH1_DEF, buffer->size + polarity_shift); + LL_DMA_SetMemoryAddress(INFRARED_DMA_CH1_DEF, (uint32_t)buffer->polarity); + LL_DMA_SetDataLength(INFRARED_DMA_CH1_DEF, buffer->size + polarity_shift); if(channel_enabled) { - LL_DMA_EnableChannel(IR_DMA_CH1_DEF); + LL_DMA_EnableChannel(INFRARED_DMA_CH1_DEF); } FURI_CRITICAL_EXIT(); } @@ -549,14 +566,14 @@ static void furi_hal_infrared_tx_dma_set_buffer(uint8_t buf_num) { /* non-circular mode requires disabled channel before setup */ FURI_CRITICAL_ENTER(); - bool channel_enabled = LL_DMA_IsEnabledChannel(IR_DMA_CH2_DEF); + bool channel_enabled = LL_DMA_IsEnabledChannel(INFRARED_DMA_CH2_DEF); if(channel_enabled) { - LL_DMA_DisableChannel(IR_DMA_CH2_DEF); + LL_DMA_DisableChannel(INFRARED_DMA_CH2_DEF); } - LL_DMA_SetMemoryAddress(IR_DMA_CH2_DEF, (uint32_t)buffer->data); - LL_DMA_SetDataLength(IR_DMA_CH2_DEF, buffer->size); + LL_DMA_SetMemoryAddress(INFRARED_DMA_CH2_DEF, (uint32_t)buffer->data); + LL_DMA_SetDataLength(INFRARED_DMA_CH2_DEF, buffer->size); if(channel_enabled) { - LL_DMA_EnableChannel(IR_DMA_CH2_DEF); + LL_DMA_EnableChannel(INFRARED_DMA_CH2_DEF); } FURI_CRITICAL_EXIT(); } @@ -571,9 +588,10 @@ static void furi_hal_infrared_async_tx_free_resources(void) { } else { furi_hal_gpio_init(&gpio_infrared_tx, GpioModeAnalog, GpioPullDown, GpioSpeedLow); } - furi_hal_interrupt_set_isr(IR_DMA_CH1_IRQ, NULL, NULL); - furi_hal_interrupt_set_isr(IR_DMA_CH2_IRQ, NULL, NULL); - LL_TIM_DeInit(TIM1); + furi_hal_interrupt_set_isr(INFRARED_DMA_CH1_IRQ, NULL, NULL); + furi_hal_interrupt_set_isr(INFRARED_DMA_CH2_IRQ, NULL, NULL); + + furi_hal_bus_disable(INFRARED_DMA_TIMER_BUS); furi_semaphore_free(infrared_tim_tx.stop_semaphore); free(infrared_tim_tx.buffer[0].data); @@ -614,6 +632,8 @@ void furi_hal_infrared_async_tx_start(uint32_t freq, float duty_cycle) { furi_hal_infrared_tx_fill_buffer(0, INFRARED_POLARITY_SHIFT); + furi_hal_bus_enable(INFRARED_DMA_TIMER_BUS); + furi_hal_infrared_configure_tim_pwm_tx(freq, duty_cycle); furi_hal_infrared_configure_tim_cmgr2_dma_tx(); furi_hal_infrared_configure_tim_rcr_dma_tx(); @@ -622,11 +642,11 @@ void furi_hal_infrared_async_tx_start(uint32_t freq, float duty_cycle) { furi_hal_infrared_state = InfraredStateAsyncTx; - LL_TIM_ClearFlag_UPDATE(TIM1); - LL_DMA_EnableChannel(IR_DMA_CH1_DEF); - LL_DMA_EnableChannel(IR_DMA_CH2_DEF); + LL_TIM_ClearFlag_UPDATE(INFRARED_DMA_TIMER); + LL_DMA_EnableChannel(INFRARED_DMA_CH1_DEF); + LL_DMA_EnableChannel(INFRARED_DMA_CH2_DEF); furi_delay_us(5); - LL_TIM_GenerateEvent_UPDATE(TIM1); /* DMA -> TIMx_RCR */ + LL_TIM_GenerateEvent_UPDATE(INFRARED_DMA_TIMER); /* DMA -> TIMx_RCR */ furi_delay_us(5); if(infrared_external_output) { LL_GPIO_ResetOutputPin( @@ -646,8 +666,8 @@ void furi_hal_infrared_async_tx_start(uint32_t freq, float duty_cycle) { } FURI_CRITICAL_ENTER(); - LL_TIM_GenerateEvent_UPDATE(TIM1); /* TIMx_RCR -> Repetition counter */ - LL_TIM_EnableCounter(TIM1); + LL_TIM_GenerateEvent_UPDATE(INFRARED_DMA_TIMER); /* TIMx_RCR -> Repetition counter */ + LL_TIM_EnableCounter(INFRARED_DMA_TIMER); FURI_CRITICAL_EXIT(); } diff --git a/firmware/targets/f7/furi_hal/furi_hal_pwm.c b/firmware/targets/f7/furi_hal/furi_hal_pwm.c index 8f84b5fd8d..7e985cbb11 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_pwm.c +++ b/firmware/targets/f7/furi_hal/furi_hal_pwm.c @@ -1,8 +1,7 @@ #include -#include #include +#include -#include #include #include #include @@ -29,9 +28,7 @@ void furi_hal_pwm_start(FuriHalPwmOutputId channel, uint32_t freq, uint8_t duty) GpioSpeedVeryHigh, GpioAltFn1TIM1); - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(TIM1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusTIM1); LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP); LL_TIM_SetRepetitionCounter(TIM1, 0); @@ -58,9 +55,7 @@ void furi_hal_pwm_start(FuriHalPwmOutputId channel, uint32_t freq, uint8_t duty) GpioSpeedVeryHigh, GpioAltFn14LPTIM2); - FURI_CRITICAL_ENTER(); - LL_LPTIM_DeInit(LPTIM2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusLPTIM2); LL_LPTIM_SetUpdateMode(LPTIM2, LL_LPTIM_UPDATE_MODE_ENDOFPERIOD); LL_RCC_SetLPTIMClockSource(LL_RCC_LPTIM2_CLKSOURCE_PCLK1); @@ -80,14 +75,10 @@ void furi_hal_pwm_start(FuriHalPwmOutputId channel, uint32_t freq, uint8_t duty) void furi_hal_pwm_stop(FuriHalPwmOutputId channel) { if(channel == FuriHalPwmOutputIdTim1PA7) { furi_hal_gpio_init_simple(&gpio_ext_pa7, GpioModeAnalog); - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(TIM1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusTIM1); } else if(channel == FuriHalPwmOutputIdLptim2PA4) { furi_hal_gpio_init_simple(&gpio_ext_pa4, GpioModeAnalog); - FURI_CRITICAL_ENTER(); - LL_LPTIM_DeInit(LPTIM2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusLPTIM2); } } diff --git a/firmware/targets/f7/furi_hal/furi_hal_random.c b/firmware/targets/f7/furi_hal/furi_hal_random.c index d3461c4d12..cf4b552f6d 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_random.c +++ b/firmware/targets/f7/furi_hal/furi_hal_random.c @@ -1,8 +1,9 @@ #include +#include #include -#include #include +#include #include #include @@ -32,6 +33,11 @@ static uint32_t furi_hal_random_read_rng() { return LL_RNG_ReadRandData32(RNG); } +void furi_hal_random_init() { + furi_hal_bus_enable(FuriHalBusRNG); + LL_RCC_SetRNGClockSource(LL_RCC_RNG_CLKSOURCE_CLK48); +} + uint32_t furi_hal_random_get() { while(LL_HSEM_1StepLock(HSEM, CFG_HW_RNG_SEMID)) ; @@ -40,6 +46,7 @@ uint32_t furi_hal_random_get() { const uint32_t random_val = furi_hal_random_read_rng(); LL_RNG_Disable(RNG); + ; LL_HSEM_ReleaseLock(HSEM, CFG_HW_RNG_SEMID, 0); return random_val; diff --git a/firmware/targets/f7/furi_hal/furi_hal_resources.c b/firmware/targets/f7/furi_hal/furi_hal_resources.c index f87f2a31a6..9d6cd7cafa 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_resources.c +++ b/firmware/targets/f7/furi_hal/furi_hal_resources.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -111,6 +112,13 @@ static void furi_hal_resources_init_input_pins(GpioMode mode) { } void furi_hal_resources_init_early() { + furi_hal_bus_enable(FuriHalBusGPIOA); + furi_hal_bus_enable(FuriHalBusGPIOB); + furi_hal_bus_enable(FuriHalBusGPIOC); + furi_hal_bus_enable(FuriHalBusGPIOD); + furi_hal_bus_enable(FuriHalBusGPIOE); + furi_hal_bus_enable(FuriHalBusGPIOH); + furi_hal_resources_init_input_pins(GpioModeInput); // SD Card stepdown control @@ -155,6 +163,12 @@ void furi_hal_resources_init_early() { void furi_hal_resources_deinit_early() { furi_hal_resources_init_input_pins(GpioModeAnalog); + furi_hal_bus_disable(FuriHalBusGPIOA); + furi_hal_bus_disable(FuriHalBusGPIOB); + furi_hal_bus_disable(FuriHalBusGPIOC); + furi_hal_bus_disable(FuriHalBusGPIOD); + furi_hal_bus_disable(FuriHalBusGPIOE); + furi_hal_bus_disable(FuriHalBusGPIOH); } void furi_hal_resources_init() { diff --git a/firmware/targets/f7/furi_hal/furi_hal_rfid.c b/firmware/targets/f7/furi_hal/furi_hal_rfid.c index 145e49df2c..fa0c19b098 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_rfid.c +++ b/firmware/targets/f7/furi_hal/furi_hal_rfid.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -9,15 +10,18 @@ #include #define FURI_HAL_RFID_READ_TIMER TIM1 +#define FURI_HAL_RFID_READ_TIMER_BUS FuriHalBusTIM1 #define FURI_HAL_RFID_READ_TIMER_CHANNEL LL_TIM_CHANNEL_CH1N // We can't use N channel for LL_TIM_OC_Init, so... #define FURI_HAL_RFID_READ_TIMER_CHANNEL_CONFIG LL_TIM_CHANNEL_CH1 #define FURI_HAL_RFID_EMULATE_TIMER TIM2 +#define FURI_HAL_RFID_EMULATE_TIMER_BUS FuriHalBusTIM2 #define FURI_HAL_RFID_EMULATE_TIMER_IRQ FuriHalInterruptIdTIM2 #define FURI_HAL_RFID_EMULATE_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 #define RFID_CAPTURE_TIM TIM2 +#define RFID_CAPTURE_TIM_BUS FuriHalBusTIM2 #define RFID_CAPTURE_IND_CH LL_TIM_CHANNEL_CH3 #define RFID_CAPTURE_DIR_CH LL_TIM_CHANNEL_CH4 @@ -30,7 +34,6 @@ #define RFID_DMA_CH2_DEF RFID_DMA, RFID_DMA_CH2_CHANNEL typedef struct { - FuriHalRfidEmulateCallback callback; FuriHalRfidDMACallback dma_callback; FuriHalRfidReadCaptureCallback read_capture_callback; void* context; @@ -56,11 +59,7 @@ void furi_hal_rfid_init() { COMP_InitStruct.InputPlus = LL_COMP_INPUT_PLUS_IO1; COMP_InitStruct.InputMinus = LL_COMP_INPUT_MINUS_1_2VREFINT; COMP_InitStruct.InputHysteresis = LL_COMP_HYSTERESIS_HIGH; -#ifdef INVERT_RFID_IN - COMP_InitStruct.OutputPolarity = LL_COMP_OUTPUTPOL_INVERTED; -#else COMP_InitStruct.OutputPolarity = LL_COMP_OUTPUTPOL_NONINVERTED; -#endif COMP_InitStruct.OutputBlankingSource = LL_COMP_BLANKINGSRC_NONE; LL_COMP_Init(COMP1, &COMP_InitStruct); LL_COMP_SetCommonWindowMode(__LL_COMP_COMMON_INSTANCE(COMP1), LL_COMP_WINDOWMODE_DISABLE); @@ -92,7 +91,7 @@ void furi_hal_rfid_pins_reset() { furi_hal_gpio_init(&gpio_rfid_data_in, GpioModeAnalog, GpioPullNo, GpioSpeedLow); } -void furi_hal_rfid_pins_emulate() { +static void furi_hal_rfid_pins_emulate() { // ibutton low furi_hal_ibutton_pin_configure(); furi_hal_ibutton_pin_write(false); @@ -113,7 +112,7 @@ void furi_hal_rfid_pins_emulate() { &gpio_rfid_carrier, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn2TIM2); } -void furi_hal_rfid_pins_read() { +static void furi_hal_rfid_pins_read() { // ibutton low furi_hal_ibutton_pin_configure(); furi_hal_ibutton_pin_write(false); @@ -142,10 +141,10 @@ void furi_hal_rfid_pin_pull_pulldown() { furi_hal_gpio_write(&gpio_nfc_irq_rfid_pull, false); } -void furi_hal_rfid_tim_read(float freq, float duty_cycle) { - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(FURI_HAL_RFID_READ_TIMER); - FURI_CRITICAL_EXIT(); +void furi_hal_rfid_tim_read_start(float freq, float duty_cycle) { + furi_hal_bus_enable(FURI_HAL_RFID_READ_TIMER_BUS); + + furi_hal_rfid_pins_read(); LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Autoreload = (SystemCoreClock / freq) - 1; @@ -160,23 +159,23 @@ void furi_hal_rfid_tim_read(float freq, float duty_cycle) { FURI_HAL_RFID_READ_TIMER, FURI_HAL_RFID_READ_TIMER_CHANNEL_CONFIG, &TIM_OC_InitStruct); LL_TIM_EnableCounter(FURI_HAL_RFID_READ_TIMER); + + furi_hal_rfid_tim_read_continue(); } -void furi_hal_rfid_tim_read_start() { +void furi_hal_rfid_tim_read_continue() { LL_TIM_EnableAllOutputs(FURI_HAL_RFID_READ_TIMER); } -void furi_hal_rfid_tim_read_stop() { +void furi_hal_rfid_tim_read_pause() { LL_TIM_DisableAllOutputs(FURI_HAL_RFID_READ_TIMER); } -void furi_hal_rfid_tim_emulate(float freq) { - UNUSED(freq); // FIXME - // basic PWM setup with needed freq and internal clock - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(FURI_HAL_RFID_EMULATE_TIMER); - FURI_CRITICAL_EXIT(); +void furi_hal_rfid_tim_read_stop() { + furi_hal_bus_disable(FURI_HAL_RFID_READ_TIMER_BUS); +} +static void furi_hal_rfid_tim_emulate() { LL_TIM_SetPrescaler(FURI_HAL_RFID_EMULATE_TIMER, 0); LL_TIM_SetCounterMode(FURI_HAL_RFID_EMULATE_TIMER, LL_TIM_COUNTERMODE_UP); LL_TIM_SetAutoReload(FURI_HAL_RFID_EMULATE_TIMER, 1); @@ -201,32 +200,6 @@ void furi_hal_rfid_tim_emulate(float freq) { LL_TIM_GenerateEvent_UPDATE(FURI_HAL_RFID_EMULATE_TIMER); } -static void furi_hal_rfid_emulate_isr() { - if(LL_TIM_IsActiveFlag_UPDATE(FURI_HAL_RFID_EMULATE_TIMER)) { - LL_TIM_ClearFlag_UPDATE(FURI_HAL_RFID_EMULATE_TIMER); - furi_hal_rfid->callback(furi_hal_rfid->context); - } -} - -void furi_hal_rfid_tim_emulate_start(FuriHalRfidEmulateCallback callback, void* context) { - furi_assert(furi_hal_rfid); - - furi_hal_rfid->callback = callback; - furi_hal_rfid->context = context; - - furi_hal_interrupt_set_isr(FURI_HAL_RFID_EMULATE_TIMER_IRQ, furi_hal_rfid_emulate_isr, NULL); - - LL_TIM_EnableIT_UPDATE(FURI_HAL_RFID_EMULATE_TIMER); - LL_TIM_EnableAllOutputs(FURI_HAL_RFID_EMULATE_TIMER); - LL_TIM_EnableCounter(FURI_HAL_RFID_EMULATE_TIMER); -} - -void furi_hal_rfid_tim_emulate_stop() { - LL_TIM_DisableCounter(FURI_HAL_RFID_EMULATE_TIMER); - LL_TIM_DisableAllOutputs(FURI_HAL_RFID_EMULATE_TIMER); - furi_hal_interrupt_set_isr(FURI_HAL_RFID_EMULATE_TIMER_IRQ, NULL, NULL); -} - static void furi_hal_capture_dma_isr(void* context) { UNUSED(context); @@ -247,15 +220,13 @@ static void furi_hal_capture_dma_isr(void* context) { } void furi_hal_rfid_tim_read_capture_start(FuriHalRfidReadCaptureCallback callback, void* context) { - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(RFID_CAPTURE_TIM); - FURI_CRITICAL_EXIT(); - furi_assert(furi_hal_rfid); furi_hal_rfid->read_capture_callback = callback; furi_hal_rfid->context = context; + furi_hal_bus_enable(RFID_CAPTURE_TIM_BUS); + // Timer: base LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Prescaler = 64 - 1; @@ -303,10 +274,7 @@ void furi_hal_rfid_tim_read_capture_stop() { furi_hal_rfid_comp_stop(); furi_hal_interrupt_set_isr(FURI_HAL_RFID_EMULATE_TIMER_IRQ, NULL, NULL); - - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(RFID_CAPTURE_TIM); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(RFID_CAPTURE_TIM_BUS); } static void furi_hal_rfid_dma_isr() { @@ -341,7 +309,8 @@ void furi_hal_rfid_tim_emulate_dma_start( furi_hal_rfid_pins_emulate(); // configure timer - furi_hal_rfid_tim_emulate(125000); + furi_hal_bus_enable(FURI_HAL_RFID_EMULATE_TIMER_BUS); + furi_hal_rfid_tim_emulate(); LL_TIM_OC_SetPolarity( FURI_HAL_RFID_EMULATE_TIMER, FURI_HAL_RFID_EMULATE_TIMER_CHANNEL, LL_TIM_OCPOLARITY_HIGH); LL_TIM_EnableDMAReq_UPDATE(FURI_HAL_RFID_EMULATE_TIMER); @@ -405,32 +374,12 @@ void furi_hal_rfid_tim_emulate_dma_stop() { LL_DMA_DeInit(RFID_DMA_CH1_DEF); LL_DMA_DeInit(RFID_DMA_CH2_DEF); - LL_TIM_DeInit(FURI_HAL_RFID_EMULATE_TIMER); - - FURI_CRITICAL_EXIT(); -} -void furi_hal_rfid_tim_reset() { - FURI_CRITICAL_ENTER(); - - LL_TIM_DeInit(FURI_HAL_RFID_READ_TIMER); - LL_TIM_DeInit(FURI_HAL_RFID_EMULATE_TIMER); + furi_hal_bus_disable(FURI_HAL_RFID_EMULATE_TIMER_BUS); FURI_CRITICAL_EXIT(); } -void furi_hal_rfid_set_emulate_period(uint32_t period) { - LL_TIM_SetAutoReload(FURI_HAL_RFID_EMULATE_TIMER, period); -} - -void furi_hal_rfid_set_emulate_pulse(uint32_t pulse) { -#if FURI_HAL_RFID_EMULATE_TIMER_CHANNEL == LL_TIM_CHANNEL_CH3 - LL_TIM_OC_SetCompareCH3(FURI_HAL_RFID_EMULATE_TIMER, pulse); -#else -#error Update this code. Would you kindly? -#endif -} - void furi_hal_rfid_set_read_period(uint32_t period) { LL_TIM_SetAutoReload(FURI_HAL_RFID_READ_TIMER, period); } @@ -443,12 +392,6 @@ void furi_hal_rfid_set_read_pulse(uint32_t pulse) { #endif } -void furi_hal_rfid_change_read_config(float freq, float duty_cycle) { - uint32_t period = (uint32_t)((SystemCoreClock) / freq) - 1; - furi_hal_rfid_set_read_period(period); - furi_hal_rfid_set_read_pulse(period * duty_cycle); -} - void furi_hal_rfid_comp_start() { LL_COMP_Enable(COMP1); // Magic @@ -483,4 +426,4 @@ void COMP_IRQHandler() { (LL_COMP_ReadOutputLevel(COMP1) == LL_COMP_OUTPUT_LEVEL_LOW), furi_hal_rfid_comp_callback_context); } -} \ No newline at end of file +} diff --git a/firmware/targets/f7/furi_hal/furi_hal_rfid.h b/firmware/targets/f7/furi_hal/furi_hal_rfid.h index 36563c1d16..78d9b66587 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_rfid.h +++ b/firmware/targets/f7/furi_hal/furi_hal_rfid.h @@ -21,14 +21,6 @@ void furi_hal_rfid_init(); */ void furi_hal_rfid_pins_reset(); -/** Config rfid pins to emulate state - */ -void furi_hal_rfid_pins_emulate(); - -/** Config rfid pins to read state - */ -void furi_hal_rfid_pins_read(); - /** Release rfid pull pin */ void furi_hal_rfid_pin_pull_release(); @@ -37,32 +29,23 @@ void furi_hal_rfid_pin_pull_release(); */ void furi_hal_rfid_pin_pull_pulldown(); -/** Config rfid timer to read state - * +/** Start read timer * @param freq timer frequency * @param duty_cycle timer duty cycle, 0.0-1.0 */ -void furi_hal_rfid_tim_read(float freq, float duty_cycle); +void furi_hal_rfid_tim_read_start(float freq, float duty_cycle); -/** Start read timer +/** Pause read timer, to be able to continue later */ -void furi_hal_rfid_tim_read_start(); +void furi_hal_rfid_tim_read_pause(); -/** Stop read timer +/** Continue read timer */ -void furi_hal_rfid_tim_read_stop(); - -/** Config rfid timer to emulate state - * - * @param freq timer frequency - */ -void furi_hal_rfid_tim_emulate(float freq); +void furi_hal_rfid_tim_read_continue(); -typedef void (*FuriHalRfidEmulateCallback)(void* context); - -/** Start emulation timer +/** Stop read timer */ -void furi_hal_rfid_tim_emulate_start(FuriHalRfidEmulateCallback callback, void* context); +void furi_hal_rfid_tim_read_stop(); typedef void (*FuriHalRfidReadCaptureCallback)(bool level, uint32_t duration, void* context); @@ -81,26 +64,6 @@ void furi_hal_rfid_tim_emulate_dma_start( void furi_hal_rfid_tim_emulate_dma_stop(); -/** Stop emulation timer - */ -void furi_hal_rfid_tim_emulate_stop(); - -/** Config rfid timers to reset state - */ -void furi_hal_rfid_tim_reset(); - -/** Set emulation timer period - * - * @param period overall duration - */ -void furi_hal_rfid_set_emulate_period(uint32_t period); - -/** Set emulation timer pulse - * - * @param pulse duration of high level - */ -void furi_hal_rfid_set_emulate_pulse(uint32_t pulse); - /** Set read timer period * * @param period overall duration @@ -113,13 +76,6 @@ void furi_hal_rfid_set_read_period(uint32_t period); */ void furi_hal_rfid_set_read_pulse(uint32_t pulse); -/** Сhanges the configuration of the RFID timer "on a fly" - * - * @param freq new frequency - * @param duty_cycle new duty cycle - */ -void furi_hal_rfid_change_read_config(float freq, float duty_cycle); - /** Start/Enable comparator */ void furi_hal_rfid_comp_start(); diff --git a/firmware/targets/f7/furi_hal/furi_hal_rtc.c b/firmware/targets/f7/furi_hal/furi_hal_rtc.c index 7bd45c35d7..a8e25faad6 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_rtc.c +++ b/firmware/targets/f7/furi_hal/furi_hal_rtc.c @@ -2,8 +2,8 @@ #include #include -#include #include +#include #include #include #include @@ -44,10 +44,8 @@ _Static_assert(sizeof(SystemReg) == 4, "SystemReg size mismatch"); #define FURI_HAL_RTC_SECONDS_PER_DAY (FURI_HAL_RTC_SECONDS_PER_HOUR * 24) #define FURI_HAL_RTC_MONTHS_COUNT 12 #define FURI_HAL_RTC_EPOCH_START_YEAR 1970 -#define FURI_HAL_RTC_IS_LEAP_YEAR(year) \ - ((((year) % 4 == 0) && ((year) % 100 != 0)) || ((year) % 400 == 0)) -static const uint8_t furi_hal_rtc_days_per_month[][FURI_HAL_RTC_MONTHS_COUNT] = { +static const uint8_t furi_hal_rtc_days_per_month[2][FURI_HAL_RTC_MONTHS_COUNT] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; @@ -395,7 +393,7 @@ uint32_t furi_hal_rtc_datetime_to_timestamp(FuriHalRtcDateTime* datetime) { uint8_t leap_years = 0; for(uint16_t y = FURI_HAL_RTC_EPOCH_START_YEAR; y < datetime->year; y++) { - if(FURI_HAL_RTC_IS_LEAP_YEAR(y)) { + if(furi_hal_rtc_is_leap_year(y)) { leap_years++; } else { years++; @@ -406,10 +404,10 @@ uint32_t furi_hal_rtc_datetime_to_timestamp(FuriHalRtcDateTime* datetime) { ((years * furi_hal_rtc_days_per_year[0]) + (leap_years * furi_hal_rtc_days_per_year[1])) * FURI_HAL_RTC_SECONDS_PER_DAY; - uint8_t year_index = (FURI_HAL_RTC_IS_LEAP_YEAR(datetime->year)) ? 1 : 0; + bool leap_year = furi_hal_rtc_is_leap_year(datetime->year); - for(uint8_t m = 0; m < (datetime->month - 1); m++) { - timestamp += furi_hal_rtc_days_per_month[year_index][m] * FURI_HAL_RTC_SECONDS_PER_DAY; + for(uint8_t m = 1; m < datetime->month; m++) { + timestamp += furi_hal_rtc_get_days_per_month(leap_year, m) * FURI_HAL_RTC_SECONDS_PER_DAY; } timestamp += (datetime->day - 1) * FURI_HAL_RTC_SECONDS_PER_DAY; @@ -419,3 +417,15 @@ uint32_t furi_hal_rtc_datetime_to_timestamp(FuriHalRtcDateTime* datetime) { return timestamp; } + +uint16_t furi_hal_rtc_get_days_per_year(uint16_t year) { + return furi_hal_rtc_days_per_year[furi_hal_rtc_is_leap_year(year) ? 1 : 0]; +} + +bool furi_hal_rtc_is_leap_year(uint16_t year) { + return (((year) % 4 == 0) && ((year) % 100 != 0)) || ((year) % 400 == 0); +} + +uint8_t furi_hal_rtc_get_days_per_month(bool leap_year, uint8_t month) { + return furi_hal_rtc_days_per_month[leap_year ? 1 : 0][month - 1]; +} diff --git a/firmware/targets/f7/furi_hal/furi_hal_speaker.c b/firmware/targets/f7/furi_hal/furi_hal_speaker.c index 5421509cca..ad7ed994af 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_speaker.c +++ b/firmware/targets/f7/furi_hal/furi_hal_speaker.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -20,16 +21,11 @@ static FuriMutex* furi_hal_speaker_mutex = NULL; void furi_hal_speaker_init() { furi_assert(furi_hal_speaker_mutex == NULL); furi_hal_speaker_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(FURI_HAL_SPEAKER_TIMER); - FURI_CRITICAL_EXIT(); FURI_LOG_I(TAG, "Init OK"); } void furi_hal_speaker_deinit() { furi_check(furi_hal_speaker_mutex != NULL); - LL_TIM_DeInit(FURI_HAL_SPEAKER_TIMER); - furi_hal_gpio_init(&gpio_speaker, GpioModeAnalog, GpioPullNo, GpioSpeedLow); furi_mutex_free(furi_hal_speaker_mutex); furi_hal_speaker_mutex = NULL; } @@ -39,6 +35,7 @@ bool furi_hal_speaker_acquire(uint32_t timeout) { if(furi_mutex_acquire(furi_hal_speaker_mutex, timeout) == FuriStatusOk) { furi_hal_power_insomnia_enter(); + furi_hal_bus_enable(FuriHalBusTIM16); furi_hal_gpio_init_ex( &gpio_speaker, GpioModeAltFunctionPushPull, GpioPullNo, GpioSpeedLow, GpioAltFn14TIM16); return true; @@ -53,6 +50,8 @@ void furi_hal_speaker_release() { furi_hal_speaker_stop(); furi_hal_gpio_init(&gpio_speaker, GpioModeAnalog, GpioPullDown, GpioSpeedLow); + + furi_hal_bus_disable(FuriHalBusTIM16); furi_hal_power_insomnia_exit(); furi_check(furi_mutex_release(furi_hal_speaker_mutex) == FuriStatusOk); diff --git a/firmware/targets/f7/furi_hal/furi_hal_spi_config.c b/firmware/targets/f7/furi_hal/furi_hal_spi_config.c index 695418af12..c73c71a4fd 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_spi_config.c +++ b/firmware/targets/f7/furi_hal/furi_hal_spi_config.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -101,28 +102,17 @@ void furi_hal_spi_config_init() { static void furi_hal_spi_bus_r_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) { if(event == FuriHalSpiBusEventInit) { furi_hal_spi_bus_r_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalSpiBusEventDeinit) { furi_mutex_free(furi_hal_spi_bus_r_mutex); - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalSpiBusEventLock) { furi_check(furi_mutex_acquire(furi_hal_spi_bus_r_mutex, FuriWaitForever) == FuriStatusOk); } else if(event == FuriHalSpiBusEventUnlock) { furi_check(furi_mutex_release(furi_hal_spi_bus_r_mutex) == FuriStatusOk); } else if(event == FuriHalSpiBusEventActivate) { - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusSPI1); } else if(event == FuriHalSpiBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusSPI1); } } @@ -136,28 +126,17 @@ FuriMutex* furi_hal_spi_bus_d_mutex = NULL; static void furi_hal_spi_bus_d_event_callback(FuriHalSpiBus* bus, FuriHalSpiBusEvent event) { if(event == FuriHalSpiBusEventInit) { furi_hal_spi_bus_d_mutex = furi_mutex_alloc(FuriMutexTypeNormal); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); bus->current_handle = NULL; } else if(event == FuriHalSpiBusEventDeinit) { furi_mutex_free(furi_hal_spi_bus_d_mutex); - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); } else if(event == FuriHalSpiBusEventLock) { furi_check(furi_mutex_acquire(furi_hal_spi_bus_d_mutex, FuriWaitForever) == FuriStatusOk); } else if(event == FuriHalSpiBusEventUnlock) { furi_check(furi_mutex_release(furi_hal_spi_bus_d_mutex) == FuriStatusOk); } else if(event == FuriHalSpiBusEventActivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_enable(FuriHalBusSPI2); } else if(event == FuriHalSpiBusEventDeactivate) { - FURI_CRITICAL_ENTER(); - LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); - FURI_CRITICAL_EXIT(); + furi_hal_bus_disable(FuriHalBusSPI2); } } diff --git a/firmware/targets/f7/furi_hal/furi_hal_spi_types.h b/firmware/targets/f7/furi_hal/furi_hal_spi_types.h index d2273f38ba..ecc18d50db 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_spi_types.h +++ b/firmware/targets/f7/furi_hal/furi_hal_spi_types.h @@ -6,8 +6,6 @@ #include #include -#include -#include #ifdef __cplusplus extern "C" { diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c index 06a7990fbf..8125971e96 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c +++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -596,6 +597,8 @@ void furi_hal_subghz_start_async_rx(FuriHalSubGhzCaptureCallback callback, void* furi_hal_subghz_capture_callback = callback; furi_hal_subghz_capture_callback_context = context; + furi_hal_bus_enable(FuriHalBusTIM2); + // Timer: base LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Prescaler = 64 - 1; @@ -680,7 +683,7 @@ void furi_hal_subghz_stop_async_rx() { furi_hal_subghz_idle(); FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(TIM2); + furi_hal_bus_disable(FuriHalBusTIM2); // Stop debug furi_hal_subghz_stop_debug(); @@ -859,6 +862,8 @@ bool furi_hal_subghz_start_async_tx(FuriHalSubGhzAsyncTxCallback callback, void* LL_DMA_EnableIT_HT(SUBGHZ_DMA_CH1_DEF); LL_DMA_EnableChannel(SUBGHZ_DMA_CH1_DEF); + furi_hal_bus_enable(FuriHalBusTIM2); + // Configure TIM2 LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Prescaler = 64 - 1; @@ -958,7 +963,7 @@ void furi_hal_subghz_stop_async_tx() { // Deinitialize Timer FURI_CRITICAL_ENTER(); - LL_TIM_DeInit(TIM2); + furi_hal_bus_disable(FuriHalBusTIM2); furi_hal_interrupt_set_isr(FuriHalInterruptIdTIM2, NULL, NULL); // Deinitialize DMA diff --git a/firmware/targets/f7/furi_hal/furi_hal_uart.c b/firmware/targets/f7/furi_hal/furi_hal_uart.c index 71b5c7ba04..209c6be6a2 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_uart.c +++ b/firmware/targets/f7/furi_hal/furi_hal_uart.c @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -13,6 +14,9 @@ static void (*irq_cb[2])(uint8_t ev, uint8_t data, void* context); static void* irq_ctx[2]; static void furi_hal_usart_init(uint32_t baud) { + furi_hal_bus_enable(FuriHalBusUSART1); + LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_PCLK2); + furi_hal_gpio_init_ex( &gpio_usart_tx, GpioModeAltFunctionPushPull, @@ -50,6 +54,9 @@ static void furi_hal_usart_init(uint32_t baud) { } static void furi_hal_lpuart_init(uint32_t baud) { + furi_hal_bus_enable(FuriHalBusLPUART1); + LL_RCC_SetLPUARTClockSource(LL_RCC_LPUART1_CLKSOURCE_PCLK1); + furi_hal_gpio_init_ex( &gpio_ext_pc0, GpioModeAltFunctionPushPull, @@ -86,10 +93,11 @@ static void furi_hal_lpuart_init(uint32_t baud) { } void furi_hal_uart_init(FuriHalUartId ch, uint32_t baud) { - if(ch == FuriHalUartIdLPUART1) + if(ch == FuriHalUartIdLPUART1) { furi_hal_lpuart_init(baud); - else if(ch == FuriHalUartIdUSART1) + } else if(ch == FuriHalUartIdUSART1) { furi_hal_usart_init(baud); + } } void furi_hal_uart_set_br(FuriHalUartId ch, uint32_t baud) { @@ -126,11 +134,15 @@ void furi_hal_uart_set_br(FuriHalUartId ch, uint32_t baud) { void furi_hal_uart_deinit(FuriHalUartId ch) { furi_hal_uart_set_irq_cb(ch, NULL, NULL); if(ch == FuriHalUartIdUSART1) { - LL_USART_Disable(USART1); + if(furi_hal_bus_is_enabled(FuriHalBusUSART1)) { + furi_hal_bus_disable(FuriHalBusUSART1); + } furi_hal_gpio_init(&gpio_usart_tx, GpioModeAnalog, GpioPullNo, GpioSpeedLow); furi_hal_gpio_init(&gpio_usart_rx, GpioModeAnalog, GpioPullNo, GpioSpeedLow); } else if(ch == FuriHalUartIdLPUART1) { - LL_LPUART_Disable(LPUART1); + if(furi_hal_bus_is_enabled(FuriHalBusLPUART1)) { + furi_hal_bus_disable(FuriHalBusLPUART1); + } furi_hal_gpio_init(&gpio_ext_pc0, GpioModeAnalog, GpioPullNo, GpioSpeedLow); furi_hal_gpio_init(&gpio_ext_pc1, GpioModeAnalog, GpioPullNo, GpioSpeedLow); } diff --git a/firmware/targets/f7/furi_hal/furi_hal_usb.c b/firmware/targets/f7/furi_hal/furi_hal_usb.c index 011add9532..b88168d5d0 100644 --- a/firmware/targets/f7/furi_hal/furi_hal_usb.c +++ b/firmware/targets/f7/furi_hal/furi_hal_usb.c @@ -2,7 +2,9 @@ #include #include #include + #include +#include #include #include @@ -86,6 +88,8 @@ static void wkup_evt(usbd_device* dev, uint8_t event, uint8_t ep); /* Low-level init */ void furi_hal_usb_init(void) { + LL_RCC_SetUSBClockSource(LL_RCC_USB_CLKSOURCE_PLLSAI1); + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; LL_PWR_EnableVddUSB(); @@ -98,7 +102,10 @@ void furi_hal_usb_init(void) { LL_GPIO_Init(GPIOA, &GPIO_InitStruct); usbd_init(&udev, &usbd_hw, USB_EP0_SIZE, ubuf, sizeof(ubuf)); + + FURI_CRITICAL_ENTER(); usbd_enable(&udev, true); + FURI_CRITICAL_EXIT(); usbd_reg_descr(&udev, usb_descriptor_get); usbd_reg_event(&udev, usbd_evt_susp, susp_evt); @@ -359,8 +366,10 @@ static void usb_process_mode_reinit() { usbd_connect(&udev, false); usb.enabled = false; + FURI_CRITICAL_ENTER(); usbd_enable(&udev, false); usbd_enable(&udev, true); + FURI_CRITICAL_EXIT(); furi_delay_ms(USB_RECONNECT_DELAY); usb_process_mode_start(usb.interface, usb.interface_context); diff --git a/firmware/targets/f7/src/update.c b/firmware/targets/f7/src/update.c index c1e1084c21..c6235a150f 100644 --- a/firmware/targets/f7/src/update.c +++ b/firmware/targets/f7/src/update.c @@ -38,6 +38,12 @@ static bool flipper_update_mount_sd() { } static bool flipper_update_init() { + // TODO: Configure missing peripherals properly + furi_hal_bus_enable(FuriHalBusHSEM); + furi_hal_bus_enable(FuriHalBusIPCC); + furi_hal_bus_enable(FuriHalBusRNG); + furi_hal_bus_enable(FuriHalBusUSART1); + furi_hal_clock_init(); furi_hal_rtc_init(); furi_hal_interrupt_init(); diff --git a/firmware/targets/f7/target.json b/firmware/targets/f7/target.json index c503644536..e3dc78325e 100644 --- a/firmware/targets/f7/target.json +++ b/firmware/targets/f7/target.json @@ -28,6 +28,7 @@ "flipperformat", "toolbox", "nfc", + "digital_signal", "pulse_reader", "microtar", "usb_stm32", diff --git a/firmware/targets/furi_hal_include/furi_hal.h b/firmware/targets/furi_hal_include/furi_hal.h index 2eb4688d42..9341dccecb 100644 --- a/firmware/targets/furi_hal_include/furi_hal.h +++ b/firmware/targets/furi_hal_include/furi_hal.h @@ -12,9 +12,11 @@ struct STOP_EXTERNING_ME {}; #include #include +#include #include #include #include +#include #include #include #include diff --git a/firmware/targets/furi_hal_include/furi_hal_random.h b/firmware/targets/furi_hal_include/furi_hal_random.h index ee69326f41..5ca9cb723c 100644 --- a/firmware/targets/furi_hal_include/furi_hal_random.h +++ b/firmware/targets/furi_hal_include/furi_hal_random.h @@ -6,6 +6,9 @@ extern "C" { #endif +/** Initialize random subsystem */ +void furi_hal_random_init(); + /** Get random value * * @return random value diff --git a/firmware/targets/furi_hal_include/furi_hal_rtc.h b/firmware/targets/furi_hal_include/furi_hal_rtc.h index e706c5c76a..186d22f079 100644 --- a/firmware/targets/furi_hal_include/furi_hal_rtc.h +++ b/firmware/targets/furi_hal_include/furi_hal_rtc.h @@ -255,6 +255,30 @@ uint32_t furi_hal_rtc_get_timestamp(); */ uint32_t furi_hal_rtc_datetime_to_timestamp(FuriHalRtcDateTime* datetime); +/** Gets the number of days in the year according to the Gregorian calendar. + * + * @param year Input year. + * + * @return number of days in `year`. + */ +uint16_t furi_hal_rtc_get_days_per_year(uint16_t year); + +/** Check if a year a leap year in the Gregorian calendar. + * + * @param year Input year. + * + * @return true if `year` is a leap year. + */ +bool furi_hal_rtc_is_leap_year(uint16_t year); + +/** Get the number of days in the month. + * + * @param leap_year true to calculate based on leap years + * @param month month to check, where 1 = January + * @return the number of days in the month + */ +uint8_t furi_hal_rtc_get_days_per_month(bool leap_year, uint8_t month); + #ifdef __cplusplus } #endif diff --git a/furi/core/core_defines.h b/furi/core/core_defines.h index 830bb191c2..4309c20c58 100644 --- a/furi/core/core_defines.h +++ b/furi/core/core_defines.h @@ -78,6 +78,11 @@ extern "C" { #define TOSTRING(x) STRINGIFY(x) #endif +#ifndef CONCATENATE +#define CONCATENATE(a, b) CONCATENATE_(a, b) +#define CONCATENATE_(a, b) a##b +#endif + #ifndef REVERSE_BYTES_U32 #define REVERSE_BYTES_U32(x) \ ((((x)&0x000000FF) << 24) | (((x)&0x0000FF00) << 8) | (((x)&0x00FF0000) >> 8) | \ diff --git a/lib/ReadMe.md b/lib/ReadMe.md index 93236b2677..138bef2b34 100644 --- a/lib/ReadMe.md +++ b/lib/ReadMe.md @@ -27,6 +27,7 @@ - `nfc` - NFC library, used by NFC application - `one_wire` - OneWire library, used by iButton application - `print` - Tiny printf implementation +- `digital_signal` - Digital Signal library used by NFC for software implemented protocols - `pulse_reader` - Pulse Reader library used by NFC for software implemented protocols - `qrcode` - QR-Code library - `stm32wb_cmsis` - STM32WB series CMSIS headers, extends CMSIS Core diff --git a/lib/SConscript b/lib/SConscript index 8727746d81..495ba4bfe2 100644 --- a/lib/SConscript +++ b/lib/SConscript @@ -15,7 +15,6 @@ env.Append( Dir("u8g2"), Dir("update_util"), Dir("print"), - Dir("pulse_reader"), ], ) @@ -95,6 +94,7 @@ libs = env.BuildModules( "mbedtls", "subghz", "nfc", + "digital_signal", "pulse_reader", "appframe", "misc", diff --git a/lib/digital_signal/SConscript b/lib/digital_signal/SConscript new file mode 100644 index 0000000000..2ddf7a58b0 --- /dev/null +++ b/lib/digital_signal/SConscript @@ -0,0 +1,20 @@ +Import("env") + +env.Append( + CPPPATH=[ + "#/lib/digital_signal", + ], + SDK_HEADERS=[ + File("digital_signal.h"), + ], +) + +libenv = env.Clone(FW_LIB_NAME="digital_signal") +libenv.ApplyLibFlags() +libenv.Append(CCFLAGS=["-O3", "-funroll-loops", "-Ofast"]) + +sources = libenv.GlobRecursive("*.c*") + +lib = libenv.StaticLibrary("${FW_LIB_NAME}", sources) +libenv.Install("${LIB_DIST_DIR}", lib) +Return("lib") diff --git a/lib/digital_signal/digital_signal.c b/lib/digital_signal/digital_signal.c index 51a87d22a5..6ccfcf2803 100644 --- a/lib/digital_signal/digital_signal.c +++ b/lib/digital_signal/digital_signal.c @@ -9,7 +9,7 @@ #include /* must be on bank B */ -#define DEBUG_OUTPUT gpio_ext_pb3 +//#define DEBUG_OUTPUT gpio_ext_pb3 struct ReloadBuffer { uint32_t* buffer; /* DMA ringbuffer */ @@ -212,15 +212,14 @@ void digital_signal_prepare_arr(DigitalSignal* signal) { internals->reload_reg_entries = 0; for(size_t pos = 0; pos < signal->edge_cnt; pos++) { - uint32_t edge_scaled = (internals->factor * signal->edge_timings[pos]) / (1024 * 1024); - uint32_t pulse_duration = edge_scaled + internals->reload_reg_remainder; + uint32_t pulse_duration = signal->edge_timings[pos] + internals->reload_reg_remainder; if(pulse_duration < 10 || pulse_duration > 10000000) { - FURI_LOG_D( + /*FURI_LOG_D( TAG, "[prepare] pulse_duration out of range: %lu = %lu * %llu", pulse_duration, signal->edge_timings[pos], - internals->factor); + internals->factor);*/ pulse_duration = 100; } uint32_t pulse_ticks = (pulse_duration + T_TIM_DIV2) / T_TIM; @@ -243,10 +242,12 @@ static void digital_signal_stop_timer() { LL_TIM_DisableCounter(TIM2); LL_TIM_DisableUpdateEvent(TIM2); LL_TIM_DisableDMAReq_UPDATE(TIM2); + + furi_hal_bus_disable(FuriHalBusTIM2); } static void digital_signal_setup_timer() { - digital_signal_stop_timer(); + furi_hal_bus_enable(FuriHalBusTIM2); LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); LL_TIM_SetClockDivision(TIM2, LL_TIM_CLOCKDIVISION_DIV1); @@ -482,13 +483,13 @@ static void digital_sequence_finish(DigitalSequence* sequence) { prev_timer = DWT->CYCCNT; } if(DWT->CYCCNT - prev_timer > wait_ticks) { - FURI_LOG_D( + /*FURI_LOG_D( TAG, "[SEQ] hung %lu ms in finish (ARR 0x%08lx, read %lu, write %lu)", wait_ms, TIM2->ARR, dma_buffer->read_pos, - dma_buffer->write_pos); + dma_buffer->write_pos);*/ break; } } while(1); @@ -516,13 +517,13 @@ static void digital_sequence_queue_pulse(DigitalSequence* sequence, uint32_t len prev_timer = DWT->CYCCNT; } if(DWT->CYCCNT - prev_timer > wait_ticks) { - FURI_LOG_D( + /*FURI_LOG_D( TAG, "[SEQ] hung %lu ms in queue (ARR 0x%08lx, read %lu, write %lu)", wait_ms, TIM2->ARR, dma_buffer->read_pos, - dma_buffer->write_pos); + dma_buffer->write_pos);*/ break; } } while(1); diff --git a/lib/lfrfid/lfrfid_raw_worker.c b/lib/lfrfid/lfrfid_raw_worker.c index 22c0bbd02c..aa962a47d6 100644 --- a/lib/lfrfid/lfrfid_raw_worker.c +++ b/lib/lfrfid/lfrfid_raw_worker.c @@ -151,9 +151,7 @@ static int32_t lfrfid_raw_read_worker_thread(void* thread_context) { if(file_valid) { // setup carrier - furi_hal_rfid_pins_read(); - furi_hal_rfid_tim_read(worker->frequency, worker->duty_cycle); - furi_hal_rfid_tim_read_start(); + furi_hal_rfid_tim_read_start(worker->frequency, worker->duty_cycle); // stabilize detector furi_delay_ms(1500); diff --git a/lib/lfrfid/lfrfid_worker_modes.c b/lib/lfrfid/lfrfid_worker_modes.c index 9b6f16eb14..8a26677746 100644 --- a/lib/lfrfid/lfrfid_worker_modes.c +++ b/lib/lfrfid/lfrfid_worker_modes.c @@ -100,24 +100,21 @@ static LFRFIDWorkerReadState lfrfid_worker_read_internal( uint32_t timeout, ProtocolId* result_protocol) { LFRFIDWorkerReadState state = LFRFIDWorkerReadTimeout; - furi_hal_rfid_pins_read(); if(feature & LFRFIDFeatureASK) { - furi_hal_rfid_tim_read(125000, 0.5); + furi_hal_rfid_tim_read_start(125000, 0.5); FURI_LOG_D(TAG, "Start ASK"); if(worker->read_cb) { worker->read_cb(LFRFIDWorkerReadStartASK, PROTOCOL_NO, worker->cb_ctx); } } else { - furi_hal_rfid_tim_read(62500, 0.25); + furi_hal_rfid_tim_read_start(62500, 0.25); FURI_LOG_D(TAG, "Start PSK"); if(worker->read_cb) { worker->read_cb(LFRFIDWorkerReadStartPSK, PROTOCOL_NO, worker->cb_ctx); } } - furi_hal_rfid_tim_read_start(); - // stabilize detector lfrfid_worker_delay(worker, LFRFID_WORKER_READ_STABILIZE_TIME_MS); @@ -205,7 +202,7 @@ static LFRFIDWorkerReadState lfrfid_worker_read_internal( average_index = 0; if(worker->read_cb) { - if(average > 0.2 && average < 0.8) { + if(average > 0.2f && average < 0.8f) { if(!card_detected) { card_detected = true; worker->read_cb( diff --git a/lib/lfrfid/tools/t5577.c b/lib/lfrfid/tools/t5577.c index 3444afea3e..a931f02cf6 100644 --- a/lib/lfrfid/tools/t5577.c +++ b/lib/lfrfid/tools/t5577.c @@ -14,9 +14,7 @@ #define T5577_OPCODE_RESET 0b00 static void t5577_start() { - furi_hal_rfid_tim_read(125000, 0.5); - furi_hal_rfid_pins_read(); - furi_hal_rfid_tim_read_start(); + furi_hal_rfid_tim_read_start(125000, 0.5); // do not ground the antenna furi_hal_rfid_pin_pull_release(); @@ -24,14 +22,13 @@ static void t5577_start() { static void t5577_stop() { furi_hal_rfid_tim_read_stop(); - furi_hal_rfid_tim_reset(); furi_hal_rfid_pins_reset(); } static void t5577_write_gap(uint32_t gap_time) { - furi_hal_rfid_tim_read_stop(); + furi_hal_rfid_tim_read_pause(); furi_delay_us(gap_time * 8); - furi_hal_rfid_tim_read_start(); + furi_hal_rfid_tim_read_continue(); } static void t5577_write_bit(bool value) { @@ -54,7 +51,12 @@ static void t5577_write_reset() { t5577_write_bit(0); } -static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) { +static void t5577_write_block_pass( + uint8_t block, + bool lock_bit, + uint32_t data, + bool with_pass, + uint32_t password) { furi_delay_us(T5577_TIMING_WAIT_TIME * 8); // start gap @@ -63,6 +65,13 @@ static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) { // opcode for page 0 t5577_write_opcode(T5577_OPCODE_PAGE_0); + // password + if(with_pass) { + for(uint8_t i = 0; i < 32; i++) { + t5577_write_bit((password >> (31 - i)) & 1); + } + } + // lock bit t5577_write_bit(lock_bit); @@ -82,11 +91,26 @@ static void t5577_write_block(uint8_t block, bool lock_bit, uint32_t data) { t5577_write_reset(); } +static void t5577_write_block_simple(uint8_t block, bool lock_bit, uint32_t data) { + t5577_write_block_pass(block, lock_bit, data, false, 0); +} + void t5577_write(LFRFIDT5577* data) { t5577_start(); FURI_CRITICAL_ENTER(); for(size_t i = 0; i < data->blocks_to_write; i++) { - t5577_write_block(i, false, data->block[i]); + t5577_write_block_simple(i, false, data->block[i]); + } + t5577_write_reset(); + FURI_CRITICAL_EXIT(); + t5577_stop(); +} + +void t5577_write_with_pass(LFRFIDT5577* data, uint32_t password) { + t5577_start(); + FURI_CRITICAL_ENTER(); + for(size_t i = 0; i < data->blocks_to_write; i++) { + t5577_write_block_pass(0, false, data->block[i], true, password); } t5577_write_reset(); FURI_CRITICAL_EXIT(); diff --git a/lib/lfrfid/tools/t5577.h b/lib/lfrfid/tools/t5577.h index 6d53b5dc74..c77984476f 100644 --- a/lib/lfrfid/tools/t5577.h +++ b/lib/lfrfid/tools/t5577.h @@ -51,6 +51,8 @@ typedef struct { */ void t5577_write(LFRFIDT5577* data); +void t5577_write_with_pass(LFRFIDT5577* data, uint32_t password); + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/lib/misc.scons b/lib/misc.scons index 1ff6e2fb0c..10aa3f9d5a 100644 --- a/lib/misc.scons +++ b/lib/misc.scons @@ -4,7 +4,6 @@ Import("env") env.Append( CPPPATH=[ - "#/lib/digital_signal", "#/lib/fnv1a_hash", "#/lib/heatshrink", "#/lib/micro-ecc", @@ -26,7 +25,6 @@ libenv.ApplyLibFlags() sources = [] libs_recurse = [ - "digital_signal", "micro-ecc", "u8g2", "update_util", diff --git a/lib/nfc/nfc_worker.c b/lib/nfc/nfc_worker.c index 8f7a1b5e43..f2d07e4c25 100644 --- a/lib/nfc/nfc_worker.c +++ b/lib/nfc/nfc_worker.c @@ -248,13 +248,13 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { furi_hal_nfc_ll_set_error_handling(FuriHalNfcErrorHandlingNfc); furi_hal_nfc_ll_set_guard_time(FURI_HAL_NFC_LL_GT_NFCV); - furi_hal_console_printf("Detect presence\r\n"); + FURI_LOG_D(TAG, "Detect presence"); ReturnCode ret = slix_get_random(nfcv_data); if(ret == ERR_NONE) { /* there is some chip, responding with a RAND */ nfc_worker->dev_data->protocol = NfcDeviceProtocolNfcV; - furi_hal_console_printf(" Chip detected. In privacy?\r\n"); + FURI_LOG_D(TAG, " Chip detected. In privacy?"); ret = nfcv_inventory(NULL); if(ret == ERR_NONE) { @@ -263,15 +263,15 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { NfcVReader reader = {}; if(!nfcv_read_card(&reader, &nfc_worker->dev_data->nfc_data, nfcv_data)) { - furi_hal_console_printf(" => failed, wait for chip to disappear.\r\n"); + FURI_LOG_D(TAG, " => failed, wait for chip to disappear."); snprintf(nfcv_data->error, sizeof(nfcv_data->error), "Read card\nfailed"); nfc_worker->callback(NfcWorkerEventWrongCardDetected, nfc_worker->context); } else { - furi_hal_console_printf(" => success, wait for chip to disappear.\r\n"); + FURI_LOG_D(TAG, " => success, wait for chip to disappear."); nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); } } else { - furi_hal_console_printf(" => success, wait for chip to disappear.\r\n"); + FURI_LOG_D(TAG, " => success, wait for chip to disappear."); nfc_worker->callback(NfcWorkerEventCardDetected, nfc_worker->context); } @@ -279,8 +279,7 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { furi_delay_ms(100); } - furi_hal_console_printf( - " => chip is already visible, wait for chip to disappear.\r\n"); + FURI_LOG_D(TAG, " => chip is already visible, wait for chip to disappear.\r\n"); nfc_worker->callback(NfcWorkerEventAborted, nfc_worker->context); while(slix_get_random(NULL) == ERR_NONE) { furi_delay_ms(100); @@ -293,7 +292,7 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { } else { /* chip is invisible, try to unlock */ - furi_hal_console_printf(" chip is invisible, unlocking\r\n"); + FURI_LOG_D(TAG, " chip is invisible, unlocking"); if(nfcv_data->auth_method == NfcVAuthMethodManual) { key |= key_data[0] << 24; @@ -312,7 +311,7 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { if(ret != ERR_NONE) { /* main key failed, trying second one */ - furi_hal_console_printf(" trying second key after resetting\r\n"); + FURI_LOG_D(TAG, " trying second key after resetting"); /* reset chip */ furi_hal_nfc_ll_txrx_off(); @@ -320,7 +319,7 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { furi_hal_nfc_ll_txrx_on(); if(slix_get_random(nfcv_data) != ERR_NONE) { - furi_hal_console_printf(" reset failed\r\n"); + FURI_LOG_D(TAG, " reset failed"); } key = 0x0F0F0F0F; @@ -333,7 +332,7 @@ void nfc_worker_nfcv_unlock(NfcWorker* nfc_worker) { } if(ret != ERR_NONE) { /* unlock failed */ - furi_hal_console_printf(" => failed, wait for chip to disappear.\r\n"); + FURI_LOG_D(TAG, " => failed, wait for chip to disappear."); snprintf( nfcv_data->error, sizeof(nfcv_data->error), "Passwords not\naccepted"); nfc_worker->callback(NfcWorkerEventWrongCardDetected, nfc_worker->context); @@ -464,6 +463,19 @@ static bool nfc_worker_read_mf_desfire(NfcWorker* nfc_worker, FuriHalNfcTxRxCont do { if(!furi_hal_nfc_detect(&nfc_worker->dev_data->nfc_data, 300)) break; if(!mf_df_read_card(tx_rx, data)) break; + FURI_LOG_I(TAG, "Trying to parse a supported card ..."); + + // The model for parsing DESFire is a little different to other cards; + // we don't have parsers to provide encryption keys, so we can read the + // data normally, and then pass the read data to a parser. + // + // There are fully-protected DESFire cards, but providing keys for them + // is difficult (and unnessesary for many transit cards). + for(size_t i = 0; i < NfcSupportedCardTypeEnd; i++) { + if(nfc_supported_card[i].protocol == NfcDeviceProtocolMifareDesfire) { + if(nfc_supported_card[i].parse(nfc_worker->dev_data)) break; + } + } read_success = true; } while(false); diff --git a/lib/nfc/parsers/nfc_supported_card.c b/lib/nfc/parsers/nfc_supported_card.c index fc2dc34e0e..153d4d3c51 100644 --- a/lib/nfc/parsers/nfc_supported_card.c +++ b/lib/nfc/parsers/nfc_supported_card.c @@ -6,6 +6,7 @@ #include "troika_4k_parser.h" #include "two_cities.h" #include "all_in_one.h" +#include "opal.h" NfcSupportedCard nfc_supported_card[NfcSupportedCardTypeEnd] = { [NfcSupportedCardTypePlantain] = @@ -50,6 +51,14 @@ NfcSupportedCard nfc_supported_card[NfcSupportedCardTypeEnd] = { .read = all_in_one_parser_read, .parse = all_in_one_parser_parse, }, + [NfcSupportedCardTypeOpal] = + { + .protocol = NfcDeviceProtocolMifareDesfire, + .verify = stub_parser_verify_read, + .read = stub_parser_verify_read, + .parse = opal_parser_parse, + }, + }; bool nfc_supported_card_verify_and_parse(NfcDeviceData* dev_data) { @@ -65,3 +74,9 @@ bool nfc_supported_card_verify_and_parse(NfcDeviceData* dev_data) { return card_parsed; } + +bool stub_parser_verify_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx) { + UNUSED(nfc_worker); + UNUSED(tx_rx); + return false; +} diff --git a/lib/nfc/parsers/nfc_supported_card.h b/lib/nfc/parsers/nfc_supported_card.h index 4af59aded6..877bda7374 100644 --- a/lib/nfc/parsers/nfc_supported_card.h +++ b/lib/nfc/parsers/nfc_supported_card.h @@ -11,6 +11,7 @@ typedef enum { NfcSupportedCardTypeTroika4K, NfcSupportedCardTypeTwoCities, NfcSupportedCardTypeAllInOne, + NfcSupportedCardTypeOpal, NfcSupportedCardTypeEnd, } NfcSupportedCardType; @@ -31,3 +32,8 @@ typedef struct { extern NfcSupportedCard nfc_supported_card[NfcSupportedCardTypeEnd]; bool nfc_supported_card_verify_and_parse(NfcDeviceData* dev_data); + +// stub_parser_verify_read does nothing, and always reports that it does not +// support the card. This is needed for DESFire card parsers which can't +// provide keys, and only use NfcSupportedCard->parse. +bool stub_parser_verify_read(NfcWorker* nfc_worker, FuriHalNfcTxRxContext* tx_rx); diff --git a/lib/nfc/parsers/opal.c b/lib/nfc/parsers/opal.c new file mode 100644 index 0000000000..2a6b5d1221 --- /dev/null +++ b/lib/nfc/parsers/opal.c @@ -0,0 +1,204 @@ +/* + * opal.c - Parser for Opal card (Sydney, Australia). + * + * Copyright 2023 Michael Farrell + * + * This will only read "standard" MIFARE DESFire-based Opal cards. Free travel + * cards (including School Opal cards, veteran, vision-impaired persons and + * TfNSW employees' cards) and single-trip tickets are MIFARE Ultralight C + * cards and not supported. + * + * Reference: https://github.com/metrodroid/metrodroid/wiki/Opal + * + * Note: The card values are all little-endian (like Flipper), but the above + * reference was originally written based on Java APIs, which are big-endian. + * This implementation presumes a little-endian system. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "nfc_supported_card.h" +#include "opal.h" + +#include +#include +#include + +#include + +static const uint8_t opal_aid[3] = {0x31, 0x45, 0x53}; +static const char* opal_modes[5] = + {"Rail / Metro", "Ferry / Light Rail", "Bus", "Unknown mode", "Manly Ferry"}; +static const char* opal_usages[14] = { + "New / Unused", + "Tap on: new journey", + "Tap on: transfer from same mode", + "Tap on: transfer from other mode", + "", // Manly Ferry: new journey + "", // Manly Ferry: transfer from ferry + "", // Manly Ferry: transfer from other + "Tap off: distance fare", + "Tap off: flat fare", + "Automated tap off: failed to tap off", + "Tap off: end of trip without start", + "Tap off: reversal", + "Tap on: rejected", + "Unknown usage", +}; + +// Opal file 0x7 structure. Assumes a little-endian CPU. +typedef struct __attribute__((__packed__)) { + uint32_t serial : 32; + uint8_t check_digit : 4; + bool blocked : 1; + uint16_t txn_number : 16; + int32_t balance : 21; + uint16_t days : 15; + uint16_t minutes : 11; + uint8_t mode : 3; + uint16_t usage : 4; + bool auto_topup : 1; + uint8_t weekly_journeys : 4; + uint16_t checksum : 16; +} OpalFile; + +static_assert(sizeof(OpalFile) == 16); + +// Converts an Opal timestamp to FuriHalRtcDateTime. +// +// Opal measures days since 1980-01-01 and minutes since midnight, and presumes +// all days are 1440 minutes. +void opal_date_time_to_furi(uint16_t days, uint16_t minutes, FuriHalRtcDateTime* out) { + if(!out) return; + uint16_t diy; + out->year = 1980; + out->month = 1; + // 1980-01-01 is a Tuesday + out->weekday = ((days + 1) % 7) + 1; + out->hour = minutes / 60; + out->minute = minutes % 60; + out->second = 0; + + // What year is it? + for(;;) { + diy = furi_hal_rtc_get_days_per_year(out->year); + if(days < diy) break; + days -= diy; + out->year++; + } + + // 1-index the day of the year + days++; + // What month is it? + bool is_leap = furi_hal_rtc_is_leap_year(out->year); + + for(;;) { + uint8_t dim = furi_hal_rtc_get_days_per_month(is_leap, out->month); + if(days <= dim) break; + days -= dim; + out->month++; + } + + out->day = days; +} + +bool opal_parser_parse(NfcDeviceData* dev_data) { + if(dev_data->protocol != NfcDeviceProtocolMifareDesfire) { + return false; + } + + MifareDesfireApplication* app = mf_df_get_application(&dev_data->mf_df_data, &opal_aid); + if(app == NULL) { + return false; + } + MifareDesfireFile* f = mf_df_get_file(app, 0x07); + if(f == NULL || f->type != MifareDesfireFileTypeStandard || f->settings.data.size != 16 || + !f->contents) { + return false; + } + + OpalFile* o = (OpalFile*)f->contents; + + uint8_t serial2 = o->serial / 10000000; + uint16_t serial3 = (o->serial / 1000) % 10000; + uint16_t serial4 = (o->serial % 1000); + + if(o->check_digit > 9) { + return false; + } + + char* sign = ""; + if(o->balance < 0) { + // Negative balance. Make this a positive value again and record the + // sign separately, because then we can handle balances of -99..-1 + // cents, as the "dollars" division below would result in a positive + // zero value. + o->balance = abs(o->balance); //-V1081 + sign = "-"; + } + uint8_t cents = o->balance % 100; + int32_t dollars = o->balance / 100; + + FuriHalRtcDateTime timestamp; + opal_date_time_to_furi(o->days, o->minutes, ×tamp); + + if(o->mode >= 3) { + // 3..7 are "reserved", but we use 4 to indicate the Manly Ferry. + o->mode = 3; + } + + if(o->usage >= 4 && o->usage <= 6) { + // Usages 4..6 associated with the Manly Ferry, which correspond to + // usages 1..3 for other modes. + o->usage -= 3; + o->mode = 4; + } + + const char* mode_str = (o->mode <= 4 ? opal_modes[o->mode] : opal_modes[3]); //-V547 + const char* usage_str = (o->usage <= 12 ? opal_usages[o->usage] : opal_usages[13]); + + furi_string_printf( + dev_data->parsed_data, + "\e#Opal: $%s%ld.%02hu\n3085 22%02hhu %04hu %03hu%01hhu\n%s, %s\n", + sign, + dollars, + cents, + serial2, + serial3, + serial4, + o->check_digit, + mode_str, + usage_str); + FuriString* timestamp_str = furi_string_alloc(); + locale_format_date(timestamp_str, ×tamp, locale_get_date_format(), "-"); + furi_string_cat(dev_data->parsed_data, timestamp_str); + furi_string_cat_str(dev_data->parsed_data, " at "); + + locale_format_time(timestamp_str, ×tamp, locale_get_time_format(), false); + furi_string_cat(dev_data->parsed_data, timestamp_str); + + furi_string_free(timestamp_str); + furi_string_cat_printf( + dev_data->parsed_data, + "\nWeekly journeys: %hhu, Txn #%hu\n", + o->weekly_journeys, + o->txn_number); + + if(o->auto_topup) { + furi_string_cat_str(dev_data->parsed_data, "Auto-topup enabled\n"); + } + if(o->blocked) { + furi_string_cat_str(dev_data->parsed_data, "Card blocked\n"); + } + return true; +} diff --git a/lib/nfc/parsers/opal.h b/lib/nfc/parsers/opal.h new file mode 100644 index 0000000000..42caf9a179 --- /dev/null +++ b/lib/nfc/parsers/opal.h @@ -0,0 +1,5 @@ +#pragma once + +#include "nfc_supported_card.h" + +bool opal_parser_parse(NfcDeviceData* dev_data); diff --git a/lib/nfc/protocols/mifare_desfire.c b/lib/nfc/protocols/mifare_desfire.c index 23308ae95e..e0ead737f8 100644 --- a/lib/nfc/protocols/mifare_desfire.c +++ b/lib/nfc/protocols/mifare_desfire.c @@ -42,6 +42,30 @@ void mf_df_clear(MifareDesfireData* data) { data->app_head = NULL; } +MifareDesfireApplication* mf_df_get_application(MifareDesfireData* data, const uint8_t (*aid)[3]) { + if(!data) { + return NULL; + } + for(MifareDesfireApplication* app = data->app_head; app; app = app->next) { + if(memcmp(aid, app->id, 3) == 0) { + return app; + } + } + return NULL; +} + +MifareDesfireFile* mf_df_get_file(MifareDesfireApplication* app, uint8_t id) { + if(!app) { + return NULL; + } + for(MifareDesfireFile* file = app->file_head; file; file = file->next) { + if(file->id == id) { + return file; + } + } + return NULL; +} + void mf_df_cat_data(MifareDesfireData* data, FuriString* out) { mf_df_cat_card_info(data, out); for(MifareDesfireApplication* app = data->app_head; app; app = app->next) { diff --git a/lib/nfc/protocols/mifare_desfire.h b/lib/nfc/protocols/mifare_desfire.h index 963a18f585..3dc7c4c2a7 100644 --- a/lib/nfc/protocols/mifare_desfire.h +++ b/lib/nfc/protocols/mifare_desfire.h @@ -130,6 +130,9 @@ void mf_df_cat_file(MifareDesfireFile* file, FuriString* out); bool mf_df_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK); +MifareDesfireApplication* mf_df_get_application(MifareDesfireData* data, const uint8_t (*aid)[3]); +MifareDesfireFile* mf_df_get_file(MifareDesfireApplication* app, uint8_t id); + uint16_t mf_df_prepare_get_version(uint8_t* dest); bool mf_df_parse_get_version_response(uint8_t* buf, uint16_t len, MifareDesfireVersion* out); diff --git a/lib/nfc/protocols/nfcv.c b/lib/nfc/protocols/nfcv.c index 471993b630..f9848ae065 100644 --- a/lib/nfc/protocols/nfcv.c +++ b/lib/nfc/protocols/nfcv.c @@ -52,7 +52,7 @@ ReturnCode nfcv_read_blocks(NfcVReader* reader, NfcVData* nfcv_data) { uint16_t received = 0; for(size_t block = 0; block < nfcv_data->block_num; block++) { uint8_t rxBuf[32]; - FURI_LOG_D(TAG, "Reading block %d/%d", block, (nfcv_data->block_num - 1)); + //FURI_LOG_D(TAG, "Reading block %d/%d", block, (nfcv_data->block_num - 1)); ReturnCode ret = ERR_NONE; for(int tries = 0; tries < NFCV_COMMAND_RETRIES; tries++) { @@ -64,18 +64,18 @@ ReturnCode nfcv_read_blocks(NfcVReader* reader, NfcVData* nfcv_data) { } } if(ret != ERR_NONE) { - FURI_LOG_D(TAG, "failed to read: %d", ret); + //FURI_LOG_D(TAG, "failed to read: %d", ret); return ret; } memcpy( &(nfcv_data->data[block * nfcv_data->block_size]), &rxBuf[1], nfcv_data->block_size); - FURI_LOG_D( + /*FURI_LOG_D( TAG, " %02X %02X %02X %02X", nfcv_data->data[block * nfcv_data->block_size + 0], nfcv_data->data[block * nfcv_data->block_size + 1], nfcv_data->data[block * nfcv_data->block_size + 2], - nfcv_data->data[block * nfcv_data->block_size + 3]); + nfcv_data->data[block * nfcv_data->block_size + 3]);*/ } return ERR_NONE; @@ -86,7 +86,7 @@ ReturnCode nfcv_read_sysinfo(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { uint16_t received = 0; ReturnCode ret = ERR_NONE; - FURI_LOG_D(TAG, "Read SYSTEM INFORMATION..."); + //FURI_LOG_D(TAG, "Read SYSTEM INFORMATION..."); for(int tries = 0; tries < NFCV_COMMAND_RETRIES; tries++) { /* TODO: needs proper abstraction via fury_hal(_ll)_* */ @@ -110,7 +110,7 @@ ReturnCode nfcv_read_sysinfo(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { nfcv_data->block_num = rxBuf[NFCV_UID_LENGTH + 4] + 1; nfcv_data->block_size = rxBuf[NFCV_UID_LENGTH + 5] + 1; nfcv_data->ic_ref = rxBuf[NFCV_UID_LENGTH + 6]; - FURI_LOG_D( + /*FURI_LOG_D( TAG, " UID: %02X %02X %02X %02X %02X %02X %02X %02X", nfc_data->uid[0], @@ -128,10 +128,10 @@ ReturnCode nfcv_read_sysinfo(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { nfcv_data->afi, nfcv_data->block_num, nfcv_data->block_size, - nfcv_data->ic_ref); + nfcv_data->ic_ref);*/ return ret; } - FURI_LOG_D(TAG, "Failed: %d", ret); + //FURI_LOG_D(TAG, "Failed: %d", ret); return ret; } @@ -410,6 +410,9 @@ void nfcv_emu_free(NfcVData* nfcv_data) { digital_sequence_free(nfcv_data->emu_air.nfcv_signal); } if(nfcv_data->emu_air.reader_signal) { + // Stop pulse reader and disable bus before free + pulse_reader_stop(nfcv_data->emu_air.reader_signal); + // Free pulse reader pulse_reader_free(nfcv_data->emu_air.reader_signal); } @@ -1081,9 +1084,9 @@ void nfcv_emu_sniff_packet( break; } - if(strlen(nfcv_data->last_command) > 0) { + /*if(strlen(nfcv_data->last_command) > 0) { FURI_LOG_D(TAG, "Received command %s", nfcv_data->last_command); - } + }*/ } void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { @@ -1137,7 +1140,7 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { } } - FURI_LOG_D(TAG, "Starting NfcV emulation"); + /*FURI_LOG_D(TAG, "Starting NfcV emulation"); FURI_LOG_D( TAG, " UID: %02X %02X %02X %02X %02X %02X %02X %02X", @@ -1148,7 +1151,7 @@ void nfcv_emu_init(FuriHalNfcDevData* nfc_data, NfcVData* nfcv_data) { nfc_data->uid[4], nfc_data->uid[5], nfc_data->uid[6], - nfc_data->uid[7]); + nfc_data->uid[7]);*/ switch(nfcv_data->sub_type) { case NfcVTypeSlixL: @@ -1372,13 +1375,15 @@ bool nfcv_emu_loop( pulse_reader_start(nfcv_data->emu_air.reader_signal); ret = true; - } else { - if(frame_state != NFCV_FRAME_STATE_SOF1) { + + } #ifdef NFCV_VERBOSE + else { + if(frame_state != NFCV_FRAME_STATE_SOF1) { FURI_LOG_T(TAG, "leaving while in state: %lu", frame_state); -#endif } } +#endif #ifdef NFCV_DIAGNOSTIC_DUMPS if(period_buffer_pos) { diff --git a/lib/nfc/protocols/nfcv.h b/lib/nfc/protocols/nfcv.h index 8ca6955d1d..87a6967375 100644 --- a/lib/nfc/protocols/nfcv.h +++ b/lib/nfc/protocols/nfcv.h @@ -15,7 +15,7 @@ extern "C" { /* true: modulating releases load, false: modulating adds load resistor to field coil */ #define NFCV_LOAD_MODULATION_POLARITY (false) -#define NFCV_FC (13560000.0f / 0.9998f) /* MHz */ +#define NFCV_FC (13560000.0f) /* MHz */ #define NFCV_RESP_SUBC1_PULSE_32 (1.0f / (NFCV_FC / 32) / 2.0f) /* 1.1799 µs */ #define NFCV_RESP_SUBC1_UNMOD_256 (256.0f / NFCV_FC) /* 18.8791 µs */ #define NFCV_PULSE_DURATION_NS (128.0f * 1000000000.0f / NFCV_FC) diff --git a/lib/pulse_reader/pulse_reader.c b/lib/pulse_reader/pulse_reader.c index 74d99fe801..1c3cb4a586 100644 --- a/lib/pulse_reader/pulse_reader.c +++ b/lib/pulse_reader/pulse_reader.c @@ -135,6 +135,7 @@ void pulse_reader_stop(PulseReader* signal) { LL_DMA_DisableChannel(DMA1, signal->dma_channel + 1); LL_DMAMUX_DisableRequestGen(NULL, LL_DMAMUX_REQ_GEN_0); LL_TIM_DisableCounter(TIM2); + furi_hal_bus_disable(FuriHalBusTIM2); furi_hal_gpio_init_simple(signal->gpio, GpioModeAnalog); } @@ -146,6 +147,8 @@ void pulse_reader_start(PulseReader* signal) { signal->dma_config_gpio.MemoryOrM2MDstAddress = (uint32_t)signal->gpio_buffer; signal->dma_config_gpio.NbData = signal->size; + furi_hal_bus_enable(FuriHalBusTIM2); + /* start counter */ LL_TIM_SetCounterMode(TIM2, LL_TIM_COUNTERMODE_UP); LL_TIM_SetClockDivision(TIM2, LL_TIM_CLOCKDIVISION_DIV1); diff --git a/lib/subghz/blocks/custom_btn.c b/lib/subghz/blocks/custom_btn.c index 275a4c9303..1919fc5e4c 100644 --- a/lib/subghz/blocks/custom_btn.c +++ b/lib/subghz/blocks/custom_btn.c @@ -1,8 +1,9 @@ -#include "custom_btn.h" +#include "custom_btn_i.h" static uint8_t custom_btn_id = SUBGHZ_CUSTOM_BTN_OK; static uint8_t custom_btn_original = 0; static uint8_t custom_btn_max_btns = 0; +static uint8_t controller_programming_mode = PROG_MODE_OFF; bool subghz_custom_btn_set(uint8_t btn_id) { if(btn_id > custom_btn_max_btns) { @@ -33,8 +34,18 @@ void subghz_custom_btn_set_max(uint8_t b) { void subghz_custom_btns_reset() { custom_btn_original = 0; custom_btn_max_btns = 0; + controller_programming_mode = PROG_MODE_OFF; + custom_btn_id = SUBGHZ_CUSTOM_BTN_OK; } bool subghz_custom_btn_is_allowed() { return custom_btn_max_btns != 0; +} + +void subghz_custom_btn_set_prog_mode(ProgMode prog_mode) { + controller_programming_mode = prog_mode; +} + +ProgMode subghz_custom_btn_get_prog_mode() { + return controller_programming_mode; } \ No newline at end of file diff --git a/lib/subghz/blocks/custom_btn.h b/lib/subghz/blocks/custom_btn.h index c13842fa83..e06457ccd4 100644 --- a/lib/subghz/blocks/custom_btn.h +++ b/lib/subghz/blocks/custom_btn.h @@ -15,12 +15,8 @@ bool subghz_custom_btn_set(uint8_t btn_id); uint8_t subghz_custom_btn_get(); -void subghz_custom_btn_set_original(uint8_t btn_code); - uint8_t subghz_custom_btn_get_original(); -void subghz_custom_btn_set_max(uint8_t b); - void subghz_custom_btns_reset(); bool subghz_custom_btn_is_allowed(); \ No newline at end of file diff --git a/lib/subghz/blocks/custom_btn_i.h b/lib/subghz/blocks/custom_btn_i.h new file mode 100644 index 0000000000..f75ba4068b --- /dev/null +++ b/lib/subghz/blocks/custom_btn_i.h @@ -0,0 +1,17 @@ +#pragma once + +#include "custom_btn.h" + +#define PROG_MODE_OFF (0U) +#define PROG_MODE_KEELOQ_BFT (1U) +#define PROG_MODE_KEELOQ_APRIMATIC (2U) + +typedef uint8_t ProgMode; + +void subghz_custom_btn_set_original(uint8_t btn_code); + +void subghz_custom_btn_set_max(uint8_t b); + +void subghz_custom_btn_set_prog_mode(ProgMode prog_mode); + +ProgMode subghz_custom_btn_get_prog_mode(); \ No newline at end of file diff --git a/lib/subghz/environment.c b/lib/subghz/environment.c index 5ded243c41..bcada87522 100644 --- a/lib/subghz/environment.c +++ b/lib/subghz/environment.c @@ -7,6 +7,8 @@ struct SubGhzEnvironment { const char* came_atomo_rainbow_table_file_name; const char* nice_flor_s_rainbow_table_file_name; const char* alutech_at_4n_rainbow_table_file_name; + const char* mfname; + uint8_t kl_type; }; SubGhzEnvironment* subghz_environment_alloc() { @@ -17,6 +19,8 @@ SubGhzEnvironment* subghz_environment_alloc() { instance->came_atomo_rainbow_table_file_name = NULL; instance->nice_flor_s_rainbow_table_file_name = NULL; instance->alutech_at_4n_rainbow_table_file_name = NULL; + instance->mfname = ""; + instance->kl_type = 0; return instance; } @@ -115,4 +119,10 @@ const char* } else { return NULL; } -} \ No newline at end of file +} + +void subghz_environment_reset_keeloq(SubGhzEnvironment* instance) { + furi_assert(instance); + + subghz_keystore_reset_kl(instance->keystore); +} diff --git a/lib/subghz/environment.h b/lib/subghz/environment.h index 7bd38ba2fe..67de48df9c 100644 --- a/lib/subghz/environment.h +++ b/lib/subghz/environment.h @@ -110,6 +110,12 @@ void* subghz_environment_get_protocol_registry(SubGhzEnvironment* instance); */ const char* subghz_environment_get_protocol_name_registry(SubGhzEnvironment* instance, size_t idx); +/** + * Resetting the parameters used in the keeloq protocol. + * @param instance Pointer to a SubGhzEnvironment instance + */ +void subghz_environment_reset_keeloq(SubGhzEnvironment* instance); + #ifdef __cplusplus } #endif diff --git a/lib/subghz/protocols/alutech_at_4n.c b/lib/subghz/protocols/alutech_at_4n.c index 281e820f03..1a35550c69 100644 --- a/lib/subghz/protocols/alutech_at_4n.c +++ b/lib/subghz/protocols/alutech_at_4n.c @@ -5,7 +5,7 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" #define TAG "SubGhzProtocoAlutech_at_4n" diff --git a/lib/subghz/protocols/came_atomo.c b/lib/subghz/protocols/came_atomo.c index 4723ec99f2..cea7ebf6fd 100644 --- a/lib/subghz/protocols/came_atomo.c +++ b/lib/subghz/protocols/came_atomo.c @@ -7,7 +7,7 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" #define TAG "SubGhzProtocoCameAtomo" diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c index 26b5a20a90..2163c05001 100644 --- a/lib/subghz/protocols/keeloq.c +++ b/lib/subghz/protocols/keeloq.c @@ -10,14 +10,11 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" +#include "../subghz_keystore_i.h" #define TAG "SubGhzProtocolKeeloq" -#define KEELOQ_PROG_MODE_OFF (0U) -#define KEELOQ_PROG_MODE_BFT (1U) -#define KEELOQ_PROG_MODE_APRIMATIC (2U) - static const SubGhzBlockConst subghz_protocol_keeloq_const = { .te_short = 400, .te_long = 800, @@ -90,25 +87,6 @@ const SubGhzProtocol subghz_protocol_keeloq = { .encoder = &subghz_protocol_keeloq_encoder, }; -static const char* mfname; -static uint8_t kl_type; -static uint8_t klq_prog_mode; -static uint16_t temp_counter; - -void keeloq_reset_original_btn() { - subghz_custom_btns_reset(); - temp_counter = 0; - klq_prog_mode = KEELOQ_PROG_MODE_OFF; -} - -void keeloq_reset_mfname() { - mfname = ""; -} - -void keeloq_reset_kl_type() { - kl_type = 0; -} - /** * Analysis of received data * @param instance Pointer to a SubGhzBlockGeneric* instance @@ -165,29 +143,32 @@ static bool subghz_protocol_keeloq_gen_data( } // programming mode on / off conditions + ProgMode prog_mode = subghz_custom_btn_get_prog_mode(); if(strcmp(instance->manufacture_name, "BFT") == 0) { // BFT programming mode on / off conditions if(btn == 0xF) { - klq_prog_mode = KEELOQ_PROG_MODE_BFT; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_BFT) { - klq_prog_mode = KEELOQ_PROG_MODE_OFF; + prog_mode = PROG_MODE_KEELOQ_BFT; + } else if(prog_mode == PROG_MODE_KEELOQ_BFT) { + prog_mode = PROG_MODE_OFF; } } else if(strcmp(instance->manufacture_name, "Aprimatic") == 0) { // Aprimatic programming mode on / off conditions if(btn == 0xF) { - klq_prog_mode = KEELOQ_PROG_MODE_APRIMATIC; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_APRIMATIC) { - klq_prog_mode = KEELOQ_PROG_MODE_OFF; + prog_mode = PROG_MODE_KEELOQ_APRIMATIC; + } else if(prog_mode == PROG_MODE_KEELOQ_APRIMATIC) { + prog_mode = PROG_MODE_OFF; } } + subghz_custom_btn_set_prog_mode(prog_mode); + // If we using BFT programming mode we will trasmit its seed in hop part like original remote - if(klq_prog_mode == KEELOQ_PROG_MODE_BFT) { + if(prog_mode == PROG_MODE_KEELOQ_BFT) { hop = instance->generic.seed; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_APRIMATIC) { + } else if(prog_mode == PROG_MODE_KEELOQ_APRIMATIC) { // If we using Aprimatic programming mode we will trasmit some strange looking hop value, why? cuz manufacturer did it this way :) hop = 0x1A2B3C4D; } - if(counter_up && klq_prog_mode == KEELOQ_PROG_MODE_OFF) { + if(counter_up && prog_mode == PROG_MODE_OFF) { if(instance->generic.cnt < 0xFFFF) { if((instance->generic.cnt + furi_hal_subghz_get_rolling_counter_mult()) >= 0xFFFF) { instance->generic.cnt = 0; @@ -198,7 +179,7 @@ static bool subghz_protocol_keeloq_gen_data( instance->generic.cnt = 0; } } - if(klq_prog_mode == KEELOQ_PROG_MODE_OFF) { + if(prog_mode == PROG_MODE_OFF) { // Protocols that do not use encryption if(strcmp(instance->manufacture_name, "Unknown") == 0) { code_found_reverse = subghz_protocol_blocks_reverse_key( @@ -252,7 +233,7 @@ static bool subghz_protocol_keeloq_gen_data( decrypt = btn << 28 | (0x000) << 16 | instance->generic.cnt; // Beninca / Allmatic -> no serial - simple XOR } - + uint8_t kl_type_en = instance->keystore->kl_type; for M_EACH( manufacture_code, @@ -292,21 +273,21 @@ static bool subghz_protocol_keeloq_gen_data( hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); break; case KEELOQ_LEARNING_UNKNOWN: - if(kl_type == 1) { + if(kl_type_en == 1) { hop = subghz_protocol_keeloq_common_encrypt( decrypt, manufacture_code->key); } - if(kl_type == 2) { + if(kl_type_en == 2) { man = subghz_protocol_keeloq_common_normal_learning( fix, manufacture_code->key); hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); } - if(kl_type == 3) { + if(kl_type_en == 3) { man = subghz_protocol_keeloq_common_secure_learning( fix, instance->generic.seed, manufacture_code->key); hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); } - if(kl_type == 4) { + if(kl_type_en == 4) { man = subghz_protocol_keeloq_common_magic_xor_type1_learning( instance->generic.serial, manufacture_code->key); hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); @@ -399,9 +380,10 @@ static bool if(instance->manufacture_name == 0x0) { instance->manufacture_name = ""; } - if(klq_prog_mode == KEELOQ_PROG_MODE_BFT) { + ProgMode prog_mode = subghz_custom_btn_get_prog_mode(); + if(prog_mode == PROG_MODE_KEELOQ_BFT) { instance->manufacture_name = "BFT"; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_APRIMATIC) { + } else if(prog_mode == PROG_MODE_KEELOQ_APRIMATIC) { instance->manufacture_name = "Aprimatic"; } uint8_t klq_last_custom_btn = 0xA; @@ -507,7 +489,7 @@ SubGhzProtocolStatus if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { instance->manufacture_name = furi_string_get_cstr(instance->manufacture_from_file); - mfname = furi_string_get_cstr(instance->manufacture_from_file); + instance->keystore->mfname = instance->manufacture_name; } else { FURI_LOG_D(TAG, "ENCODER: Missing Manufacture"); } @@ -579,7 +561,7 @@ void* subghz_protocol_decoder_keeloq_alloc(SubGhzEnvironment* environment) { instance->keystore = subghz_environment_get_keystore(environment); instance->manufacture_from_file = furi_string_alloc(); - klq_prog_mode = KEELOQ_PROG_MODE_OFF; + subghz_custom_btn_set_prog_mode(PROG_MODE_OFF); return instance; } @@ -596,8 +578,9 @@ void subghz_protocol_decoder_keeloq_reset(void* context) { furi_assert(context); SubGhzProtocolDecoderKeeloq* instance = context; instance->decoder.parser_step = KeeloqDecoderStepReset; - mfname = ""; - kl_type = 0; + // TODO + instance->keystore->mfname = ""; + instance->keystore->kl_type = 0; } void subghz_protocol_decoder_keeloq_feed(void* context, bool level, uint32_t duration) { @@ -740,9 +723,12 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( uint32_t decrypt = 0; uint64_t man; bool mf_not_set = false; - if(mfname == 0x0) { - mfname = ""; - } + // TODO: + // if(mfname == 0x0) { + // mfname = ""; + // } + + const char* mfname = keystore->mfname; if(strcmp(mfname, "Unknown") == 0) { return 1; @@ -758,7 +744,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, manufacture_code->key); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -770,7 +756,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -780,7 +766,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -790,7 +776,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -800,7 +786,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -810,7 +796,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -820,7 +806,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -829,8 +815,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, manufacture_code->key); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 1; + keystore->mfname = *manufacture_name; + keystore->kl_type = 1; return 1; } @@ -845,8 +831,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man_rev); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 1; + keystore->mfname = *manufacture_name; + keystore->kl_type = 1; return 1; } @@ -858,8 +844,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 2; + keystore->mfname = *manufacture_name; + keystore->kl_type = 2; return 1; } @@ -868,8 +854,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 2; + keystore->mfname = *manufacture_name; + keystore->kl_type = 2; return 1; } @@ -879,8 +865,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 3; + keystore->mfname = *manufacture_name; + keystore->kl_type = 3; return 1; } @@ -890,8 +876,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 3; + keystore->mfname = *manufacture_name; + keystore->kl_type = 3; return 1; } @@ -901,8 +887,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 4; + keystore->mfname = *manufacture_name; + keystore->kl_type = 4; return 1; } @@ -911,8 +897,8 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( decrypt = subghz_protocol_keeloq_common_decrypt(hop, man); if(subghz_protocol_keeloq_check_decrypt(instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 4; + keystore->mfname = *manufacture_name; + keystore->kl_type = 4; return 1; } @@ -922,7 +908,7 @@ static uint8_t subghz_protocol_keeloq_check_remote_controller_selector( } *manufacture_name = "Unknown"; - mfname = "Unknown"; + keystore->mfname = "Unknown"; instance->cnt = 0; return 0; @@ -935,18 +921,20 @@ static void subghz_protocol_keeloq_check_remote_controller( uint64_t key = subghz_protocol_blocks_reverse_key(instance->data, instance->data_count_bit); uint32_t key_fix = key >> 32; uint32_t key_hop = key & 0x00000000ffffffff; + static uint16_t temp_counter = 0; // Be careful with prog_mode // If we are in BFT / Aprimatic programming mode we will set previous remembered counter and skip mf keys check - if(klq_prog_mode == KEELOQ_PROG_MODE_OFF) { + ProgMode prog_mode = subghz_custom_btn_get_prog_mode(); + if(prog_mode == PROG_MODE_OFF) { // Check key AN-Motors if((key_hop >> 24) == ((key_hop >> 16) & 0x00ff) && (key_fix >> 28) == ((key_hop >> 12) & 0x0f) && (key_hop & 0xFFF) == 0x404) { *manufacture_name = "AN-Motors"; - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; instance->cnt = key_hop >> 16; } else if((key_hop & 0xFFF) == (0x000) && (key_fix >> 28) == ((key_hop >> 12) & 0x0f)) { *manufacture_name = "HCS101"; - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; instance->cnt = key_hop >> 16; } else { subghz_protocol_keeloq_check_remote_controller_selector( @@ -954,14 +942,17 @@ static void subghz_protocol_keeloq_check_remote_controller( } temp_counter = instance->cnt; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_BFT) { + } else if(prog_mode == PROG_MODE_KEELOQ_BFT) { *manufacture_name = "BFT"; - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; instance->cnt = temp_counter; - } else if(klq_prog_mode == KEELOQ_PROG_MODE_APRIMATIC) { + } else if(prog_mode == PROG_MODE_KEELOQ_APRIMATIC) { *manufacture_name = "Aprimatic"; - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; instance->cnt = temp_counter; + } else { + // Counter protection + furi_crash("Unsuported Prog Mode"); } instance->serial = key_fix & 0x0FFFFFFF; @@ -1052,7 +1043,7 @@ SubGhzProtocolStatus if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { instance->manufacture_name = furi_string_get_cstr(instance->manufacture_from_file); - mfname = furi_string_get_cstr(instance->manufacture_from_file); + instance->keystore->mfname = instance->manufacture_name; } else { FURI_LOG_D(TAG, "DECODER: Missing Manufacture"); } diff --git a/lib/subghz/protocols/keeloq.h b/lib/subghz/protocols/keeloq.h index 9862e0e92c..a757e82d59 100644 --- a/lib/subghz/protocols/keeloq.h +++ b/lib/subghz/protocols/keeloq.h @@ -2,8 +2,6 @@ #include "base.h" -#include "../blocks/custom_btn.h" - #define SUBGHZ_PROTOCOL_KEELOQ_NAME "KeeLoq" typedef struct SubGhzProtocolDecoderKeeloq SubGhzProtocolDecoderKeeloq; @@ -13,12 +11,6 @@ extern const SubGhzProtocolDecoder subghz_protocol_keeloq_decoder; extern const SubGhzProtocolEncoder subghz_protocol_keeloq_encoder; extern const SubGhzProtocol subghz_protocol_keeloq; -void keeloq_reset_mfname(); - -void keeloq_reset_kl_type(); - -void keeloq_reset_original_btn(); - /** * Allocate SubGhzProtocolEncoderKeeloq. * @param environment Pointer to a SubGhzEnvironment instance diff --git a/lib/subghz/protocols/nice_flor_s.c b/lib/subghz/protocols/nice_flor_s.c index 5eaa212743..eca9c4e95e 100644 --- a/lib/subghz/protocols/nice_flor_s.c +++ b/lib/subghz/protocols/nice_flor_s.c @@ -6,7 +6,7 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" /* * https://phreakerclub.com/1615 diff --git a/lib/subghz/protocols/secplus_v2.c b/lib/subghz/protocols/secplus_v2.c index 7acfb74acc..bf2246292b 100644 --- a/lib/subghz/protocols/secplus_v2.c +++ b/lib/subghz/protocols/secplus_v2.c @@ -7,7 +7,7 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" /* * Help diff --git a/lib/subghz/protocols/somfy_telis.c b/lib/subghz/protocols/somfy_telis.c index 6a159a7ea6..5fbd902757 100644 --- a/lib/subghz/protocols/somfy_telis.c +++ b/lib/subghz/protocols/somfy_telis.c @@ -7,7 +7,7 @@ #include "../blocks/generic.h" #include "../blocks/math.h" -#include "../blocks/custom_btn.h" +#include "../blocks/custom_btn_i.h" #define TAG "SubGhzProtocolSomfyTelis" diff --git a/lib/subghz/protocols/star_line.c b/lib/subghz/protocols/star_line.c index 362e34f3c2..05afd80a67 100644 --- a/lib/subghz/protocols/star_line.c +++ b/lib/subghz/protocols/star_line.c @@ -10,6 +10,8 @@ #include "../blocks/generic.h" #include "../blocks/math.h" +#include "../subghz_keystore_i.h" + #define TAG "SubGhzProtocolStarLine" static const SubGhzBlockConst subghz_protocol_star_line_const = { @@ -83,18 +85,6 @@ const SubGhzProtocol subghz_protocol_star_line = { .encoder = &subghz_protocol_star_line_encoder, }; -static const char* mfname; - -static int kl_type; - -void star_line_reset_mfname() { - mfname = ""; -} - -void star_line_reset_kl_type() { - kl_type = 0; -} - /** * Analysis of received data * @param instance Pointer to a SubGhzBlockGeneric* instance @@ -163,6 +153,7 @@ static bool instance->generic.data, instance->generic.data_count_bit); hop = code_found_reverse & 0x00000000ffffffff; } else { + uint8_t kl_type_en = instance->keystore->kl_type; for M_EACH( manufacture_code, @@ -184,11 +175,11 @@ static bool hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); break; case KEELOQ_LEARNING_UNKNOWN: - if(kl_type == 1) { + if(kl_type_en == 1) { hop = subghz_protocol_keeloq_common_encrypt( decrypt, manufacture_code->key); } - if(kl_type == 2) { + if(kl_type_en == 2) { man = subghz_protocol_keeloq_common_normal_learning( fix, manufacture_code->key); hop = subghz_protocol_keeloq_common_encrypt(decrypt, man); @@ -300,7 +291,7 @@ SubGhzProtocolStatus if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { instance->manufacture_name = furi_string_get_cstr(instance->manufacture_from_file); - mfname = furi_string_get_cstr(instance->manufacture_from_file); + instance->keystore->mfname = instance->manufacture_name; } else { FURI_LOG_D(TAG, "ENCODER: Missing Manufacture"); } @@ -382,8 +373,9 @@ void subghz_protocol_decoder_star_line_reset(void* context) { furi_assert(context); SubGhzProtocolDecoderStarLine* instance = context; instance->decoder.parser_step = StarLineDecoderStepReset; - mfname = ""; - kl_type = 0; + // TODO + instance->keystore->mfname = ""; + instance->keystore->kl_type = 0; } void subghz_protocol_decoder_star_line_feed(void* context, bool level, uint32_t duration) { @@ -523,9 +515,12 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( uint32_t decrypt = 0; uint64_t man_normal_learning; bool mf_not_set = false; - if(mfname == 0x0) { - mfname = ""; - } + // TODO: + // if(mfname == 0x0) { + // mfname = ""; + // } + + const char* mfname = keystore->mfname; if(strcmp(mfname, "Unknown") == 0) { return 1; @@ -542,7 +537,7 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -555,7 +550,7 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; + keystore->mfname = *manufacture_name; return 1; } break; @@ -565,8 +560,8 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 1; + keystore->mfname = *manufacture_name; + keystore->kl_type = 1; return 1; } // Check for mirrored man @@ -580,8 +575,8 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 1; + keystore->mfname = *manufacture_name; + keystore->kl_type = 1; return 1; } //########################### @@ -593,8 +588,8 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 2; + keystore->mfname = *manufacture_name; + keystore->kl_type = 2; return 1; } // Check for mirrored man @@ -604,8 +599,8 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( if(subghz_protocol_star_line_check_decrypt( instance, decrypt, btn, end_serial)) { *manufacture_name = furi_string_get_cstr(manufacture_code->name); - mfname = *manufacture_name; - kl_type = 2; + keystore->mfname = *manufacture_name; + keystore->kl_type = 2; return 1; } break; @@ -614,7 +609,7 @@ static uint8_t subghz_protocol_star_line_check_remote_controller_selector( } *manufacture_name = "Unknown"; - mfname = "Unknown"; + keystore->mfname = "Unknown"; instance->cnt = 0; return 0; @@ -690,7 +685,7 @@ SubGhzProtocolStatus if(flipper_format_read_string( flipper_format, "Manufacture", instance->manufacture_from_file)) { instance->manufacture_name = furi_string_get_cstr(instance->manufacture_from_file); - mfname = furi_string_get_cstr(instance->manufacture_from_file); + instance->keystore->mfname = instance->manufacture_name; } else { FURI_LOG_D(TAG, "DECODER: Missing Manufacture"); } diff --git a/lib/subghz/protocols/star_line.h b/lib/subghz/protocols/star_line.h index 901b82f7ca..851819ec70 100644 --- a/lib/subghz/protocols/star_line.h +++ b/lib/subghz/protocols/star_line.h @@ -11,10 +11,6 @@ extern const SubGhzProtocolDecoder subghz_protocol_star_line_decoder; extern const SubGhzProtocolEncoder subghz_protocol_star_line_encoder; extern const SubGhzProtocol subghz_protocol_star_line; -void star_line_reset_mfname(); - -void star_line_reset_kl_type(); - /** * Allocate SubGhzProtocolEncoderStarLine. * @param environment Pointer to a SubGhzEnvironment instance diff --git a/lib/subghz/subghz_keystore.c b/lib/subghz/subghz_keystore.c index e0b1cf6ca3..54ed15a99b 100644 --- a/lib/subghz/subghz_keystore.c +++ b/lib/subghz/subghz_keystore.c @@ -1,4 +1,5 @@ #include "subghz_keystore.h" +#include "subghz_keystore_i.h" #include #include @@ -26,18 +27,23 @@ typedef enum { SubGhzKeystoreEncryptionAES256, } SubGhzKeystoreEncryption; -struct SubGhzKeystore { - SubGhzKeyArray_t data; -}; - SubGhzKeystore* subghz_keystore_alloc() { SubGhzKeystore* instance = malloc(sizeof(SubGhzKeystore)); SubGhzKeyArray_init(instance->data); + subghz_keystore_reset_kl(instance); + return instance; } +void subghz_keystore_reset_kl(SubGhzKeystore* instance) { + furi_assert(instance); + + instance->mfname = ""; + instance->kl_type = 0; +} + void subghz_keystore_free(SubGhzKeystore* instance) { furi_assert(instance); diff --git a/lib/subghz/subghz_keystore.h b/lib/subghz/subghz_keystore.h index 06ae8adae4..dfb5c73733 100644 --- a/lib/subghz/subghz_keystore.h +++ b/lib/subghz/subghz_keystore.h @@ -75,6 +75,8 @@ bool subghz_keystore_raw_encrypted_save( */ bool subghz_keystore_raw_get_data(const char* file_name, size_t offset, uint8_t* data, size_t len); +void subghz_keystore_reset_kl(SubGhzKeystore* instance); + #ifdef __cplusplus } #endif diff --git a/lib/subghz/subghz_keystore_i.h b/lib/subghz/subghz_keystore_i.h new file mode 100644 index 0000000000..8bf2f1e519 --- /dev/null +++ b/lib/subghz/subghz_keystore_i.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +struct SubGhzKeystore { + SubGhzKeyArray_t data; + const char* mfname; + uint8_t kl_type; +}; diff --git a/lib/toolbox/version.c b/lib/toolbox/version.c index 70386d96dc..41e22ce097 100644 --- a/lib/toolbox/version.c +++ b/lib/toolbox/version.c @@ -5,7 +5,7 @@ #define VERSION_MAGIC (0xBE40u) #define VERSION_MAJOR (0x1u) -#define VERSION_MINOR (0x0u) +#define VERSION_MINOR (0x1u) struct Version { // Header @@ -20,6 +20,9 @@ struct Version { // Payload bits and pieces const uint8_t target; const bool build_is_dirty; + // v 1.1 + const char* firmware_origin; + const char* git_origin; const char* custom_flipper_name; }; @@ -38,6 +41,8 @@ static Version version = { , .target = TARGET, .build_is_dirty = BUILD_DIRTY, + .firmware_origin = FIRMWARE_ORIGIN, + .git_origin = GIT_ORIGIN, .custom_flipper_name = NULL, }; @@ -83,3 +88,11 @@ uint8_t version_get_target(const Version* v) { bool version_get_dirty_flag(const Version* v) { return v ? v->build_is_dirty : version.build_is_dirty; } + +const char* version_get_firmware_origin(const Version* v) { + return v ? v->firmware_origin : version.firmware_origin; +} + +const char* version_get_git_origin(const Version* v) { + return v ? v->git_origin : version.git_origin; +} diff --git a/lib/toolbox/version.h b/lib/toolbox/version.h index 2aa72bc281..5682600772 100644 --- a/lib/toolbox/version.h +++ b/lib/toolbox/version.h @@ -100,6 +100,17 @@ uint8_t version_get_target(const Version* v); */ bool version_get_dirty_flag(const Version* v); +/** + * Get firmware origin. "Official" for mainline firmware, fork name for forks. + * Set by FIRMWARE_ORIGIN fbt argument. +*/ +const char* version_get_firmware_origin(const Version* v); + +/** + * Get git repo origin +*/ +const char* version_get_git_origin(const Version* v); + #ifdef __cplusplus } #endif diff --git a/scripts/debug/flipperversion.py b/scripts/debug/flipperversion.py index 4ac3bd200d..56915c0f28 100644 --- a/scripts/debug/flipperversion.py +++ b/scripts/debug/flipperversion.py @@ -23,6 +23,10 @@ class VersionData: version: str target: int build_is_dirty: bool + # Since version 1.1 + firmware_origin: str = "" + git_origin: str = "" + # More fields may be added in the future extra: Optional[Dict[str, str]] = field(default_factory=dict) @@ -52,7 +56,7 @@ def load_versioned(self, major, minor): # Struct version 1.0 extra_data = int(self.version_ptr[5].cast(self._uint_type)) - return VersionData( + version_data = VersionData( git_hash=self.version_ptr[1].cast(self._cstr_type).string(), git_branch=self.version_ptr[2].cast(self._cstr_type).string(), build_date=self.version_ptr[3].cast(self._cstr_type).string(), @@ -60,6 +64,12 @@ def load_versioned(self, major, minor): target=extra_data & 0xF, build_is_dirty=bool((extra_data >> 8) & 0xF), ) + if minor >= 1: + version_data.firmware_origin = ( + self.version_ptr[6].cast(self._cstr_type).string() + ) + version_data.git_origin = self.version_ptr[7].cast(self._cstr_type).string() + return version_data def load_unversioned(self): """Parse an early version of the version struct.""" @@ -104,6 +114,10 @@ def invoke(self, arg, from_tty): print(f"\tGit commit: {v.version.git_hash}") print(f"\tDirty: {v.version.build_is_dirty}") print(f"\tHW Target: {v.version.target}") + if v.version.firmware_origin: + print(f"\tOrigin: {v.version.firmware_origin}") + if v.version.git_origin: + print(f"\tGit origin: {v.version.git_origin}") FlipperFwVersion() diff --git a/scripts/fbt_tools/fbt_envhooks.py b/scripts/fbt_tools/fbt_envhooks.py new file mode 100644 index 0000000000..0538e173c6 --- /dev/null +++ b/scripts/fbt_tools/fbt_envhooks.py @@ -0,0 +1,67 @@ +""" + +To introduce changes to firmware build environment that are specific to your fork: + + create a file "scripts/fbt/fbt_hooks.py" + +With it, you can define functions that will be called at specific points of +firmware build configuration, with environment as an argument. + +For example, you can define a function `PreConfigureFwEnvionment(env)` that +defines that will be a part of SDK build, so applications can +use them for conditional compilation. + +Here is a list of all available hooks: + + PreConfigureFwEnvionment(env): + This function is called on firmware environment (incl. updater) + before any major configuration is done. + + PostConfigureFwEnvionment(env): + This function is called on firmware environment (incl. updater) + after all configuration is done. + + PreConfigureUfbtEnvionment(env): + This function is called on ufbt environment at the beginning of + its configuration, before dist environment is created. + + PostConfigureUfbtEnvionment(env): + This function is called on ufbt dist_env environment after all + configuration and target creation is done. +""" + + +class DefaultFbtHooks: + pass + + +try: + from fbt import fbt_hooks +except ImportError: + fbt_hooks = DefaultFbtHooks() + + +def generate(env): + stub_hook = lambda env: None + control_hooks = [ + "PreConfigureFwEnvionment", + "PostConfigureFwEnvionment", + "PreConfigureUfbtEnvionment", + "PostConfigureUfbtEnvionment", + ] + + if ( + isinstance(fbt_hooks, DefaultFbtHooks) + and env.subst("${FIRMWARE_ORIGIN}") != "Official" + ): + # If fbt_hooks.py is not present, but we are not building official firmware, + # create "scripts/fbt/fbt_hooks.py" to implement changes to firmware build environment. + pass + + for hook_name in control_hooks: + hook_fn = getattr(fbt_hooks, hook_name, stub_hook) + env.AddMethod(hook_fn, hook_name) + + +def exists(): + return True diff --git a/scripts/fbt_tools/fbt_version.py b/scripts/fbt_tools/fbt_version.py index 8469e181a3..aead13b29f 100644 --- a/scripts/fbt_tools/fbt_version.py +++ b/scripts/fbt_tools/fbt_version.py @@ -19,7 +19,9 @@ def generate(env): BUILDERS={ "VersionBuilder": Builder( action=Action( - '${PYTHON3} "${VERSION_SCRIPT}" generate -t ${TARGET_HW} -o ${TARGET.dir.posix} --dir "${ROOT_DIR}"', + '${PYTHON3} "${VERSION_SCRIPT}" generate ' + "-t ${TARGET_HW} -fw-origin ${FIRMWARE_ORIGIN} " + '-o ${TARGET.dir.posix} --dir "${ROOT_DIR}"', "${VERSIONCOMSTR}", ), emitter=version_emitter, diff --git a/scripts/flipper/assets/dolphin.py b/scripts/flipper/assets/dolphin.py index ebe9fd8898..b4a53a62df 100644 --- a/scripts/flipper/assets/dolphin.py +++ b/scripts/flipper/assets/dolphin.py @@ -49,11 +49,11 @@ def __init__( def load(self, animation_directory: str): if not os.path.isdir(animation_directory): - raise Exception(f"Animation folder doesn't exists: { animation_directory }") + raise Exception(f"Animation folder doesn't exist: { animation_directory }") meta_filename = os.path.join(animation_directory, "meta.txt") if not os.path.isfile(meta_filename): - raise Exception(f"Animation meta file doesn't exists: { meta_filename }") + raise Exception(f"Animation meta file doesn't exist: { meta_filename }") self.logger.info(f"Loading meta from {meta_filename}") file = FlipperFormatFile() diff --git a/scripts/ufbt/SConstruct b/scripts/ufbt/SConstruct index 4dd1fb5b90..d72de380c3 100644 --- a/scripts/ufbt/SConstruct +++ b/scripts/ufbt/SConstruct @@ -98,6 +98,7 @@ env = core_env.Clone( "fbt_apps", "fbt_extapps", "fbt_assets", + "fbt_envhooks", ("compilation_db", {"COMPILATIONDB_COMSTR": "\tCDB\t${TARGET}"}), ], FBT_FAP_DEBUG_ELF_ROOT=ufbt_build_dir, @@ -117,6 +118,8 @@ env = core_env.Clone( wrap_tempfile(env, "LINKCOM") wrap_tempfile(env, "ARCOM") +env.PreConfigureUfbtEnvionment() + # print(env.Dump()) # Dist env @@ -474,3 +477,5 @@ dist_env.PhonyTarget( "env", "@echo $( ${FBT_SCRIPT_DIR}/toolchain/fbtenv.sh $)", ) + +dist_env.PostConfigureUfbtEnvionment() diff --git a/scripts/version.py b/scripts/version.py index 149c5d99e8..1404da98a5 100644 --- a/scripts/version.py +++ b/scripts/version.py @@ -52,8 +52,23 @@ def get_version_info(self): "GIT_BRANCH": branch, "VERSION": version, "BUILD_DIRTY": dirty and 1 or 0, + "GIT_ORIGIN": ",".join(self._get_git_origins()), } + def _get_git_origins(self): + try: + remotes = self._exec_git("remote -v") + except subprocess.CalledProcessError: + return set() + origins = set() + for line in remotes.split("\n"): + if not line: + continue + _, destination = line.split("\t") + url, _ = destination.split(" ") + origins.add(url) + return origins + def _exec_git(self, args): cmd = ["git"] cmd.extend(args.split(" ")) @@ -81,6 +96,13 @@ def init(self): help="hardware target", required=True, ) + self.parser_generate.add_argument( + "-fw-origin", + dest="firmware_origin", + type=str, + help="firmware origin", + required=True, + ) self.parser_generate.add_argument("--dir", dest="sourcedir", required=True) self.parser_generate.set_defaults(func=self.generate) @@ -96,6 +118,7 @@ def generate(self): { "BUILD_DATE": build_date.strftime("%d-%m-%Y"), "TARGET": self.args.target, + "FIRMWARE_ORIGIN": self.args.firmware_origin, } ) diff --git a/site_scons/commandline.scons b/site_scons/commandline.scons index 54bcbc5688..f6deeb4208 100644 --- a/site_scons/commandline.scons +++ b/site_scons/commandline.scons @@ -241,6 +241,13 @@ vars.AddVariables( help="Don't open browser after generating error repots", default=False, ), + ( + "FIRMWARE_ORIGIN", + "Firmware origin. 'Official' if follows upstream's API structure, otherwise fork name. " + " This will also create a C define FW_ORIGIN_ so that " + " app can check what version it is being built for.", + "Official", + ), ) Return("vars")