mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-24 22:07:14 +03:00
Merge remote-tracking branch 'upstream/dev' into eng1n33r-save-subghz
This commit is contained in:
commit
c8c75d5f14
@ -180,6 +180,7 @@ static void power_check_charging_state(Power* power) {
|
||||
static bool power_update_info(Power* power) {
|
||||
PowerInfo info;
|
||||
|
||||
info.is_charging = furi_hal_power_is_charging();
|
||||
info.gauge_is_ok = furi_hal_power_gauge_is_ok();
|
||||
info.charge = furi_hal_power_get_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);
|
||||
bool need_refresh = power->info.charge != info.charge;
|
||||
need_refresh |= power->info.is_charging != info.is_charging;
|
||||
power->info = info;
|
||||
furi_mutex_release(power->api_mtx);
|
||||
|
||||
|
@ -32,6 +32,7 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
bool gauge_is_ok;
|
||||
bool is_charging;
|
||||
|
||||
float current_charger;
|
||||
float current_gauge;
|
||||
|
@ -99,6 +99,9 @@ void subghz_scene_read_raw_on_enter(void* context) {
|
||||
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME);
|
||||
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
|
||||
subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_RAW);
|
||||
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdReadRAW);
|
||||
|
@ -1,9 +1,13 @@
|
||||
#include "../subghz_i.h"
|
||||
|
||||
#include <lib/subghz/protocols/raw.h>
|
||||
|
||||
enum SubGhzSettingIndex {
|
||||
SubGhzSettingIndexFrequency,
|
||||
SubGhzSettingIndexHopping,
|
||||
SubGhzSettingIndexModulation,
|
||||
SubGhzSettingIndexDetectRaw,
|
||||
SubGhzSettingIndexRSSIThreshold,
|
||||
SubGhzSettingIndexLock,
|
||||
};
|
||||
|
||||
@ -17,6 +21,38 @@ const uint32_t hopping_value[HOPPING_COUNT] = {
|
||||
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) {
|
||||
furi_assert(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) {
|
||||
SubGhz* subghz = variable_item_get_context(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));
|
||||
}
|
||||
|
||||
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) {
|
||||
SubGhz* subghz = variable_item_get_context(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(
|
||||
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) !=
|
||||
SubGhzCustomEventManagerSet) {
|
||||
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);
|
||||
}
|
||||
|
||||
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList);
|
||||
}
|
||||
|
||||
|
@ -92,6 +92,8 @@ void subghz_scene_receiver_info_draw_widget(SubGhz* subghz) {
|
||||
// Removed static check
|
||||
if(((subghz->txrx->decoder_result->protocol->flag & 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) {
|
||||
widget_add_button_element(
|
||||
subghz->widget,
|
||||
|
@ -180,7 +180,19 @@ bool subghz_history_add_to_history(
|
||||
FURI_LOG_E(TAG, "Missing Protocol");
|
||||
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 ");
|
||||
if(!flipper_format_read_string(item->flipper_string, "Manufacture", text)) {
|
||||
FURI_LOG_E(TAG, "Missing Protocol");
|
||||
|
@ -33,6 +33,7 @@ static const Icon* ReceiverItemIcons[] = {
|
||||
[SubGhzProtocolTypeUnknown] = &I_Quest_7x8,
|
||||
[SubGhzProtocolTypeStatic] = &I_Unlock_7x8,
|
||||
[SubGhzProtocolTypeDynamic] = &I_Lock_7x8,
|
||||
[SubGhzProtocolTypeRAW] = &I_Unlock_7x8,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
@ -234,7 +235,6 @@ void subghz_view_receiver_draw(Canvas* canvas, SubGhzViewReceiverModel* model) {
|
||||
canvas_draw_line(canvas, 46, 51, 125, 51);
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
} else {
|
||||
//canvas_draw_icon(canvas, 0, 0, &I_Decoding_123x52);
|
||||
canvas_draw_icon(canvas, 0, 0, &I_Scanning_123x52);
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
canvas_draw_str(canvas, 63, 46, "Decoding...");
|
||||
|
@ -1,5 +1,5 @@
|
||||
V:0
|
||||
T:1662935486
|
||||
T:1663109628
|
||||
D:badusb
|
||||
D:dolphin
|
||||
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:41106c0cbc5144f151b2b2d3daaa0527:727:dolphin/L3_Lab_research_128x54/meta.txt
|
||||
D:infrared/assets
|
||||
F:5e55f221320c8f0bbeafd5df59673e75:139785:infrared/assets/ac.ir
|
||||
F:1720722745039a27440e62ea08db7f3a:60611:infrared/assets/audio.ir
|
||||
F:b45037cd12a826b65667292df556ffc0:147560:infrared/assets/ac.ir
|
||||
F:4c6d8c82c534ea3817b3e18166b7242f:60693:infrared/assets/audio.ir
|
||||
F:faa49194e6ba4e5bc1ae5b2f90909d29:87512:infrared/assets/fans.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
|
||||
D:nfc/assets
|
||||
F:81dc04c7b181f94b644079a71476dff4:4742:nfc/assets/aid.nfc
|
||||
F:86efbebdf41bb6bf15cc51ef88f069d5:2565:nfc/assets/country_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
|
||||
D:subghz/assets
|
||||
F:dda1ef895b8a25fde57c874feaaef997:650:subghz/assets/came_atomo
|
||||
|
@ -1,12 +1,18 @@
|
||||
Filetype: IR library file
|
||||
Version: 1
|
||||
# Last Updated 7th Sep, 2022
|
||||
# Last Updated 13th Sept, 2022
|
||||
#
|
||||
# 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
|
||||
@ -1077,3 +1083,45 @@ 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
|
||||
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
|
||||
#
|
||||
|
@ -1,6 +1,6 @@
|
||||
Filetype: IR library file
|
||||
Version: 1
|
||||
# Last Updated 7th Sep, 2022
|
||||
# Last Updated 11th Sept, 2022
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -1262,7 +1262,6 @@ 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
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
@ -1371,3 +1370,9 @@ protocol: NEC
|
||||
address: 08 00 00 00
|
||||
command: 1A 00 00 00
|
||||
#
|
||||
name: VOL+
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: 00 00 00 00
|
||||
command: 57 00 00 00
|
||||
#
|
||||
|
@ -1,7 +1,42 @@
|
||||
Filetype: IR library file
|
||||
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
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -67,85 +102,85 @@ name: MUTE
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: 08 00 00 00
|
||||
command: 0b 00 00 00
|
||||
command: 0B 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
command: 1c 00 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 1C 00 00 00
|
||||
#
|
||||
name: VOL+
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
command: 4b 00 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 4B 00 00 00
|
||||
#
|
||||
name: VOL-
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
command: 4f 00 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 4F 00 00 00
|
||||
#
|
||||
name: CH+
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 09 00 00 00
|
||||
#
|
||||
name: CH-
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 05 00 00 00
|
||||
#
|
||||
name: MUTE
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 df 00 00
|
||||
address: 00 DF 00 00
|
||||
command: 08 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
command: 0c 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 0C 00 00 00
|
||||
#
|
||||
name: MUTE
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
command: 0d 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 0D 00 00 00
|
||||
#
|
||||
name: VOL+
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 14 00 00 00
|
||||
#
|
||||
name: VOL-
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 15 00 00 00
|
||||
#
|
||||
name: CH+
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 12 00 00 00
|
||||
#
|
||||
name: CH-
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0e 00 00 00
|
||||
address: 0E 00 00 00
|
||||
command: 13 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: RC6
|
||||
address: 00 00 00 00
|
||||
command: 0c 00 00 00
|
||||
command: 0C 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -174,19 +209,19 @@ command: 63 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: aa 00 00 00
|
||||
command: 1c 00 00 00
|
||||
address: AA 00 00 00
|
||||
command: 1C 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: 38 00 00 00
|
||||
command: 1c 00 00 00
|
||||
command: 1C 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 83 7a 00 00
|
||||
address: 83 7A 00 00
|
||||
command: 08 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
@ -199,7 +234,7 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 18 18 00 00
|
||||
command: c0 00 00 00
|
||||
command: C0 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -210,8 +245,8 @@ command: 10 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: aa 00 00 00
|
||||
command: c5 00 00 00
|
||||
address: AA 00 00 00
|
||||
command: C5 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -234,8 +269,8 @@ command: 08 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 80 6f 00 00
|
||||
command: 0a 00 00 00
|
||||
address: 80 6F 00 00
|
||||
command: 0A 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -246,13 +281,13 @@ command: 00 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 80 7b 00 00
|
||||
address: 80 7B 00 00
|
||||
command: 13 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 80 7e 00 00
|
||||
address: 80 7E 00 00
|
||||
command: 18 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
@ -265,25 +300,25 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 80 75 00 00
|
||||
command: 0a 00 00 00
|
||||
command: 0A 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 80 57 00 00
|
||||
command: 0a 00 00 00
|
||||
command: 0A 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 0b 00 00 00
|
||||
command: 0a 00 00 00
|
||||
address: 0B 00 00 00
|
||||
command: 0A 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: aa 00 00 00
|
||||
command: 1b 00 00 00
|
||||
address: AA 00 00 00
|
||||
command: 1B 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -301,7 +336,7 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 08 00 00 00
|
||||
command: 0f 00 00 00
|
||||
command: 0F 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -511,12 +546,6 @@ name: POWER
|
||||
type: raw
|
||||
frequency: 38000
|
||||
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
|
||||
#
|
||||
name: POWER
|
||||
@ -967,7 +996,7 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: 71 00 00 00
|
||||
command: 4a 00 00 00
|
||||
command: 4A 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -990,26 +1019,26 @@ command: 01 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 50 ad 00 00
|
||||
address: 50 AD 00 00
|
||||
command: 00 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 50 ad 00 00
|
||||
address: 50 AD 00 00
|
||||
command: 02 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NEC
|
||||
address: 50 00 00 00
|
||||
command: 3f 00 00 00
|
||||
command: 3F 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 06 00 00 00
|
||||
command: 0f 00 00 00
|
||||
command: 0F 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -1021,13 +1050,13 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 08 00 00 00
|
||||
command: 0b 00 00 00
|
||||
command: 0B 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 83 55 00 00
|
||||
command: c2 00 00 00
|
||||
command: C2 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -1038,20 +1067,20 @@ command: 51 00 00 00
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: NECext
|
||||
address: 00 bd 00 00
|
||||
address: 00 BD 00 00
|
||||
command: 01 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 00 00 00 00
|
||||
command: 0f 00 00 00
|
||||
command: 0F 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
address: 16 00 00 00
|
||||
command: 0f 00 00 00
|
||||
command: 0F 00 00 00
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
@ -1267,12 +1296,6 @@ name: POWER
|
||||
type: raw
|
||||
frequency: 38000
|
||||
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
|
||||
#
|
||||
name: POWER
|
||||
@ -2073,12 +2096,6 @@ frequency: 38000
|
||||
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
|
||||
#
|
||||
name: POWER
|
||||
type: parsed
|
||||
protocol: RC6
|
||||
address: 00 00 00 00
|
||||
command: 0C 00 00 00
|
||||
#
|
||||
name: VOL+
|
||||
type: parsed
|
||||
protocol: RC6
|
||||
@ -2149,26 +2166,8 @@ name: POWER
|
||||
type: parsed
|
||||
protocol: Samsung32
|
||||
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
|
||||
#
|
||||
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+
|
||||
type: parsed
|
||||
protocol: SIRC
|
||||
|
@ -1,8 +1,7 @@
|
||||
###########################
|
||||
# Do not edit, this file will be overwritten after firmware update
|
||||
# Use the user_dict file for user keys
|
||||
###########################
|
||||
# Last update 15th August, 2022
|
||||
# Last update 13th September, 2022
|
||||
# -------------------------
|
||||
# MIFARE DEFAULT KEYS
|
||||
# -- ICEMAN FORK VERSION --
|
||||
@ -142,7 +141,7 @@ F4A9EF2AFC6D
|
||||
# S6 B
|
||||
FB0B20DF1F34
|
||||
A9F953DEF0A3
|
||||
74A386AD0A6D
|
||||
74A386AD0A6D
|
||||
3F7A5C2DBD81
|
||||
21EDF95E7433
|
||||
C121FF19F681
|
||||
@ -299,8 +298,8 @@ C2B7EC7D4EB1
|
||||
AC70CA327A04
|
||||
EB0A8FF88ADE
|
||||
# TRANSPORT SYSTEM METROMONEY
|
||||
2803BCB0C7E1
|
||||
9C616585E26D
|
||||
2803BCB0C7E1
|
||||
9C616585E26D
|
||||
4FA9EB49F75E
|
||||
2DADE48942C5
|
||||
A160FCD5EC4C
|
||||
@ -1076,10 +1075,10 @@ FE04ECFE5577
|
||||
# BOSCH SOLUTION 6000
|
||||
# FOUND IN TAGINFO APP
|
||||
# RATB KEY
|
||||
C1E51C63B8F5
|
||||
C1E51C63B8F5
|
||||
1DB710648A65
|
||||
# E-GO CARD KEY
|
||||
18F34C92A56E
|
||||
18F34C92A56E
|
||||
# LIBRARY CARD MFP - SL1
|
||||
4A832584637D
|
||||
CA679D6291B0
|
||||
@ -1222,25 +1221,25 @@ A7395CCB42A0
|
||||
D14E615E0545
|
||||
69D92108C8B5
|
||||
703265497350
|
||||
D75971531042
|
||||
10510049D725
|
||||
35C649004000
|
||||
D75971531042
|
||||
10510049D725
|
||||
35C649004000
|
||||
5B0C7EC83645
|
||||
05F5EC05133C
|
||||
521B517352C7
|
||||
94B6A644DFF6
|
||||
2CA4A4D68B8E
|
||||
A7765C952DDF
|
||||
E2F14D0A0E28
|
||||
DC018FC1D126
|
||||
4927C97F1D57
|
||||
046154274C11
|
||||
155332417E00
|
||||
6B13935CD550
|
||||
C151D998C669
|
||||
D973D917A4C7
|
||||
130662240200
|
||||
9386E2A48280
|
||||
05F5EC05133C
|
||||
521B517352C7
|
||||
94B6A644DFF6
|
||||
2CA4A4D68B8E
|
||||
A7765C952DDF
|
||||
E2F14D0A0E28
|
||||
DC018FC1D126
|
||||
4927C97F1D57
|
||||
046154274C11
|
||||
155332417E00
|
||||
6B13935CD550
|
||||
C151D998C669
|
||||
D973D917A4C7
|
||||
130662240200
|
||||
9386E2A48280
|
||||
52750A0E592A
|
||||
075D1A4DD323
|
||||
32CA52054416
|
||||
@ -1250,31 +1249,31 @@ D973D917A4C7
|
||||
1F0128447C00
|
||||
411053C05273
|
||||
42454C4C4147
|
||||
C428C4550A75
|
||||
730956C72BC2
|
||||
28D70900734C
|
||||
4F75030AD12B
|
||||
6307417353C1
|
||||
C428C4550A75
|
||||
730956C72BC2
|
||||
28D70900734C
|
||||
4F75030AD12B
|
||||
6307417353C1
|
||||
D65561530174
|
||||
D1F71E05AD9D
|
||||
F7FA2F629BB1
|
||||
0E620691B9FE
|
||||
43E69C28F08C
|
||||
735175696421
|
||||
424C0FFBF657
|
||||
F7FA2F629BB1
|
||||
0E620691B9FE
|
||||
43E69C28F08C
|
||||
735175696421
|
||||
424C0FFBF657
|
||||
51E97FFF51E9
|
||||
E7316853E731
|
||||
00460740D722
|
||||
35D152154017
|
||||
5D0762D13401
|
||||
0F35D5660653
|
||||
1170553E4304
|
||||
0C4233587119
|
||||
F678905568C3
|
||||
50240A68D1D8
|
||||
2E71D3BD262A
|
||||
540D5E6355CC
|
||||
D1417E431949
|
||||
E7316853E731
|
||||
00460740D722
|
||||
35D152154017
|
||||
5D0762D13401
|
||||
0F35D5660653
|
||||
1170553E4304
|
||||
0C4233587119
|
||||
F678905568C3
|
||||
50240A68D1D8
|
||||
2E71D3BD262A
|
||||
540D5E6355CC
|
||||
D1417E431949
|
||||
4BF6DE347FB6
|
||||
3A471B2192BF
|
||||
A297CEB7D34B
|
||||
@ -1283,8 +1282,8 @@ AE76242931F1
|
||||
ABFEDC124578
|
||||
4578ABFEDC12
|
||||
# PREMIER INN HOTEL CHAIN
|
||||
5E594208EF02
|
||||
AF9E38D36582
|
||||
5E594208EF02
|
||||
AF9E38D36582
|
||||
# NORWEGIAN BUILDING SITE IDENTICATION CARD. (HMS KORT)
|
||||
10DF4D1859C8
|
||||
# KEY B
|
||||
@ -3578,27 +3577,25 @@ D27058C6E2C7
|
||||
E19504C39461
|
||||
FA1FBB3F0F1F
|
||||
FF16014FEFC7
|
||||
#
|
||||
# Cracked by UberGuidoZ
|
||||
# https://github.com/UberGuidoZ
|
||||
#
|
||||
# BadgeMaker Leaked
|
||||
1A1B1C1D1E1F
|
||||
1665FE2AE945
|
||||
158B51947A8E
|
||||
El67EC67C7FF
|
||||
EL67EC67C7FF
|
||||
D53732OFF9OE
|
||||
5E56BFA9E2C9
|
||||
F81CED821B63
|
||||
C81584EF5EDF
|
||||
9551F8F9259D
|
||||
36El765CE3E8
|
||||
36EL765CE3E8
|
||||
509052C8E42E
|
||||
776C9B03BE71
|
||||
C608El3ADD50
|
||||
C608EL3ADD50
|
||||
BEE8B345B949
|
||||
EDOEC56EEFDD
|
||||
9716D524lE28
|
||||
9716D524LE28
|
||||
05D1FC14DC31
|
||||
3321FB75A356
|
||||
F22A78E29880
|
||||
@ -3671,19 +3668,18 @@ A00000043D79
|
||||
A00000000064
|
||||
A00025000030
|
||||
A00003000057
|
||||
#
|
||||
# BH USA 2013 conference
|
||||
012279BAD3E5
|
||||
# Vigik ScanBadge App (fr.badgevigik.scanbadge)
|
||||
# Website https://badge-vigik.fr/ - By Alex`
|
||||
0000A2B3C86F
|
||||
021200c20307
|
||||
021200C20307
|
||||
021209197507
|
||||
1E34B127AF9C
|
||||
303041534956
|
||||
4143532D494E
|
||||
41454E521985
|
||||
43412d627400
|
||||
43412D627400
|
||||
455249524345
|
||||
456666456666
|
||||
45B722C63319
|
||||
@ -3706,3 +3702,22 @@ AFC984A3576E
|
||||
# data from http://www.proxmark.org/forum/viewtopic.php?pid=45100#p45100
|
||||
7CB033257498
|
||||
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
|
||||
|
@ -205,6 +205,10 @@ bool protocol_awid_write_data(ProtocolAwid* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -248,6 +248,14 @@ bool protocol_em4100_write_data(ProtocolEM4100* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -178,6 +178,10 @@ bool protocol_fdx_a_write_data(ProtocolFDXA* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -334,6 +334,10 @@ bool protocol_fdx_b_write_data(ProtocolFDXB* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -249,6 +249,10 @@ bool protocol_gallagher_write_data(ProtocolGallagher* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
bool result = false;
|
||||
|
||||
// Correct protocol data by redecoding
|
||||
protocol_gallagher_encoder_start(protocol);
|
||||
protocol_gallagher_decode(protocol);
|
||||
|
||||
protocol_gallagher_encoder_start(protocol);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -337,6 +337,10 @@ bool protocol_h10301_write_data(ProtocolH10301* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -171,6 +171,10 @@ bool protocol_hid_ex_generic_write_data(ProtocolHIDEx* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -203,6 +203,10 @@ bool protocol_hid_generic_write_data(ProtocolHID* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -259,6 +259,10 @@ bool protocol_io_prox_xsf_write_data(ProtocolIOProxXSF* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -169,6 +169,10 @@ bool protocol_jablotron_write_data(ProtocolJablotron* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
bool result = false;
|
||||
|
||||
// Correct protocol data by redecoding
|
||||
protocol_jablotron_encoder_start(protocol);
|
||||
protocol_jablotron_decode(protocol);
|
||||
|
||||
protocol_jablotron_encoder_start(protocol);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -182,6 +182,10 @@ bool protocol_pac_stanley_write_data(ProtocolPACStanley* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -162,6 +162,10 @@ bool protocol_paradox_write_data(ProtocolParadox* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
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);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -219,6 +219,10 @@ bool protocol_pyramid_write_data(ProtocolPyramid* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
bool result = false;
|
||||
|
||||
// Correct protocol data by redecoding
|
||||
protocol_pyramid_encode(protocol);
|
||||
protocol_pyramid_decode(protocol);
|
||||
|
||||
protocol_pyramid_encoder_start(protocol);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -157,6 +157,10 @@ bool protocol_viking_write_data(ProtocolViking* protocol, void* data) {
|
||||
LFRFIDWriteRequest* request = (LFRFIDWriteRequest*)data;
|
||||
bool result = false;
|
||||
|
||||
// Correct protocol data by redecoding
|
||||
protocol_viking_encoder_start(protocol);
|
||||
protocol_viking_decode(protocol);
|
||||
|
||||
protocol_viking_encoder_start(protocol);
|
||||
|
||||
if(request->write_type == LFRFIDWriteTypeT5577) {
|
||||
|
@ -8,11 +8,16 @@
|
||||
#include "../blocks/generic.h"
|
||||
#include "../blocks/math.h"
|
||||
|
||||
#include <furi.h>
|
||||
#include <flipper_format/flipper_format_i.h>
|
||||
#include <lib/toolbox/stream/stream.h>
|
||||
#include <stm32wbxx_ll_rtc.h>
|
||||
|
||||
#define TAG "SubGhzProtocolRAW"
|
||||
#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 = {
|
||||
.te_short = 50,
|
||||
@ -24,6 +29,8 @@ static const SubGhzBlockConst subghz_protocol_raw_const = {
|
||||
struct SubGhzProtocolDecoderRAW {
|
||||
SubGhzProtocolDecoderBase base;
|
||||
|
||||
SubGhzBlockDecoder decoder;
|
||||
|
||||
int32_t* upload_raw;
|
||||
uint16_t ind_write;
|
||||
Storage* storage;
|
||||
@ -32,6 +39,10 @@ struct SubGhzProtocolDecoderRAW {
|
||||
string_t file_name;
|
||||
size_t sample_write;
|
||||
bool last_level;
|
||||
bool auto_mode;
|
||||
bool has_rssi_above_threshold;
|
||||
int rssi_threshold;
|
||||
uint8_t postroll_frames;
|
||||
};
|
||||
|
||||
struct SubGhzProtocolEncoderRAW {
|
||||
@ -55,8 +66,8 @@ const SubGhzProtocolDecoder subghz_protocol_raw_decoder = {
|
||||
.feed = subghz_protocol_decoder_raw_feed,
|
||||
.reset = subghz_protocol_decoder_raw_reset,
|
||||
|
||||
.get_hash_data = NULL,
|
||||
.serialize = NULL,
|
||||
.get_hash_data = subghz_protocol_decoder_raw_get_hash_data,
|
||||
.serialize = subghz_protocol_decoder_raw_serialize,
|
||||
.deserialize = subghz_protocol_decoder_raw_deserialize,
|
||||
.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;
|
||||
}
|
||||
|
||||
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) {
|
||||
return instance->sample_write + instance->ind_write;
|
||||
}
|
||||
@ -210,6 +251,8 @@ void* subghz_protocol_decoder_raw_alloc(SubGhzEnvironment* environment) {
|
||||
instance->ind_write = 0;
|
||||
instance->last_level = false;
|
||||
instance->file_is_open = RAWFileIsOpenClose;
|
||||
instance->postroll_frames = 0;
|
||||
instance->rssi_threshold = SUBGHZ_AUTO_DETECT_RAW_THRESHOLD;
|
||||
string_init(instance->file_name);
|
||||
|
||||
return instance;
|
||||
@ -219,6 +262,10 @@ void subghz_protocol_decoder_raw_free(void* context) {
|
||||
furi_assert(context);
|
||||
SubGhzProtocolDecoderRAW* instance = context;
|
||||
string_clear(instance->file_name);
|
||||
if(instance->upload_raw != NULL) {
|
||||
free(instance->upload_raw);
|
||||
instance->upload_raw = NULL;
|
||||
}
|
||||
free(instance);
|
||||
}
|
||||
|
||||
@ -226,23 +273,65 @@ void subghz_protocol_decoder_raw_reset(void* context) {
|
||||
furi_assert(context);
|
||||
SubGhzProtocolDecoderRAW* instance = context;
|
||||
instance->ind_write = 0;
|
||||
instance->has_rssi_above_threshold = 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) {
|
||||
furi_assert(context);
|
||||
SubGhzProtocolDecoderRAW* instance = context;
|
||||
|
||||
if(instance->upload_raw != NULL) {
|
||||
if(duration > subghz_protocol_raw_const.te_short) {
|
||||
if(instance->upload_raw != NULL && 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) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if(instance->ind_write == SUBGHZ_DOWNLOAD_MAX_SIZE) {
|
||||
subghz_protocol_raw_save_to_file_write(instance);
|
||||
if(instance->ind_write == SUBGHZ_DOWNLOAD_MAX_SIZE) {
|
||||
subghz_protocol_raw_save_to_file_write(instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -255,12 +344,19 @@ bool subghz_protocol_decoder_raw_deserialize(void* context, FlipperFormat* flipp
|
||||
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) {
|
||||
furi_assert(context);
|
||||
//SubGhzProtocolDecoderRAW* instance = context;
|
||||
UNUSED(context);
|
||||
//ToDo no use
|
||||
string_cat_printf(output, "RAW Date");
|
||||
string_cat_printf(output, "RAW Data");
|
||||
}
|
||||
|
||||
void* subghz_protocol_encoder_raw_alloc(SubGhzEnvironment* environment) {
|
||||
@ -273,6 +369,13 @@ void* subghz_protocol_encoder_raw_alloc(SubGhzEnvironment* environment) {
|
||||
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) {
|
||||
SubGhzProtocolEncoderRAW* instance = context;
|
||||
instance->is_running = false;
|
||||
@ -330,6 +433,70 @@ void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char*
|
||||
} 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) {
|
||||
furi_assert(context);
|
||||
SubGhzProtocolEncoderRAW* instance = context;
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
#include "base.h"
|
||||
|
||||
#include <furi_hal.h>
|
||||
|
||||
#define SUBGHZ_PROTOCOL_RAW_NAME "RAW"
|
||||
|
||||
typedef void (*SubGhzProtocolEncoderRAWCallbackEnd)(void* context);
|
||||
@ -25,6 +27,27 @@ bool subghz_protocol_raw_save_to_file_init(
|
||||
const char* dev_name,
|
||||
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
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
|
||||
@ -67,12 +99,19 @@ void subghz_protocol_decoder_raw_feed(void* context, bool level, uint32_t durati
|
||||
|
||||
/**
|
||||
* Deserialize data SubGhzProtocolDecoderRAW.
|
||||
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
|
||||
* @param flipper_format Pointer to a FlipperFormat instance
|
||||
* @param context Pointer to a SubGhzProtocolDecoderRAW instance
|
||||
* @param flipper_format Pointer to a FlipperFormat instance
|
||||
* @return true On success
|
||||
*/
|
||||
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.
|
||||
* @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);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @param context Pointer to a SubGhzProtocolEncoderRAW instance
|
||||
@ -134,6 +186,6 @@ bool subghz_protocol_encoder_raw_deserialize(void* context, FlipperFormat* flipp
|
||||
/**
|
||||
* Getting the level and duration of the upload to be loaded into DMA.
|
||||
* @param context Pointer to a SubGhzProtocolEncoderRAW instance
|
||||
* @return LevelDuration
|
||||
* @return LevelDuration
|
||||
*/
|
||||
LevelDuration subghz_protocol_encoder_raw_yield(void* context);
|
||||
|
@ -139,6 +139,10 @@ static bool
|
||||
uint64_t code_found_reverse;
|
||||
int res = 0;
|
||||
|
||||
if(instance->manufacture_name == 0x0) {
|
||||
instance->manufacture_name = "";
|
||||
}
|
||||
|
||||
if(strcmp(instance->manufacture_name, "Unknown") == 0) {
|
||||
code_found_reverse = subghz_protocol_blocks_reverse_key(
|
||||
instance->generic.data, instance->generic.data_count_bit);
|
||||
|
@ -61,7 +61,7 @@ void subghz_receiver_decode(SubGhzReceiver* instance, bool level, uint32_t durat
|
||||
|
||||
for
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -105,6 +105,11 @@ void subghz_receiver_set_filter(SubGhzReceiver* instance, SubGhzProtocolFlag fil
|
||||
instance->filter = filter;
|
||||
}
|
||||
|
||||
SubGhzProtocolFlag subghz_receiver_get_filter(SubGhzReceiver* instance) {
|
||||
furi_assert(instance);
|
||||
return instance->filter;
|
||||
}
|
||||
|
||||
SubGhzProtocolDecoderBase* subghz_receiver_search_decoder_base_by_name(
|
||||
SubGhzReceiver* instance,
|
||||
const char* decoder_name) {
|
||||
|
@ -55,6 +55,13 @@ void subghz_receiver_set_rx_callback(
|
||||
*/
|
||||
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.
|
||||
* @param instance Pointer to a SubGhzReceiver instance
|
||||
|
Loading…
Reference in New Issue
Block a user