mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-20 04:54:45 -07:00
Merge branch 'UNLEASHED' into 420
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
[-> Download qFlipper 1.2.1 (allows .tgz installation) (official link)](https://update.flipperzero.one/builds/qFlipper/1.2.1/)
|
[-> Download qFlipper 1.2.1 (allows .tgz installation) (official link)](https://update.flipperzero.one/builds/qFlipper/1.2.1/)
|
||||||
|
|
||||||
## Please support development of the project
|
## Please support development of the project
|
||||||
* Boosty: https://boosty.to/mmxdev
|
|
||||||
* destream (100 EUR min): https://destream.net/live/MMX/donate
|
* destream (100 EUR min): https://destream.net/live/MMX/donate
|
||||||
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
|
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65
|
||||||
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`
|
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ static bool bad_usb_file_select(BadUsbApp* bad_usb) {
|
|||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(
|
dialog_file_browser_set_basic_options(
|
||||||
&browser_options, BAD_USB_APP_SCRIPT_EXTENSION, &I_badusb_10px);
|
&browser_options, BAD_USB_APP_SCRIPT_EXTENSION, &I_badusb_10px);
|
||||||
browser_options.skip_assets = true;
|
|
||||||
browser_options.base_path = BAD_USB_APP_BASE_FOLDER;
|
browser_options.base_path = BAD_USB_APP_BASE_FOLDER;
|
||||||
|
browser_options.skip_assets = true;
|
||||||
|
|
||||||
// Input events and views are managed by file_browser
|
// Input events and views are managed by file_browser
|
||||||
bool res = dialog_file_browser_show(
|
bool res = dialog_file_browser_show(
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ bool subghz_scene_rpc_on_event(void* context, SceneManagerEvent event) {
|
|||||||
rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX);
|
rpc_system_app_set_error_code(subghz->rpc_ctx, SubGhzErrorTypeOnlyRX);
|
||||||
rpc_system_app_set_error_text(
|
rpc_system_app_set_error_text(
|
||||||
subghz->rpc_ctx,
|
subghz->rpc_ctx,
|
||||||
"Transmission on this frequency is restricted in your region");
|
"Transmission on this frequency is restricted in your settings");
|
||||||
}
|
}
|
||||||
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonPress, result);
|
rpc_system_app_confirm(subghz->rpc_ctx, RpcAppEventButtonPress, result);
|
||||||
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
} else if(event.event == SubGhzCustomEventSceneRpcButtonRelease) {
|
||||||
|
|||||||
@@ -828,6 +828,7 @@ int32_t unirfremix_app(void* p) {
|
|||||||
|
|
||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(&browser_options, UNIRFMAP_EXTENSION, &I_sub1_10px);
|
dialog_file_browser_set_basic_options(&browser_options, UNIRFMAP_EXTENSION, &I_sub1_10px);
|
||||||
|
browser_options.base_path = UNIRFMAP_FOLDER;
|
||||||
|
|
||||||
bool res = dialog_file_browser_show(dialogs, app->file_path, app->file_path, &browser_options);
|
bool res = dialog_file_browser_show(dialogs, app->file_path, app->file_path, &browser_options);
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ bool flipfrid_load_custom_uids_from_file(FlipFridState* context) {
|
|||||||
|
|
||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(&browser_options, LFRFID_UIDS_EXTENSION, &I_125_10px);
|
dialog_file_browser_set_basic_options(&browser_options, LFRFID_UIDS_EXTENSION, &I_125_10px);
|
||||||
|
browser_options.base_path = RFIDFUZZER_APP_PATH_FOLDER;
|
||||||
browser_options.hide_ext = false;
|
browser_options.hide_ext = false;
|
||||||
|
|
||||||
bool res = dialog_file_browser_show(context->dialogs, uid_path, uid_path, &browser_options);
|
bool res = dialog_file_browser_show(context->dialogs, uid_path, uid_path, &browser_options);
|
||||||
|
|||||||
@@ -178,6 +178,7 @@ bool flipfrid_load_protocol_from_file(FlipFridState* context) {
|
|||||||
|
|
||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(&browser_options, LFRFID_APP_EXTENSION, &I_125_10px);
|
dialog_file_browser_set_basic_options(&browser_options, LFRFID_APP_EXTENSION, &I_125_10px);
|
||||||
|
browser_options.base_path = LFRFID_APP_PATH_FOLDER;
|
||||||
|
|
||||||
// Input events and views are managed by file_select
|
// Input events and views are managed by file_select
|
||||||
bool res = dialog_file_browser_show(
|
bool res = dialog_file_browser_show(
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ bool ibtnfuzzer_load_custom_uids_from_file(iBtnFuzzerState* context) {
|
|||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(
|
dialog_file_browser_set_basic_options(
|
||||||
&browser_options, IBTNFUZZER_UIDS_EXTENSION, &I_ibutt_10px);
|
&browser_options, IBTNFUZZER_UIDS_EXTENSION, &I_ibutt_10px);
|
||||||
|
browser_options.base_path = IBTNFUZZER_APP_PATH_FOLDER;
|
||||||
browser_options.hide_ext = false;
|
browser_options.hide_ext = false;
|
||||||
|
|
||||||
bool res = dialog_file_browser_show(context->dialogs, uid_path, uid_path, &browser_options);
|
bool res = dialog_file_browser_show(context->dialogs, uid_path, uid_path, &browser_options);
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ bool ibtnfuzzer_load_protocol_from_file(iBtnFuzzerState* context) {
|
|||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(
|
dialog_file_browser_set_basic_options(
|
||||||
&browser_options, IBUTTON_FUZZER_APP_EXTENSION, &I_ibutt_10px);
|
&browser_options, IBUTTON_FUZZER_APP_EXTENSION, &I_ibutt_10px);
|
||||||
|
browser_options.base_path = IBUTTON_FUZZER_APP_PATH_FOLDER;
|
||||||
|
|
||||||
// Input events and views are managed by file_select
|
// Input events and views are managed by file_select
|
||||||
bool res = dialog_file_browser_show(
|
bool res = dialog_file_browser_show(
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ static bool open_wav_stream(Stream* stream) {
|
|||||||
|
|
||||||
DialogsFileBrowserOptions browser_options;
|
DialogsFileBrowserOptions browser_options;
|
||||||
dialog_file_browser_set_basic_options(&browser_options, ".wav", &I_music_10px);
|
dialog_file_browser_set_basic_options(&browser_options, ".wav", &I_music_10px);
|
||||||
|
browser_options.base_path = WAVPLAYER_FOLDER;
|
||||||
browser_options.hide_ext = false;
|
browser_options.hide_ext = false;
|
||||||
|
|
||||||
bool ret = dialog_file_browser_show(dialogs, path, path, &browser_options);
|
bool ret = dialog_file_browser_show(dialogs, path, path, &browser_options);
|
||||||
|
|||||||
BIN
applications/plugins/weather_station/images/Humid_8x13.png
Normal file
BIN
applications/plugins/weather_station/images/Humid_8x13.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
BIN
applications/plugins/weather_station/images/Timer_11x11.png
Normal file
BIN
applications/plugins/weather_station/images/Timer_11x11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
@@ -105,8 +105,8 @@ bool ws_block_generic_serialize(
|
|||||||
uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
||||||
|
|
||||||
temp_data = curr_ts;
|
temp_data = curr_ts;
|
||||||
if(!flipper_format_write_uint32(flipper_format, "Old", &temp_data, 1)) {
|
if(!flipper_format_write_uint32(flipper_format, "Ts", &temp_data, 1)) {
|
||||||
FURI_LOG_E(TAG, "Unable to add agedata");
|
FURI_LOG_E(TAG, "Unable to add timestamp");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,11 +179,11 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp
|
|||||||
}
|
}
|
||||||
instance->humidity = (uint8_t)temp_data;
|
instance->humidity = (uint8_t)temp_data;
|
||||||
|
|
||||||
if(!flipper_format_read_uint32(flipper_format, "Old", (uint32_t*)&temp_data, 1)) {
|
if(!flipper_format_read_uint32(flipper_format, "Ts", (uint32_t*)&temp_data, 1)) {
|
||||||
FURI_LOG_E(TAG, "Missing agedata");
|
FURI_LOG_E(TAG, "Missing timestamp");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
instance->agedata = (uint32_t)temp_data;
|
instance->timestamp = (uint32_t)temp_data;
|
||||||
|
|
||||||
if(!flipper_format_read_uint32(flipper_format, "Ch", (uint32_t*)&temp_data, 1)) {
|
if(!flipper_format_read_uint32(flipper_format, "Ch", (uint32_t*)&temp_data, 1)) {
|
||||||
FURI_LOG_E(TAG, "Missing Channel");
|
FURI_LOG_E(TAG, "Missing Channel");
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ struct WSBlockGeneric {
|
|||||||
uint8_t data_count_bit;
|
uint8_t data_count_bit;
|
||||||
uint8_t battery_low;
|
uint8_t battery_low;
|
||||||
uint8_t humidity;
|
uint8_t humidity;
|
||||||
uint32_t agedata;
|
uint32_t timestamp;
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
uint8_t btn;
|
uint8_t btn;
|
||||||
float temp;
|
float temp;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include <m-array.h>
|
#include <m-array.h>
|
||||||
|
|
||||||
#define FRAME_HEIGHT 12
|
#define FRAME_HEIGHT 12
|
||||||
#define MAX_LEN_PX 100
|
#define MAX_LEN_PX 112
|
||||||
#define MENU_ITEMS 4u
|
#define MENU_ITEMS 4u
|
||||||
#define UNLOCK_CNT 3
|
#define UNLOCK_CNT 3
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ void ws_view_receiver_draw(Canvas* canvas, WSReceiverModel* model) {
|
|||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_set_color(canvas, ColorBlack);
|
||||||
}
|
}
|
||||||
canvas_draw_icon(canvas, 4, 2 + i * FRAME_HEIGHT, ReceiverItemIcons[item_menu->type]);
|
canvas_draw_icon(canvas, 4, 2 + i * FRAME_HEIGHT, ReceiverItemIcons[item_menu->type]);
|
||||||
canvas_draw_str(canvas, 15, 9 + i * FRAME_HEIGHT, furi_string_get_cstr(str_buff));
|
canvas_draw_str(canvas, 14, 9 + i * FRAME_HEIGHT, furi_string_get_cstr(str_buff));
|
||||||
furi_string_reset(str_buff);
|
furi_string_reset(str_buff);
|
||||||
}
|
}
|
||||||
if(scrollbar) {
|
if(scrollbar) {
|
||||||
|
|||||||
@@ -44,16 +44,16 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
|
|||||||
"%s %db",
|
"%s %db",
|
||||||
furi_string_get_cstr(model->protocol_name),
|
furi_string_get_cstr(model->protocol_name),
|
||||||
model->generic->data_count_bit);
|
model->generic->data_count_bit);
|
||||||
canvas_draw_str(canvas, 5, 8, buffer);
|
canvas_draw_str(canvas, 0, 8, buffer);
|
||||||
|
|
||||||
if(model->generic->channel != WS_NO_CHANNEL) {
|
if(model->generic->channel != WS_NO_CHANNEL) {
|
||||||
snprintf(buffer, sizeof(buffer), "Ch: %01d", model->generic->channel);
|
snprintf(buffer, sizeof(buffer), "Ch: %01d", model->generic->channel);
|
||||||
canvas_draw_str(canvas, 105, 8, buffer);
|
canvas_draw_str(canvas, 106, 8, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(model->generic->id != WS_NO_ID) {
|
if(model->generic->id != WS_NO_ID) {
|
||||||
snprintf(buffer, sizeof(buffer), "Sn: 0x%02lX", model->generic->id);
|
snprintf(buffer, sizeof(buffer), "Sn: 0x%02lX", model->generic->id);
|
||||||
canvas_draw_str(canvas, 5, 20, buffer);
|
canvas_draw_str(canvas, 0, 20, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(model->generic->btn != WS_NO_BTN) {
|
if(model->generic->btn != WS_NO_BTN) {
|
||||||
@@ -64,45 +64,39 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
|
|||||||
if(model->generic->battery_low != WS_NO_BATT) {
|
if(model->generic->battery_low != WS_NO_BATT) {
|
||||||
snprintf(
|
snprintf(
|
||||||
buffer, sizeof(buffer), "Batt: %s", (!model->generic->battery_low ? "ok" : "low"));
|
buffer, sizeof(buffer), "Batt: %s", (!model->generic->battery_low ? "ok" : "low"));
|
||||||
canvas_draw_str(canvas, 90, 20, buffer);
|
canvas_draw_str_aligned(canvas, 126, 17, AlignRight, AlignCenter, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buffer, sizeof(buffer), "Data: 0x%llX", model->generic->data);
|
snprintf(buffer, sizeof(buffer), "Data: 0x%llX", model->generic->data);
|
||||||
canvas_draw_str(canvas, 5, 32, buffer);
|
canvas_draw_str(canvas, 0, 32, buffer);
|
||||||
|
|
||||||
//DATA AGE
|
elements_bold_rounded_frame(canvas, 0, 38, 127, 25);
|
||||||
if((int)model->generic->agedata > 0) {
|
canvas_set_font(canvas, FontPrimary);
|
||||||
|
|
||||||
|
if(model->generic->temp != WS_NO_TEMPERATURE) {
|
||||||
|
canvas_draw_icon(canvas, 6, 43, &I_Therm_7x16);
|
||||||
|
snprintf(buffer, sizeof(buffer), "%3.1f C", (double)model->generic->temp);
|
||||||
|
canvas_draw_str_aligned(canvas, 47, 47, AlignRight, AlignTop, buffer);
|
||||||
|
canvas_draw_circle(canvas, 38, 46, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(model->generic->humidity != WS_NO_HUMIDITY) {
|
||||||
|
canvas_draw_icon(canvas, 53, 44, &I_Humid_8x13);
|
||||||
|
snprintf(buffer, sizeof(buffer), "%d%%", model->generic->humidity);
|
||||||
|
canvas_draw_str(canvas, 64, 55, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((int)model->generic->timestamp > 0) {
|
||||||
FuriHalRtcDateTime curr_dt;
|
FuriHalRtcDateTime curr_dt;
|
||||||
furi_hal_rtc_get_datetime(&curr_dt);
|
furi_hal_rtc_get_datetime(&curr_dt);
|
||||||
uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
||||||
|
|
||||||
int diffold = (int)curr_ts - (int)model->generic->agedata;
|
int ts_diff = (int)curr_ts - (int)model->generic->timestamp;
|
||||||
|
|
||||||
uint8_t tmp_x_frame = 101;
|
canvas_draw_icon(canvas, 91, 46, &I_Timer_11x11);
|
||||||
uint8_t tmp_y_frame = 23;
|
|
||||||
|
|
||||||
uint8_t tmp_x_text = 113;
|
if(ts_diff > 60) {
|
||||||
uint8_t tmp_y_text = 29;
|
int tmp_sec = ts_diff;
|
||||||
if(model->generic->data_count_bit >= 41) {
|
|
||||||
tmp_x_frame = 78;
|
|
||||||
tmp_y_frame = 0;
|
|
||||||
|
|
||||||
tmp_x_text = 91;
|
|
||||||
tmp_y_text = 6;
|
|
||||||
|
|
||||||
if(model->generic->btn == WS_NO_BTN) {
|
|
||||||
if(furi_string_size(model->protocol_name) > (size_t)10) {
|
|
||||||
tmp_x_frame = 61;
|
|
||||||
tmp_y_frame = 11;
|
|
||||||
|
|
||||||
tmp_x_text = 74;
|
|
||||||
tmp_y_text = 17;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(diffold > 60) {
|
|
||||||
int tmp_sec = diffold;
|
|
||||||
int cnt_min = 1;
|
int cnt_min = 1;
|
||||||
for(int i = 1; tmp_sec > 60; i++) {
|
for(int i = 1; tmp_sec > 60; i++) {
|
||||||
tmp_sec = tmp_sec - 60;
|
tmp_sec = tmp_sec - 60;
|
||||||
@@ -110,55 +104,21 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(curr_ts % 2 == 0) {
|
if(curr_ts % 2 == 0) {
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_draw_str_aligned(canvas, 105, 51, AlignLeft, AlignCenter, "Old");
|
||||||
canvas_draw_rframe(canvas, tmp_x_frame, tmp_y_frame, 26, 11, 1);
|
|
||||||
canvas_set_color(canvas, ColorBlack);
|
|
||||||
canvas_draw_str_aligned(
|
|
||||||
canvas, tmp_x_text, tmp_y_text, AlignCenter, AlignCenter, "OLD");
|
|
||||||
} else {
|
} else {
|
||||||
if(cnt_min >= 59) {
|
if(cnt_min >= 59) {
|
||||||
canvas_set_color(canvas, ColorBlack);
|
canvas_draw_str_aligned(canvas, 105, 51, AlignLeft, AlignCenter, "Old");
|
||||||
canvas_draw_rframe(canvas, tmp_x_frame, tmp_y_frame, 26, 11, 1);
|
|
||||||
canvas_set_color(canvas, ColorBlack);
|
|
||||||
canvas_draw_str_aligned(
|
|
||||||
canvas, tmp_x_text, tmp_y_text, AlignCenter, AlignCenter, "OLD");
|
|
||||||
} else {
|
} else {
|
||||||
canvas_set_color(canvas, ColorBlack);
|
|
||||||
canvas_draw_rframe(canvas, tmp_x_frame, tmp_y_frame, 26, 11, 1);
|
|
||||||
canvas_draw_box(canvas, tmp_x_frame, tmp_y_frame, 26, 11);
|
|
||||||
canvas_set_color(canvas, ColorWhite);
|
|
||||||
snprintf(buffer, sizeof(buffer), "%dm", cnt_min);
|
snprintf(buffer, sizeof(buffer), "%dm", cnt_min);
|
||||||
canvas_draw_str_aligned(
|
canvas_draw_str_aligned(canvas, 114, 51, AlignCenter, AlignCenter, buffer);
|
||||||
canvas, tmp_x_text, tmp_y_text, AlignCenter, AlignCenter, buffer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
canvas_set_color(canvas, ColorBlack);
|
snprintf(buffer, sizeof(buffer), "%d", ts_diff);
|
||||||
canvas_draw_rframe(canvas, tmp_x_frame, tmp_y_frame, 26, 11, 1);
|
canvas_draw_str_aligned(canvas, 112, 51, AlignCenter, AlignCenter, buffer);
|
||||||
canvas_set_color(canvas, ColorBlack);
|
|
||||||
snprintf(buffer, sizeof(buffer), "%d", diffold);
|
|
||||||
canvas_draw_str_aligned(
|
|
||||||
canvas, tmp_x_text, tmp_y_text, AlignCenter, AlignCenter, buffer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//DATA AGE end
|
|
||||||
|
|
||||||
elements_bold_rounded_frame(canvas, 2, 37, 123, 25);
|
|
||||||
canvas_set_font(canvas, FontPrimary);
|
|
||||||
|
|
||||||
if(model->generic->temp != WS_NO_TEMPERATURE) {
|
|
||||||
canvas_draw_icon(canvas, 18, 42, &I_Therm_7x16);
|
|
||||||
snprintf(buffer, sizeof(buffer), "%3.1f C", (double)model->generic->temp);
|
|
||||||
canvas_draw_str_aligned(canvas, 63, 46, AlignRight, AlignTop, buffer);
|
|
||||||
canvas_draw_circle(canvas, 55, 45, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(model->generic->humidity != WS_NO_HUMIDITY) {
|
|
||||||
canvas_draw_icon(canvas, 75, 42, &I_Humid_10x15);
|
|
||||||
snprintf(buffer, sizeof(buffer), "%d%%", model->generic->humidity);
|
|
||||||
canvas_draw_str(canvas, 91, 54, buffer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ws_view_receiver_info_input(InputEvent* event, void* context) {
|
bool ws_view_receiver_info_input(InputEvent* event, void* context) {
|
||||||
|
|||||||
35
assets/resources/infrared/assets/tv.ir
Executable file → Normal file
35
assets/resources/infrared/assets/tv.ir
Executable file → Normal file
@@ -3662,38 +3662,3 @@ frequency: 38000
|
|||||||
duty_cycle: 0.330000
|
duty_cycle: 0.330000
|
||||||
data: 3505 1690 483 416 454 1258 483 416 454 416 454 417 428 442 428 442 428 441 455 416 454 416 454 416 454 417 452 419 450 1289 451 421 448 423 447 448 422 448 422 448 422 448 422 448 422 448 422 448 422 1319 422 448 422 448 422 448 422 448 423 448 422 448 423 448 422 448 422 1319 422 448 422 1319 422 448 422 1319 422 1319 422 448 422 448 423 1319 422 448 422 1319 422 448 422 1319 422 1320 421 449 421 1319 422
|
data: 3505 1690 483 416 454 1258 483 416 454 416 454 417 428 442 428 442 428 441 455 416 454 416 454 416 454 417 452 419 450 1289 451 421 448 423 447 448 422 448 422 448 422 448 422 448 422 448 422 448 422 1319 422 448 422 448 422 448 422 448 423 448 422 448 423 448 422 448 422 1319 422 448 422 1319 422 448 422 1319 422 1319 422 448 422 448 423 1319 422 448 422 1319 422 448 422 1319 422 1320 421 449 421 1319 422
|
||||||
#
|
#
|
||||||
name: POWER
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 0C 00 00 00
|
|
||||||
#
|
|
||||||
name: MUTE
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 0D 00 00 00
|
|
||||||
#
|
|
||||||
name: VOL+
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 10 00 00 00
|
|
||||||
#
|
|
||||||
name: VOL-
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 11 00 00 00
|
|
||||||
#
|
|
||||||
name: CH+
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 20 00 00 00
|
|
||||||
#
|
|
||||||
name: CH-
|
|
||||||
type: parsed
|
|
||||||
protocol: RC5
|
|
||||||
address: 01 00 00 00
|
|
||||||
command: 21 00 00 00
|
|
||||||
Reference in New Issue
Block a user