Merge remote-tracking branch 'upstream/dev' into eng1n33r-save-subghz

This commit is contained in:
Der Skythe 2022-09-14 17:57:00 +04:00
commit c8c75d5f14
31 changed files with 668 additions and 164 deletions

View File

@ -180,6 +180,7 @@ static void power_check_charging_state(Power* power) {
static bool power_update_info(Power* power) { static bool power_update_info(Power* power) {
PowerInfo info; PowerInfo info;
info.is_charging = furi_hal_power_is_charging();
info.gauge_is_ok = furi_hal_power_gauge_is_ok(); info.gauge_is_ok = furi_hal_power_gauge_is_ok();
info.charge = furi_hal_power_get_pct(); info.charge = furi_hal_power_get_pct();
info.health = furi_hal_power_get_bat_health_pct(); info.health = furi_hal_power_get_bat_health_pct();
@ -195,6 +196,7 @@ static bool power_update_info(Power* power) {
furi_mutex_acquire(power->api_mtx, FuriWaitForever); furi_mutex_acquire(power->api_mtx, FuriWaitForever);
bool need_refresh = power->info.charge != info.charge; bool need_refresh = power->info.charge != info.charge;
need_refresh |= power->info.is_charging != info.is_charging;
power->info = info; power->info = info;
furi_mutex_release(power->api_mtx); furi_mutex_release(power->api_mtx);

View File

@ -32,6 +32,7 @@ typedef struct {
typedef struct { typedef struct {
bool gauge_is_ok; bool gauge_is_ok;
bool is_charging;
float current_charger; float current_charger;
float current_gauge; float current_gauge;

View File

@ -99,6 +99,9 @@ void subghz_scene_read_raw_on_enter(void* context) {
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME); subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME);
furi_assert(subghz->txrx->decoder_result); furi_assert(subghz->txrx->decoder_result);
// make sure we're not in auto-detect mode, which is only meant for the Read app
subghz_protocol_decoder_raw_set_auto_mode(subghz->txrx->decoder_result, false);
//set filter RAW feed //set filter RAW feed
subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_RAW); subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_RAW);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdReadRAW); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdReadRAW);

View File

@ -1,9 +1,13 @@
#include "../subghz_i.h" #include "../subghz_i.h"
#include <lib/subghz/protocols/raw.h>
enum SubGhzSettingIndex { enum SubGhzSettingIndex {
SubGhzSettingIndexFrequency, SubGhzSettingIndexFrequency,
SubGhzSettingIndexHopping, SubGhzSettingIndexHopping,
SubGhzSettingIndexModulation, SubGhzSettingIndexModulation,
SubGhzSettingIndexDetectRaw,
SubGhzSettingIndexRSSIThreshold,
SubGhzSettingIndexLock, SubGhzSettingIndexLock,
}; };
@ -17,6 +21,38 @@ const uint32_t hopping_value[HOPPING_COUNT] = {
SubGhzHopperStateRunnig, SubGhzHopperStateRunnig,
}; };
#define DETECT_RAW_COUNT 2
const char* const detect_raw_text[DETECT_RAW_COUNT] = {
"OFF",
"ON",
};
const SubGhzProtocolFlag detect_raw_value[DETECT_RAW_COUNT] = {
SubGhzProtocolFlag_Decodable,
SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_RAW,
};
#define RSSI_THRESHOLD_COUNT 7
const char* const rssi_threshold_text[RSSI_THRESHOLD_COUNT] = {
"-72db",
"-67db",
"-62db",
"-57db",
"-52db",
"-47db",
"-42db",
};
const int rssi_threshold_value[RSSI_THRESHOLD_COUNT] = {
-72,
-67,
-62,
-57,
-52,
-47,
-42,
};
uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void* context) { uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void* context) {
furi_assert(context); furi_assert(context);
SubGhz* subghz = context; SubGhz* subghz = context;
@ -67,6 +103,34 @@ uint8_t subghz_scene_receiver_config_hopper_value_index(
} }
} }
uint8_t subghz_scene_receiver_config_detect_raw_value_index(
const SubGhzProtocolFlag value,
const SubGhzProtocolFlag values[],
uint8_t values_count) {
uint8_t index = 0;
for(uint8_t i = 0; i < values_count; i++) {
if(value == values[i]) {
index = i;
break;
}
}
return index;
}
uint8_t subghz_scene_receiver_config_rssi_threshold_value_index(
const int value,
const int values[],
uint8_t values_count) {
uint8_t index = 0;
for(uint8_t i = 0; i < values_count; i++) {
if(value == values[i]) {
index = i;
break;
}
}
return index;
}
static void subghz_scene_receiver_config_set_frequency(VariableItem* item) { static void subghz_scene_receiver_config_set_frequency(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item); SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item); uint8_t index = variable_item_get_current_value_index(item);
@ -104,6 +168,30 @@ static void subghz_scene_receiver_config_set_preset(VariableItem* item) {
subghz_setting_get_preset_data_size(subghz->setting, index)); subghz_setting_get_preset_data_size(subghz->setting, index));
} }
static void subghz_scene_receiver_config_set_rssi_threshold(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, rssi_threshold_text[index]);
subghz_protocol_decoder_raw_set_rssi_threshold(
subghz_receiver_search_decoder_base_by_name(
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
rssi_threshold_value[index]);
}
static void subghz_scene_receiver_config_set_detect_raw(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, detect_raw_text[index]);
subghz_receiver_set_filter(subghz->txrx->receiver, detect_raw_value[index]);
subghz_protocol_decoder_raw_set_auto_mode(
subghz_receiver_search_decoder_base_by_name(
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
(index == 1));
}
static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) { static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item); SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item); uint8_t index = variable_item_get_current_value_index(item);
@ -200,6 +288,39 @@ void subghz_scene_receiver_config_on_enter(void* context) {
variable_item_set_current_value_text( variable_item_set_current_value_text(
item, subghz_setting_get_preset_name(subghz->setting, value_index)); item, subghz_setting_get_preset_name(subghz->setting, value_index));
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerSet) {
item = variable_item_list_add(
subghz->variable_item_list,
"Detect Raw:",
DETECT_RAW_COUNT,
subghz_scene_receiver_config_set_detect_raw,
subghz);
value_index = subghz_scene_receiver_config_detect_raw_value_index(
subghz_receiver_get_filter(subghz->txrx->receiver),
detect_raw_value,
DETECT_RAW_COUNT);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, detect_raw_text[value_index]);
}
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerSet) {
item = variable_item_list_add(
subghz->variable_item_list,
"RSSI for Raw:",
RSSI_THRESHOLD_COUNT,
subghz_scene_receiver_config_set_rssi_threshold,
subghz);
value_index = subghz_scene_receiver_config_rssi_threshold_value_index(
subghz_protocol_encoder_get_rssi_threshold(subghz_receiver_search_decoder_base_by_name(
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME)),
rssi_threshold_value,
RSSI_THRESHOLD_COUNT);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, rssi_threshold_text[value_index]);
}
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerSet) { SubGhzCustomEventManagerSet) {
variable_item_list_add(subghz->variable_item_list, "Lock Keyboard", 1, NULL, NULL); variable_item_list_add(subghz->variable_item_list, "Lock Keyboard", 1, NULL, NULL);
@ -208,6 +329,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
subghz_scene_receiver_config_var_list_enter_callback, subghz_scene_receiver_config_var_list_enter_callback,
subghz); subghz);
} }
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList);
} }

View File

@ -92,6 +92,8 @@ void subghz_scene_receiver_info_draw_widget(SubGhz* subghz) {
// Removed static check // Removed static check
if(((subghz->txrx->decoder_result->protocol->flag & SubGhzProtocolFlag_Send) == if(((subghz->txrx->decoder_result->protocol->flag & SubGhzProtocolFlag_Send) ==
SubGhzProtocolFlag_Send) && SubGhzProtocolFlag_Send) &&
// disable "Send" for auto-captured RAW signals for now. They can still be saved and sent by loading them.
subghz->txrx->decoder_result->protocol->type != SubGhzProtocolTypeRAW &&
subghz->txrx->decoder_result->protocol->encoder->deserialize) { subghz->txrx->decoder_result->protocol->encoder->deserialize) {
widget_add_button_element( widget_add_button_element(
subghz->widget, subghz->widget,

View File

@ -180,7 +180,19 @@ bool subghz_history_add_to_history(
FURI_LOG_E(TAG, "Missing Protocol"); FURI_LOG_E(TAG, "Missing Protocol");
break; break;
} }
if(!strcmp(string_get_cstr(instance->tmp_string), "KeeLoq")) { if(!strcmp(string_get_cstr(instance->tmp_string), "RAW")) {
string_printf(
item->item_str,
"RAW %03ld.%02ld",
preset->frequency / 1000000 % 1000,
preset->frequency / 10000 % 100);
if(!flipper_format_rewind(item->flipper_string)) {
FURI_LOG_E(TAG, "Rewind error");
}
break;
} else if(!strcmp(string_get_cstr(instance->tmp_string), "KeeLoq")) {
string_set_str(instance->tmp_string, "KL "); string_set_str(instance->tmp_string, "KL ");
if(!flipper_format_read_string(item->flipper_string, "Manufacture", text)) { if(!flipper_format_read_string(item->flipper_string, "Manufacture", text)) {
FURI_LOG_E(TAG, "Missing Protocol"); FURI_LOG_E(TAG, "Missing Protocol");

View File

@ -33,6 +33,7 @@ static const Icon* ReceiverItemIcons[] = {
[SubGhzProtocolTypeUnknown] = &I_Quest_7x8, [SubGhzProtocolTypeUnknown] = &I_Quest_7x8,
[SubGhzProtocolTypeStatic] = &I_Unlock_7x8, [SubGhzProtocolTypeStatic] = &I_Unlock_7x8,
[SubGhzProtocolTypeDynamic] = &I_Lock_7x8, [SubGhzProtocolTypeDynamic] = &I_Lock_7x8,
[SubGhzProtocolTypeRAW] = &I_Unlock_7x8,
}; };
typedef enum { typedef enum {
@ -234,7 +235,6 @@ void subghz_view_receiver_draw(Canvas* canvas, SubGhzViewReceiverModel* model) {
canvas_draw_line(canvas, 46, 51, 125, 51); canvas_draw_line(canvas, 46, 51, 125, 51);
canvas_set_font(canvas, FontSecondary); canvas_set_font(canvas, FontSecondary);
} else { } else {
//canvas_draw_icon(canvas, 0, 0, &I_Decoding_123x52);
canvas_draw_icon(canvas, 0, 0, &I_Scanning_123x52); canvas_draw_icon(canvas, 0, 0, &I_Scanning_123x52);
canvas_set_font(canvas, FontPrimary); canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 63, 46, "Decoding..."); canvas_draw_str(canvas, 63, 46, "Decoding...");

View File

@ -1,5 +1,5 @@
V:0 V:0
T:1662935486 T:1663109628
D:badusb D:badusb
D:dolphin D:dolphin
D:infrared D:infrared
@ -244,17 +244,17 @@ F:33b8fde22f34ef556b64b77164bc19b0:578:dolphin/L3_Lab_research_128x54/frame_8.bm
F:f267f0654781049ca323b11bb4375519:581:dolphin/L3_Lab_research_128x54/frame_9.bm F:f267f0654781049ca323b11bb4375519:581:dolphin/L3_Lab_research_128x54/frame_9.bm
F:41106c0cbc5144f151b2b2d3daaa0527:727:dolphin/L3_Lab_research_128x54/meta.txt F:41106c0cbc5144f151b2b2d3daaa0527:727:dolphin/L3_Lab_research_128x54/meta.txt
D:infrared/assets D:infrared/assets
F:5e55f221320c8f0bbeafd5df59673e75:139785:infrared/assets/ac.ir F:b45037cd12a826b65667292df556ffc0:147560:infrared/assets/ac.ir
F:1720722745039a27440e62ea08db7f3a:60611:infrared/assets/audio.ir F:4c6d8c82c534ea3817b3e18166b7242f:60693:infrared/assets/audio.ir
F:faa49194e6ba4e5bc1ae5b2f90909d29:87512:infrared/assets/fans.ir F:faa49194e6ba4e5bc1ae5b2f90909d29:87512:infrared/assets/fans.ir
F:4193827d68bbdbbda9347d423752b70f:7164:infrared/assets/projectors.ir F:4193827d68bbdbbda9347d423752b70f:7164:infrared/assets/projectors.ir
F:b2fcc57a3d2f053bca6070c50fda0704:140314:infrared/assets/tv.ir F:46e8bdd3292c7e3b2f0cf58bae298dbc:144311:infrared/assets/tv.ir
F:a157a80f5a668700403d870c23b9567d:470:music_player/Marble_Machine.fmf F:a157a80f5a668700403d870c23b9567d:470:music_player/Marble_Machine.fmf
D:nfc/assets D:nfc/assets
F:81dc04c7b181f94b644079a71476dff4:4742:nfc/assets/aid.nfc F:81dc04c7b181f94b644079a71476dff4:4742:nfc/assets/aid.nfc
F:86efbebdf41bb6bf15cc51ef88f069d5:2565:nfc/assets/country_code.nfc F:86efbebdf41bb6bf15cc51ef88f069d5:2565:nfc/assets/country_code.nfc
F:41b4f08774249014cb8d3dffa5f5c07d:1757:nfc/assets/currency_code.nfc F:41b4f08774249014cb8d3dffa5f5c07d:1757:nfc/assets/currency_code.nfc
F:5f57e2ecfc850efb74c7d2677eb75a2e:51832:nfc/assets/mf_classic_dict.nfc F:d207504f7a85342249e3048580f4c1cc:51970:nfc/assets/mf_classic_dict.nfc
F:319958d37b2316a2e752ebb856c32524:126:rfidfuzzer/example_uids.txt F:319958d37b2316a2e752ebb856c32524:126:rfidfuzzer/example_uids.txt
D:subghz/assets D:subghz/assets
F:dda1ef895b8a25fde57c874feaaef997:650:subghz/assets/came_atomo F:dda1ef895b8a25fde57c874feaaef997:650:subghz/assets/came_atomo

View File

@ -1,12 +1,18 @@
Filetype: IR library file Filetype: IR library file
Version: 1 Version: 1
# Last Updated 7th Sep, 2022 # Last Updated 13th Sept, 2022
# #
# TIMER ON # TIMER ON
name: TIMER name: TIMER
type: raw type: raw
frequency: 38000 frequency: 38000
duty_cycle: 0.330000 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 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 # TIMER ON
name: TIMER name: TIMER
@ -1077,3 +1083,45 @@ frequency: 38000
duty_cycle: 0.330000 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 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
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
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
#
name: TEMP+
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-
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
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
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
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
#

View File

@ -1,6 +1,6 @@
Filetype: IR library file Filetype: IR library file
Version: 1 Version: 1
# Last Updated 7th Sep, 2022 # Last Updated 11th Sept, 2022
# #
name: POWER name: POWER
type: parsed type: parsed
@ -1262,7 +1262,6 @@ frequency: 38000
duty_cycle: 0.330000 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 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 type: parsed
protocol: NEC protocol: NEC
@ -1371,3 +1370,9 @@ protocol: NEC
address: 08 00 00 00 address: 08 00 00 00
command: 1A 00 00 00 command: 1A 00 00 00
# #
name: VOL+
type: parsed
protocol: NEC
address: 00 00 00 00
command: 57 00 00 00
#

View File

@ -1,7 +1,42 @@
Filetype: IR library file Filetype: IR library file
Version: 1 Version: 1
# Last Updated 9th Sept, 2022 # Last Updated 13th Sept, 2022
# #
name: POWER
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3553 1709 466 407 465 1277 466 407 492 379 464 406 465 406 465 405 466 405 466 406 491 407 463 408 462 409 461 411 460 1284 459 412 460 412 460 412 459 412 459 412 459 412 459 412 460 412 459 412 459 1284 459 412 460 412 459 412 459 413 459 412 460 412 459 412 460 412 459 1285 458 412 459 1285 458 1285 459 1285 458 1285 458 413 458 413 458 1285 458 413 458 1285 459 1285 459 1285 458 1285 458 413 458 1285 458 74570 3544 1715 460 411 460 1284 459 412 459 412 459 412 459 412 460 412 459 412 459 412 459 412 459 412 459 412 460 412 459 1284 459 412 460 412 459 412 459 412 460 412 459 412 459 412 459 412 459 412 460 1284 459 412 459 412 459 412 460 412 459 412 460 412 459 412 460 412 460 1284 459 412 460 1284 459 1284 459 1285 459 1285 458 413 458 413 458 1285 459 412 459 1285 458 1285 458 1285 459 1285 459 412 459 1284 459 74570 3544 1715 459 413 458 1285 459 412 459 412 459 413 459 413 458 413 458 413 459 413 458 413 458 413 459 413 458 413 458 1285 459 413 459 413 458 413 458 413 459 413 458 413 459 413 458 413 458 413 459 1285 458 413 458 413 458 413 459 413 458 413 458 413 459 413 459 413 458 1285 459 413 458 1285 459 1285 459 1285 458 1285 458 413 458 413 458 1285 459 413 458 1285 458 1285 458 1286 457 1286 458 414 458 1286 457
#
name: MUTE
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3554 1678 495 403 468 1248 495 403 497 374 497 375 497 374 497 374 497 375 496 375 496 375 495 377 493 378 492 380 490 1254 489 383 488 383 489 383 488 383 488 383 488 383 489 383 488 383 489 383 488 1255 488 383 488 384 488 383 488 384 487 384 487 384 487 384 488 384 488 384 487 1256 487 384 488 384 487 1256 488 1256 488 384 487 384 487 384 488 1256 487 384 488 384 487 1257 487 1257 487 385 486 1257 487
#
name: VOL+
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3554 1678 495 404 467 1249 524 374 497 374 497 374 497 374 497 374 497 375 496 375 495 376 494 377 493 379 491 381 489 1255 488 383 488 383 488 383 489 383 488 383 488 383 488 383 489 383 488 383 489 1255 488 383 489 383 488 383 489 383 488 383 488 384 488 383 489 383 488 384 488 384 487 383 488 384 487 384 488 1256 488 384 487 384 487 384 488 384 487 384 487 384 488 384 487 1256 487 384 488 1256 487 75630 3547 1686 487 384 487 1281 462 409 463 409 462 409 462 410 462 409 462 409 463 409 463 410 461 410 461 410 462 410 461 1282 462 410 461 410 461 410 462 410 461 410 461 410 462 410 461 410 461 410 461 1282 462 410 462 410 461 410 461 410 461 410 462 410 462 410 461 410 461 410 462 410 462 410 461 410 462 410 461 1282 462 410 461 410 461 410 461 410 461 411 461 410 461 411 461 1282 461 411 461 1283 460
#
name: VOL-
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3585 1649 524 374 497 1245 498 373 498 374 497 375 496 375 496 375 496 375 496 375 496 376 494 378 492 379 491 381 490 1255 489 383 488 383 488 383 489 383 488 383 488 383 488 383 488 383 489 383 488 1255 488 383 488 383 488 383 489 383 488 383 488 383 488 383 488 383 488 1256 488 384 488 384 487 384 487 384 487 1256 487 384 488 384 488 1256 487 384 488 408 463 385 487 384 487 1257 486 385 486 1257 486 75629 3549 1684 489 383 488 1255 488 383 488 383 489 383 488 383 489 383 488 383 489 383 488 383 489 383 488 383 488 384 488 1255 489 383 488 384 488 384 487 383 488 384 487 383 489 384 487 384 488 384 487 1256 487 384 488 384 487 384 488 384 487 385 486 384 488 385 486 385 486 1257 487 384 487 409 462 386 486 385 486 1257 486 385 486 409 462 1257 487 409 462 409 463 409 462 409 463 1281 462 410 462 1282 461
#
name: CH+
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3526 1678 495 403 468 1248 496 403 496 375 496 375 497 375 496 375 496 376 495 376 495 376 495 377 493 378 492 380 490 1254 488 384 488 383 488 384 488 384 487 384 487 384 487 384 488 384 487 384 488 1257 486 385 486 385 486 385 487 385 486 386 486 409 462 409 462 410 461 410 462 410 461 1282 462 409 462 1282 462 1282 461 410 462 410 461 410 461 410 462 1282 461 410 462 1282 461 1282 462 410 461 1282 462
#
name: CH-
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 3583 1649 524 374 497 1218 526 373 498 374 497 374 497 374 497 374 497 374 497 374 497 375 495 376 494 378 492 380 490 1254 489 382 489 382 489 382 490 382 489 382 489 382 489 382 490 382 490 382 489 1254 490 382 489 383 488 382 490 382 489 382 490 382 489 382 489 382 490 1254 489 383 488 1255 489 383 488 1255 489 1255 488 383 488 383 489 1255 488 383 488 1255 489 383 488 1255 488 1255 489 383 488 1255 489
# ON # ON
name: POWER name: POWER
type: parsed type: parsed
@ -67,85 +102,85 @@ name: MUTE
type: parsed type: parsed
protocol: NEC protocol: NEC
address: 08 00 00 00 address: 08 00 00 00
command: 0b 00 00 00 command: 0B 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 1c 00 00 00 command: 1C 00 00 00
# #
name: VOL+ name: VOL+
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 4b 00 00 00 command: 4B 00 00 00
# #
name: VOL- name: VOL-
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 4f 00 00 00 command: 4F 00 00 00
# #
name: CH+ name: CH+
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 09 00 00 00 command: 09 00 00 00
# #
name: CH- name: CH-
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 05 00 00 00 command: 05 00 00 00
# #
name: MUTE name: MUTE
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 df 00 00 address: 00 DF 00 00
command: 08 00 00 00 command: 08 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 0c 00 00 00 command: 0C 00 00 00
# #
name: MUTE name: MUTE
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 0d 00 00 00 command: 0D 00 00 00
# #
name: VOL+ name: VOL+
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 14 00 00 00 command: 14 00 00 00
# #
name: VOL- name: VOL-
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 15 00 00 00 command: 15 00 00 00
# #
name: CH+ name: CH+
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 12 00 00 00 command: 12 00 00 00
# #
name: CH- name: CH-
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0e 00 00 00 address: 0E 00 00 00
command: 13 00 00 00 command: 13 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: RC6 protocol: RC6
address: 00 00 00 00 address: 00 00 00 00
command: 0c 00 00 00 command: 0C 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -174,19 +209,19 @@ command: 63 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: aa 00 00 00 address: AA 00 00 00
command: 1c 00 00 00 command: 1C 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: 38 00 00 00 address: 38 00 00 00
command: 1c 00 00 00 command: 1C 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 83 7a 00 00 address: 83 7A 00 00
command: 08 00 00 00 command: 08 00 00 00
# #
name: POWER name: POWER
@ -199,7 +234,7 @@ name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 18 18 00 00 address: 18 18 00 00
command: c0 00 00 00 command: C0 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -210,8 +245,8 @@ command: 10 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: aa 00 00 00 address: AA 00 00 00
command: c5 00 00 00 command: C5 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -234,8 +269,8 @@ command: 08 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 80 6f 00 00 address: 80 6F 00 00
command: 0a 00 00 00 command: 0A 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -246,13 +281,13 @@ command: 00 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 80 7b 00 00 address: 80 7B 00 00
command: 13 00 00 00 command: 13 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 80 7e 00 00 address: 80 7E 00 00
command: 18 00 00 00 command: 18 00 00 00
# #
name: POWER name: POWER
@ -265,25 +300,25 @@ name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 80 75 00 00 address: 80 75 00 00
command: 0a 00 00 00 command: 0A 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 80 57 00 00 address: 80 57 00 00
command: 0a 00 00 00 command: 0A 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 0b 00 00 00 address: 0B 00 00 00
command: 0a 00 00 00 command: 0A 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: aa 00 00 00 address: AA 00 00 00
command: 1b 00 00 00 command: 1B 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -301,7 +336,7 @@ name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 08 00 00 00 address: 08 00 00 00
command: 0f 00 00 00 command: 0F 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -511,12 +546,6 @@ name: POWER
type: raw type: raw
frequency: 38000 frequency: 38000
duty_cycle: 0.33 duty_cycle: 0.33
data: 10726 41047 10727
#
name: POWER
type: raw
frequency: 38000
duty_cycle: 0.33
data: 1617 4604 1559 1537 1560 1537 1560 4661 1533 33422 1613 4607 1566 1530 1556 1540 1536 4685 1539 data: 1617 4604 1559 1537 1560 1537 1560 4661 1533 33422 1613 4607 1566 1530 1556 1540 1536 4685 1539
# #
name: POWER name: POWER
@ -967,7 +996,7 @@ name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: 71 00 00 00 address: 71 00 00 00
command: 4a 00 00 00 command: 4A 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -990,26 +1019,26 @@ command: 01 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 50 ad 00 00 address: 50 AD 00 00
command: 00 00 00 00 command: 00 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 50 ad 00 00 address: 50 AD 00 00
command: 02 00 00 00 command: 02 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NEC protocol: NEC
address: 50 00 00 00 address: 50 00 00 00
command: 3f 00 00 00 command: 3F 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 06 00 00 00 address: 06 00 00 00
command: 0f 00 00 00 command: 0F 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -1021,13 +1050,13 @@ name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 08 00 00 00 address: 08 00 00 00
command: 0b 00 00 00 command: 0B 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 83 55 00 00 address: 83 55 00 00
command: c2 00 00 00 command: C2 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -1038,20 +1067,20 @@ command: 51 00 00 00
name: POWER name: POWER
type: parsed type: parsed
protocol: NECext protocol: NECext
address: 00 bd 00 00 address: 00 BD 00 00
command: 01 00 00 00 command: 01 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 00 00 00 00 address: 00 00 00 00
command: 0f 00 00 00 command: 0F 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 16 00 00 00 address: 16 00 00 00
command: 0f 00 00 00 command: 0F 00 00 00
# #
name: POWER name: POWER
type: parsed type: parsed
@ -1267,12 +1296,6 @@ name: POWER
type: raw type: raw
frequency: 38000 frequency: 38000
duty_cycle: 0.33 duty_cycle: 0.33
data: 170 46238 169
#
name: POWER
type: raw
frequency: 38000
duty_cycle: 0.33
data: 8906 4165 572 1672 569 1678 563 640 572 637 565 643 569 633 569 643 569 1674 567 639 563 1684 567 637 565 1681 570 1675 566 1673 568 1681 570 636 566 640 572 637 565 639 563 1684 567 640 572 630 572 640 572 634 568 1675 566 1681 570 1670 571 638 564 1681 570 1669 572 1678 563 1680 571 40485 8898 2252 570 85621 8955 2194 567 data: 8906 4165 572 1672 569 1678 563 640 572 637 565 643 569 633 569 643 569 1674 567 639 563 1684 567 637 565 1681 570 1675 566 1673 568 1681 570 636 566 640 572 637 565 639 563 1684 567 640 572 630 572 640 572 634 568 1675 566 1681 570 1670 571 638 564 1681 570 1669 572 1678 563 1680 571 40485 8898 2252 570 85621 8955 2194 567
# #
name: POWER name: POWER
@ -2073,12 +2096,6 @@ frequency: 38000
duty_cycle: 0.330000 duty_cycle: 0.330000
data: 3479 1762 421 452 417 1330 418 455 424 449 420 426 443 457 422 451 418 456 423 450 419 454 425 448 421 452 417 457 422 1324 424 449 420 453 415 458 421 452 417 456 423 450 419 454 425 448 421 453 416 1330 418 1329 419 454 415 458 421 1298 450 423 446 455 424 449 420 453 416 457 422 451 418 1329 419 1327 421 1325 423 451 418 1328 420 1326 422 1325 423 450 419 1328 420 453 416 1303 445 455 424 1295 453 448 421 data: 3479 1762 421 452 417 1330 418 455 424 449 420 426 443 457 422 451 418 456 423 450 419 454 425 448 421 452 417 457 422 1324 424 449 420 453 415 458 421 452 417 456 423 450 419 454 425 448 421 453 416 1330 418 1329 419 454 415 458 421 1298 450 423 446 455 424 449 420 453 416 457 422 451 418 1329 419 1327 421 1325 423 451 418 1328 420 1326 422 1325 423 450 419 1328 420 453 416 1303 445 455 424 1295 453 448 421
# #
name: POWER
type: parsed
protocol: RC6
address: 00 00 00 00
command: 0C 00 00 00
#
name: VOL+ name: VOL+
type: parsed type: parsed
protocol: RC6 protocol: RC6
@ -2149,26 +2166,8 @@ name: POWER
type: parsed type: parsed
protocol: Samsung32 protocol: Samsung32
address: 07 00 00 00 address: 07 00 00 00
command: e6 00 00 00
#
name: POWER
type: parsed
protocol: Samsung32
address: 07 00 00 00
command: 98 00 00 00 command: 98 00 00 00
# #
name: VOL-
type: parsed
protocol: Samsung32
address: 07 00 00 00
command: 0b 00 00 00
#
name: MUTE
type: parsed
protocol: Samsung32
address: 07 00 00 00
command: 0f 00 00 00
#
name: VOL+ name: VOL+
type: parsed type: parsed
protocol: SIRC protocol: SIRC

View File

@ -1,8 +1,7 @@
########################### ###########################
# Do not edit, this file will be overwritten after firmware update # Do not edit, this file will be overwritten after firmware update
# Use the user_dict file for user keys # Use the user_dict file for user keys
########################### # Last update 13th September, 2022
# Last update 15th August, 2022
# ------------------------- # -------------------------
# MIFARE DEFAULT KEYS # MIFARE DEFAULT KEYS
# -- ICEMAN FORK VERSION -- # -- ICEMAN FORK VERSION --
@ -3578,27 +3577,25 @@ D27058C6E2C7
E19504C39461 E19504C39461
FA1FBB3F0F1F FA1FBB3F0F1F
FF16014FEFC7 FF16014FEFC7
#
# Cracked by UberGuidoZ # Cracked by UberGuidoZ
# https://github.com/UberGuidoZ # https://github.com/UberGuidoZ
#
# BadgeMaker Leaked # BadgeMaker Leaked
1A1B1C1D1E1F 1A1B1C1D1E1F
1665FE2AE945 1665FE2AE945
158B51947A8E 158B51947A8E
El67EC67C7FF EL67EC67C7FF
D53732OFF9OE D53732OFF9OE
5E56BFA9E2C9 5E56BFA9E2C9
F81CED821B63 F81CED821B63
C81584EF5EDF C81584EF5EDF
9551F8F9259D 9551F8F9259D
36El765CE3E8 36EL765CE3E8
509052C8E42E 509052C8E42E
776C9B03BE71 776C9B03BE71
C608El3ADD50 C608EL3ADD50
BEE8B345B949 BEE8B345B949
EDOEC56EEFDD EDOEC56EEFDD
9716D524lE28 9716D524LE28
05D1FC14DC31 05D1FC14DC31
3321FB75A356 3321FB75A356
F22A78E29880 F22A78E29880
@ -3671,19 +3668,18 @@ A00000043D79
A00000000064 A00000000064
A00025000030 A00025000030
A00003000057 A00003000057
#
# BH USA 2013 conference # BH USA 2013 conference
012279BAD3E5 012279BAD3E5
# Vigik ScanBadge App (fr.badgevigik.scanbadge) # Vigik ScanBadge App (fr.badgevigik.scanbadge)
# Website https://badge-vigik.fr/ - By Alex` # Website https://badge-vigik.fr/ - By Alex`
0000A2B3C86F 0000A2B3C86F
021200c20307 021200C20307
021209197507 021209197507
1E34B127AF9C 1E34B127AF9C
303041534956 303041534956
4143532D494E 4143532D494E
41454E521985 41454E521985
43412d627400 43412D627400
455249524345 455249524345
456666456666 456666456666
45B722C63319 45B722C63319
@ -3706,3 +3702,22 @@ AFC984A3576E
# data from http://www.proxmark.org/forum/viewtopic.php?pid=45100#p45100 # data from http://www.proxmark.org/forum/viewtopic.php?pid=45100#p45100
7CB033257498 7CB033257498
1153AABAFF6C 1153AABAFF6C
# iGuard Simple and Reverse Keys
D537320FF90E
36E1765CE3E8
C608E13ADD50
ED0EC56EEFDD
9716D5241E28
2E52ABE0CE95
61D030C0D7A8
# BadgeMaker Leaked from https://github.com/UberGuidoZ
E167EC67C7FF
# Schlage 9691T Keyfob from seasnaill Added by VideoMan.
3111A3A303EB
# Transport cards
E954024EE754
0CD464CDC100
BC305FE2DA65
CF0EC6ACF2F9
F7A545095C49
6862FD600F78

View File

@ -205,6 +205,10 @@ bool protocol_awid_write_data(ProtocolAwid* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
protocol_awid_decode(protocol->encoded_data, protocol->data);
protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data); protocol_awid_encode(protocol->data, (uint8_t*)protocol->encoded_data);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -248,6 +248,14 @@ bool protocol_em4100_write_data(ProtocolEM4100* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_em4100_encoder_start(protocol);
em4100_decode(
(uint8_t*)&protocol->encoded_data,
sizeof(EM4100DecodedData),
protocol->data,
EM4100_DECODED_DATA_SIZE);
protocol_em4100_encoder_start(protocol); protocol_em4100_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -178,6 +178,10 @@ bool protocol_fdx_a_write_data(ProtocolFDXA* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_fdx_a_encoder_start(protocol);
protocol_fdx_a_decode(protocol->encoded_data, protocol->data);
protocol_fdx_a_encoder_start(protocol); protocol_fdx_a_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -334,6 +334,10 @@ bool protocol_fdx_b_write_data(ProtocolFDXB* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_fdx_b_encoder_start(protocol);
protocol_fdx_b_decode(protocol);
protocol_fdx_b_encoder_start(protocol); protocol_fdx_b_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -249,6 +249,10 @@ bool protocol_gallagher_write_data(ProtocolGallagher* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_gallagher_encoder_start(protocol);
protocol_gallagher_decode(protocol);
protocol_gallagher_encoder_start(protocol); protocol_gallagher_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -337,6 +337,10 @@ bool protocol_h10301_write_data(ProtocolH10301* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_h10301_encoder_start(protocol);
protocol_h10301_decode(protocol->encoded_data, protocol->data);
protocol_h10301_encoder_start(protocol); protocol_h10301_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -171,6 +171,10 @@ bool protocol_hid_ex_generic_write_data(ProtocolHIDEx* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_hid_ex_generic_encoder_start(protocol);
protocol_hid_ex_generic_decode(protocol->encoded_data, protocol->data);
protocol_hid_ex_generic_encoder_start(protocol); protocol_hid_ex_generic_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -203,6 +203,10 @@ bool protocol_hid_generic_write_data(ProtocolHID* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_hid_generic_encoder_start(protocol);
protocol_hid_generic_decode(protocol->encoded_data, protocol->data);
protocol_hid_generic_encoder_start(protocol); protocol_hid_generic_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -259,6 +259,10 @@ bool protocol_io_prox_xsf_write_data(ProtocolIOProxXSF* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_io_prox_xsf_encode(protocol->data, protocol->encoded_data);
protocol_io_prox_xsf_decode(protocol->encoded_data, protocol->data);
protocol_io_prox_xsf_encode(protocol->data, protocol->encoded_data); protocol_io_prox_xsf_encode(protocol->data, protocol->encoded_data);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -169,6 +169,10 @@ bool protocol_jablotron_write_data(ProtocolJablotron* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_jablotron_encoder_start(protocol);
protocol_jablotron_decode(protocol);
protocol_jablotron_encoder_start(protocol); protocol_jablotron_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -182,6 +182,10 @@ bool protocol_pac_stanley_write_data(ProtocolPACStanley* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_pac_stanley_encoder_start(protocol);
protocol_pac_stanley_decode(protocol);
protocol_pac_stanley_encoder_start(protocol); protocol_pac_stanley_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -162,6 +162,10 @@ bool protocol_paradox_write_data(ProtocolParadox* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_paradox_encode(protocol->data, (uint8_t*)protocol->encoded_data);
protocol_paradox_decode(protocol->encoded_data, protocol->data);
protocol_paradox_encode(protocol->data, (uint8_t*)protocol->encoded_data); protocol_paradox_encode(protocol->data, (uint8_t*)protocol->encoded_data);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -219,6 +219,10 @@ bool protocol_pyramid_write_data(ProtocolPyramid* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_pyramid_encode(protocol);
protocol_pyramid_decode(protocol);
protocol_pyramid_encoder_start(protocol); protocol_pyramid_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -157,6 +157,10 @@ bool protocol_viking_write_data(ProtocolViking* protocol, void* data) {
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data; LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
bool result = false; bool result = false;
// Correct protocol data by redecoding
protocol_viking_encoder_start(protocol);
protocol_viking_decode(protocol);
protocol_viking_encoder_start(protocol); protocol_viking_encoder_start(protocol);
if(request->write_type == LFRFIDWriteTypeT5577) { if(request->write_type == LFRFIDWriteTypeT5577) {

View File

@ -8,11 +8,16 @@
#include "../blocks/generic.h" #include "../blocks/generic.h"
#include "../blocks/math.h" #include "../blocks/math.h"
#include <furi.h>
#include <flipper_format/flipper_format_i.h> #include <flipper_format/flipper_format_i.h>
#include <lib/toolbox/stream/stream.h> #include <lib/toolbox/stream/stream.h>
#include <stm32wbxx_ll_rtc.h>
#define TAG "SubGhzProtocolRAW" #define TAG "SubGhzProtocolRAW"
#define SUBGHZ_DOWNLOAD_MAX_SIZE 512 #define SUBGHZ_DOWNLOAD_MAX_SIZE 512
#define SUBGHZ_AUTO_DETECT_DOWNLOAD_MAX_SIZE 2048
#define SUBGHZ_AUTO_DETECT_RAW_THRESHOLD -72.0f
#define SUBGHZ_AUTO_DETECT_RAW_POSTROLL_FRAMES 30
static const SubGhzBlockConst subghz_protocol_raw_const = { static const SubGhzBlockConst subghz_protocol_raw_const = {
.te_short = 50, .te_short = 50,
@ -24,6 +29,8 @@ static const SubGhzBlockConst subghz_protocol_raw_const = {
struct SubGhzProtocolDecoderRAW { struct SubGhzProtocolDecoderRAW {
SubGhzProtocolDecoderBase base; SubGhzProtocolDecoderBase base;
SubGhzBlockDecoder decoder;
int32_t* upload_raw; int32_t* upload_raw;
uint16_t ind_write; uint16_t ind_write;
Storage* storage; Storage* storage;
@ -32,6 +39,10 @@ struct SubGhzProtocolDecoderRAW {
string_t file_name; string_t file_name;
size_t sample_write; size_t sample_write;
bool last_level; bool last_level;
bool auto_mode;
bool has_rssi_above_threshold;
int rssi_threshold;
uint8_t postroll_frames;
}; };
struct SubGhzProtocolEncoderRAW { struct SubGhzProtocolEncoderRAW {
@ -55,8 +66,8 @@ const SubGhzProtocolDecoder subghz_protocol_raw_decoder = {
.feed = subghz_protocol_decoder_raw_feed, .feed = subghz_protocol_decoder_raw_feed,
.reset = subghz_protocol_decoder_raw_reset, .reset = subghz_protocol_decoder_raw_reset,
.get_hash_data = NULL, .get_hash_data = subghz_protocol_decoder_raw_get_hash_data,
.serialize = NULL, .serialize = subghz_protocol_decoder_raw_serialize,
.deserialize = subghz_protocol_decoder_raw_deserialize, .deserialize = subghz_protocol_decoder_raw_deserialize,
.get_string = subghz_protocol_decoder_raw_get_string, .get_string = subghz_protocol_decoder_raw_get_string,
}; };
@ -198,6 +209,36 @@ void subghz_protocol_raw_save_to_file_stop(SubGhzProtocolDecoderRAW* instance) {
instance->file_is_open = RAWFileIsOpenClose; instance->file_is_open = RAWFileIsOpenClose;
} }
void subghz_protocol_decoder_raw_set_rssi_threshold(void* context, int rssi_threshold) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
FURI_LOG_D(TAG, "RSSI set: (%d)", rssi_threshold);
instance->rssi_threshold = rssi_threshold;
subghz_protocol_decoder_raw_reset(context);
}
void subghz_protocol_decoder_raw_set_auto_mode(void* context, bool auto_mode) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
instance->auto_mode = auto_mode;
if(auto_mode) {
if(instance->upload_raw == NULL) {
instance->upload_raw = malloc(SUBGHZ_AUTO_DETECT_DOWNLOAD_MAX_SIZE * sizeof(int32_t));
}
} else {
if(instance->upload_raw != NULL) {
free(instance->upload_raw);
instance->upload_raw = NULL;
}
}
subghz_protocol_decoder_raw_reset(context);
}
size_t subghz_protocol_raw_get_sample_write(SubGhzProtocolDecoderRAW* instance) { size_t subghz_protocol_raw_get_sample_write(SubGhzProtocolDecoderRAW* instance) {
return instance->sample_write + instance->ind_write; return instance->sample_write + instance->ind_write;
} }
@ -210,6 +251,8 @@ void* subghz_protocol_decoder_raw_alloc(SubGhzEnvironment* environment) {
instance->ind_write = 0; instance->ind_write = 0;
instance->last_level = false; instance->last_level = false;
instance->file_is_open = RAWFileIsOpenClose; instance->file_is_open = RAWFileIsOpenClose;
instance->postroll_frames = 0;
instance->rssi_threshold = SUBGHZ_AUTO_DETECT_RAW_THRESHOLD;
string_init(instance->file_name); string_init(instance->file_name);
return instance; return instance;
@ -219,6 +262,10 @@ void subghz_protocol_decoder_raw_free(void* context) {
furi_assert(context); furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context; SubGhzProtocolDecoderRAW* instance = context;
string_clear(instance->file_name); string_clear(instance->file_name);
if(instance->upload_raw != NULL) {
free(instance->upload_raw);
instance->upload_raw = NULL;
}
free(instance); free(instance);
} }
@ -226,25 +273,67 @@ void subghz_protocol_decoder_raw_reset(void* context) {
furi_assert(context); furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context; SubGhzProtocolDecoderRAW* instance = context;
instance->ind_write = 0; instance->ind_write = 0;
instance->has_rssi_above_threshold = false;
instance->last_level = false; instance->last_level = false;
instance->postroll_frames = 0;
}
bool subghz_protocol_decoder_raw_write_data(void* context, bool level, uint32_t duration) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
bool wrote_data = false;
if(instance->last_level != level) {
instance->last_level = (level ? true : false);
instance->upload_raw[instance->ind_write++] = (level ? duration : -duration);
subghz_protocol_blocks_add_bit(&instance->decoder, (level) ? 1 : 0);
wrote_data = true;
}
if(instance->ind_write == SUBGHZ_AUTO_DETECT_DOWNLOAD_MAX_SIZE) {
if(instance->base.callback)
instance->base.callback(&instance->base, instance->base.context);
return false;
}
return wrote_data;
} }
void subghz_protocol_decoder_raw_feed(void* context, bool level, uint32_t duration) { void subghz_protocol_decoder_raw_feed(void* context, bool level, uint32_t duration) {
furi_assert(context); furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context; SubGhzProtocolDecoderRAW* instance = context;
if(instance->upload_raw != NULL) { if(instance->upload_raw != NULL && duration > subghz_protocol_raw_const.te_short) {
if(duration > subghz_protocol_raw_const.te_short) { if(instance->auto_mode) {
float rssi = furi_hal_subghz_get_rssi();
if(rssi >= instance->rssi_threshold) {
subghz_protocol_decoder_raw_write_data(context, level, duration);
instance->has_rssi_above_threshold = true;
instance->postroll_frames = 0;
} else if(instance->has_rssi_above_threshold) {
subghz_protocol_decoder_raw_write_data(instance, level, duration);
instance->postroll_frames++;
if(instance->postroll_frames >= SUBGHZ_AUTO_DETECT_RAW_POSTROLL_FRAMES) {
if(instance->base.callback)
instance->base.callback(&instance->base, instance->base.context);
}
}
} else {
if(instance->last_level != level) { if(instance->last_level != level) {
instance->last_level = (level ? true : false); instance->last_level = (level ? true : false);
instance->upload_raw[instance->ind_write++] = (level ? duration : -duration); instance->upload_raw[instance->ind_write++] = (level ? duration : -duration);
} subghz_protocol_blocks_add_bit(&instance->decoder, (level) ? 1 : 0);
} }
if(instance->ind_write == SUBGHZ_DOWNLOAD_MAX_SIZE) { if(instance->ind_write == SUBGHZ_DOWNLOAD_MAX_SIZE) {
subghz_protocol_raw_save_to_file_write(instance); subghz_protocol_raw_save_to_file_write(instance);
} }
} }
}
} }
bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipper_format) { bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipper_format) {
@ -255,12 +344,19 @@ bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipp
return true; return true;
} }
uint8_t subghz_protocol_decoder_raw_get_hash_data(void* context) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
return subghz_protocol_blocks_get_hash_data(
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
void subghz_protocol_decoder_raw_get_string(void* context, string_t output) { void subghz_protocol_decoder_raw_get_string(void* context, string_t output) {
furi_assert(context); furi_assert(context);
//SubGhzProtocolDecoderRAW* instance = context; //SubGhzProtocolDecoderRAW* instance = context;
UNUSED(context); UNUSED(context);
//ToDo no use //ToDo no use
string_cat_printf(output, "RAW Date"); string_cat_printf(output, "RAW Data");
} }
void* subghz_protocol_encoder_raw_alloc(SubGhzEnvironment* environment) { void* subghz_protocol_encoder_raw_alloc(SubGhzEnvironment* environment) {
@ -273,6 +369,13 @@ void* subghz_protocol_encoder_raw_alloc(SubGhzEnvironment* environment) {
return instance; return instance;
} }
int subghz_protocol_encoder_get_rssi_threshold(void* context) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
return instance->rssi_threshold;
}
void subghz_protocol_encoder_raw_stop(void* context) { void subghz_protocol_encoder_raw_stop(void* context) {
SubGhzProtocolEncoderRAW* instance = context; SubGhzProtocolEncoderRAW* instance = context;
instance->is_running = false; instance->is_running = false;
@ -330,6 +433,70 @@ void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char*
} while(false); } while(false);
} }
bool subghz_protocol_decoder_raw_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzPresetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderRAW* instance = context;
if(instance->auto_mode) {
furi_assert(instance);
bool res = false;
string_t temp_str;
string_init(temp_str);
do {
stream_clean(flipper_format_get_raw_stream(flipper_format));
if(!flipper_format_write_header_cstr(
flipper_format, SUBGHZ_RAW_FILE_TYPE, SUBGHZ_RAW_FILE_VERSION)) {
FURI_LOG_E(TAG, "Unable to add header");
break;
}
if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
break;
}
subghz_block_generic_get_preset_name(string_get_cstr(preset->name), temp_str);
if(!flipper_format_write_string_cstr(
flipper_format, "Preset", string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
break;
}
if(!strcmp(string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
if(!flipper_format_write_string_cstr(
flipper_format, "Custom_preset_module", "CC1101")) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
break;
}
if(!flipper_format_write_hex(
flipper_format, "Custom_preset_data", preset->data, preset->data_size)) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
break;
}
}
if(!flipper_format_write_string_cstr(
flipper_format, "Protocol", instance->base.protocol->name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
break;
}
if(!flipper_format_write_int32(
flipper_format, "RAW_Data", instance->upload_raw, instance->ind_write)) {
FURI_LOG_E(TAG, "Unable to add Raw Data");
break;
} else {
instance->ind_write = 0;
}
res = true;
} while(false);
string_clear(temp_str);
return res;
} else {
return false;
}
}
bool subghz_protocol_encoder_raw_deserialize(void* context, FlipperFormat* flipper_format) { bool subghz_protocol_encoder_raw_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context); furi_assert(context);
SubGhzProtocolEncoderRAW* instance = context; SubGhzProtocolEncoderRAW* instance = context;

View File

@ -2,6 +2,8 @@
#include "base.h" #include "base.h"
#include <furi_hal.h>
#define SUBGHZ_PROTOCOL_RAW_NAME "RAW" #define SUBGHZ_PROTOCOL_RAW_NAME "RAW"
typedef void (*SubGhzProtocolEncoderRAWCallbackEnd)(void* context); typedef void (*SubGhzProtocolEncoderRAWCallbackEnd)(void* context);
@ -25,6 +27,27 @@ bool subghz_protocol_raw_save_to_file_init(
const char* dev_name, const char* dev_name,
SubGhzPresetDefinition* preset); SubGhzPresetDefinition* preset);
/**
* Set SubGhzProtocolDecoderRAW to auto mode, which allows subghz_scene_receiver to capture RAW.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @param auto_mode Whether or not to enable auto mode
*/
void subghz_protocol_decoder_raw_set_auto_mode(void* context, bool auto_mode);
/**
* Set RSSI threshold ("sensitivity" level).
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @param rssi_threshold The desired RSSI threshold
*/
void subghz_protocol_decoder_raw_set_rssi_threshold(void* context, int rssi_threshold);
/**
* Get RSSI threshold ("sensitivity" level).
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @return rssi threshold in db
*/
int subghz_protocol_encoder_get_rssi_threshold(void* context);
/** /**
* Stop writing file to flash * Stop writing file to flash
* @param instance Pointer to a SubGhzProtocolDecoderRAW instance * @param instance Pointer to a SubGhzProtocolDecoderRAW instance
@ -57,6 +80,15 @@ void subghz_protocol_decoder_raw_free(void* context);
*/ */
void subghz_protocol_decoder_raw_reset(void* context); void subghz_protocol_decoder_raw_reset(void* context);
/**
* Write raw data to the instance's internal buffer.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @param level Signal level true-high false-low
* @param duration Duration of this level in, us
* @return whether or not data was written
*/
bool subghz_protocol_decoder_raw_write_data(void* context, bool level, uint32_t duration);
/** /**
* Parse a raw sequence of levels and durations received from the air. * Parse a raw sequence of levels and durations received from the air.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance * @param context Pointer to a SubGhzProtocolDecoderRAW instance
@ -73,6 +105,13 @@ void subghz_protocol_decoder_raw_feed(void* context, bool level, uint32_t durati
*/ */
bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipper_format); bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting the hash sum of the last randomly received parcel.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @return hash Hash sum
*/
uint8_t subghz_protocol_decoder_raw_get_hash_data(void* context);
/** /**
* Getting a textual representation of the received data. * Getting a textual representation of the received data.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance * @param context Pointer to a SubGhzProtocolDecoderRAW instance
@ -123,6 +162,19 @@ void subghz_protocol_raw_file_encoder_worker_set_callback_end(
*/ */
void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char* file_path); void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char* file_path);
/**
* Serialize data SubGhzProtocolDecoderRAW.
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param frequency The frequency at which the signal was received, Hz
* @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
* @return true On success
*/
bool subghz_protocol_decoder_raw_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzPresetDefinition* preset);
/** /**
* Deserialize and generating an upload to send. * Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderRAW instance * @param context Pointer to a SubGhzProtocolEncoderRAW instance

View File

@ -139,6 +139,10 @@ static bool
uint64_t code_found_reverse; uint64_t code_found_reverse;
int res = 0; int res = 0;
if(instance->manufacture_name == 0x0) {
instance->manufacture_name = "";
}
if(strcmp(instance->manufacture_name, "Unknown") == 0) { if(strcmp(instance->manufacture_name, "Unknown") == 0) {
code_found_reverse = subghz_protocol_blocks_reverse_key( code_found_reverse = subghz_protocol_blocks_reverse_key(
instance->generic.data, instance->generic.data_count_bit); instance->generic.data, instance->generic.data_count_bit);

View File

@ -61,7 +61,7 @@ void subghz_receiver_decode(SubGhzReceiver* instance, bool level, uint32_t durat
for for
M_EACH(slot, instance->slots, SubGhzReceiverSlotArray_t) { M_EACH(slot, instance->slots, SubGhzReceiverSlotArray_t) {
if((slot->base->protocol->flag & instance->filter) == instance->filter) { if((slot->base->protocol->flag & instance->filter) != 0) {
slot->base->protocol->decoder->feed(slot->base, level, duration); slot->base->protocol->decoder->feed(slot->base, level, duration);
} }
} }
@ -105,6 +105,11 @@ void subghz_receiver_set_filter(SubGhzReceiver* instance, SubGhzProtocolFlag fil
instance->filter = filter; instance->filter = filter;
} }
SubGhzProtocolFlag subghz_receiver_get_filter(SubGhzReceiver* instance) {
furi_assert(instance);
return instance->filter;
}
SubGhzProtocolDecoderBase* subghz_receiver_search_decoder_base_by_name( SubGhzProtocolDecoderBase* subghz_receiver_search_decoder_base_by_name(
SubGhzReceiver* instance, SubGhzReceiver* instance,
const char* decoder_name) { const char* decoder_name) {

View File

@ -55,6 +55,13 @@ void subghz_receiver_set_rx_callback(
*/ */
void subghz_receiver_set_filter(SubGhzReceiver* instance, SubGhzProtocolFlag filter); void subghz_receiver_set_filter(SubGhzReceiver* instance, SubGhzProtocolFlag filter);
/**
* Get the filter of receivers that will work at the moment.
* @param instance Pointer to a SubGhzReceiver instance
* @return filter Filter, SubGhzProtocolFlag
*/
SubGhzProtocolFlag subghz_receiver_get_filter(SubGhzReceiver* instance);
/** /**
* Search for a cattery by his name. * Search for a cattery by his name.
* @param instance Pointer to a SubGhzReceiver instance * @param instance Pointer to a SubGhzReceiver instance