Merge branch 'dev' of https://github.com/Flipper-XFW/Xtreme-Firmware into new-app-system

This commit is contained in:
Willy-JL
2023-10-22 04:47:06 +01:00
33 changed files with 274 additions and 122 deletions

View File

@@ -25,8 +25,12 @@ typedef enum {
SubmenuIndexStilmatic, SubmenuIndexStilmatic,
SubmenuIndexDTMNeo433, SubmenuIndexDTMNeo433,
SubmenuIndexGibidi433, SubmenuIndexGibidi433,
SubmenuIndexNiceMHouse_433_92,
SubmenuIndexJCM_433_92,
SubmenuIndexNormstahl_433_92,
SubmenuIndexGSN, SubmenuIndexGSN,
SubmenuIndexAprimatic, SubmenuIndexAprimatic,
SubmenuIndexHCS101_433_92,
SubmenuIndexANMotorsAT4, SubmenuIndexANMotorsAT4,
SubmenuIndexAlutechAT4N, SubmenuIndexAlutechAT4N,
SubmenuIndexNiceFlo12bit, SubmenuIndexNiceFlo12bit,
@@ -51,9 +55,9 @@ typedef enum {
SubmenuIndexGateTX, SubmenuIndexGateTX,
SubmenuIndexDoorHan_315_00, SubmenuIndexDoorHan_315_00,
SubmenuIndexDoorHan_433_92, SubmenuIndexDoorHan_433_92,
SubmenuIndexLiftMaster_315_00, SubmenuIndexSecPlus_v1_315_00,
SubmenuIndexLiftMaster_390_00, SubmenuIndexSecPlus_v1_390_00,
SubmenuIndexLiftMaster_433_00, SubmenuIndexSecPlus_v1_433_00,
SubmenuIndexSecPlus_v2_310_00, SubmenuIndexSecPlus_v2_310_00,
SubmenuIndexSecPlus_v2_315_00, SubmenuIndexSecPlus_v2_315_00,
SubmenuIndexSecPlus_v2_390_00, SubmenuIndexSecPlus_v2_390_00,

View File

@@ -5,19 +5,21 @@
enum SubGhzSettingIndex { enum SubGhzSettingIndex {
SubGhzSettingIndexFrequency, SubGhzSettingIndexFrequency,
SubGhzSettingIndexHopping,
SubGhzSettingIndexModulation, SubGhzSettingIndexModulation,
SubGhzSettingIndexHopping,
SubGhzSettingIndexRAWSound = SubGhzSettingIndexHopping,
SubGhzSettingIndexBinRAW, SubGhzSettingIndexBinRAW,
SubGhzSettingIndexRAWRSSIThreshold = SubGhzSettingIndexBinRAW,
SubGhzSettingIndexIgnoreStarline, SubGhzSettingIndexIgnoreStarline,
SubGhzSettingIndexIgnoreCars, SubGhzSettingIndexIgnoreCars,
SubGhzSettingIndexIgnoreMagellan, SubGhzSettingIndexIgnoreMagellan,
SubGhzSettingIndexIgnorePrinceton,
SubGhzSettingIndexIgnoreNiceFlorS,
SubGhzSettingIndexIgnoreWeather, SubGhzSettingIndexIgnoreWeather,
SubGhzSettingIndexIgnoreTPMS, SubGhzSettingIndexIgnoreTPMS,
SubGhzSettingIndexIgnorePrinceton,
SubGhzSettingIndexSound, SubGhzSettingIndexSound,
SubGhzSettingIndexResetToDefault, SubGhzSettingIndexResetToDefault,
SubGhzSettingIndexLock, SubGhzSettingIndexLock,
SubGhzSettingIndexRAWThresholdRSSI,
}; };
#define RAW_THRESHOLD_RSSI_COUNT 11 #define RAW_THRESHOLD_RSSI_COUNT 11
@@ -71,8 +73,9 @@ const char* const combobox_text[COMBO_BOX_COUNT] = {
"ON", "ON",
}; };
static void static void subghz_scene_receiver_config_set_ignore_filter(
subghz_scene_receiver_config_set_ignore_filter(VariableItem* item, SubGhzProtocolFlag filter) { VariableItem* item,
SubGhzProtocolFilter filter) {
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);
@@ -265,32 +268,36 @@ static void subghz_scene_receiver_config_set_raw_threshold_rssi(VariableItem* it
} }
static inline bool subghz_scene_receiver_config_ignore_filter_get_index( static inline bool subghz_scene_receiver_config_ignore_filter_get_index(
SubGhzProtocolFlag filter, SubGhzProtocolFilter filter,
SubGhzProtocolFlag flag) { SubGhzProtocolFilter flag) {
return READ_BIT(filter, flag) > 0; return READ_BIT(filter, flag) > 0;
} }
static void subghz_scene_receiver_config_set_starline(VariableItem* item) { static void subghz_scene_receiver_config_set_starline(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_StarLine); subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_StarLine);
} }
static void subghz_scene_receiver_config_set_auto_alarms(VariableItem* item) { static void subghz_scene_receiver_config_set_auto_alarms(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_AutoAlarms); subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_AutoAlarms);
} }
static void subghz_scene_receiver_config_set_magellan(VariableItem* item) { static void subghz_scene_receiver_config_set_magellan(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Magellan); subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_Magellan);
}
static void subghz_scene_receiver_config_set_weather(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Weather);
}
static void subghz_scene_receiver_config_set_tpms(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_TPMS);
} }
static void subghz_scene_receiver_config_set_princeton(VariableItem* item) { static void subghz_scene_receiver_config_set_princeton(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Princeton); subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_Princeton);
}
static void subghz_scene_receiver_config_set_niceflors(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_NiceFlorS);
}
static void subghz_scene_receiver_config_set_weather(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_Weather);
}
static void subghz_scene_receiver_config_set_tpms(VariableItem* item) {
subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFilter_TPMS);
} }
static void subghz_scene_receiver_config_var_list_enter_callback(void* context, uint32_t index) { static void subghz_scene_receiver_config_var_list_enter_callback(void* context, uint32_t index) {
@@ -351,7 +358,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Frequency:", "Frequency",
subghz_setting_get_frequency_count(setting), subghz_setting_get_frequency_count(setting),
subghz_scene_receiver_config_set_frequency, subghz_scene_receiver_config_set_frequency,
subghz); subghz);
@@ -371,7 +378,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Modulation:", "Modulation",
subghz_setting_get_preset_count(setting), subghz_setting_get_preset_count(setting),
subghz_scene_receiver_config_set_preset, subghz_scene_receiver_config_set_preset,
subghz); subghz);
@@ -386,7 +393,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
// Hopping // Hopping
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Hopping:", "Hopping",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_hopping_running, subghz_scene_receiver_config_set_hopping_running,
subghz); subghz);
@@ -400,7 +407,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
SubGhzCustomEventManagerSet) { SubGhzCustomEventManagerSet) {
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Bin RAW:", "Bin RAW",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_bin_raw, subghz_scene_receiver_config_set_bin_raw,
subghz); subghz);
@@ -414,73 +421,85 @@ void subghz_scene_receiver_config_on_enter(void* context) {
SubGhzCustomEventManagerSet) { SubGhzCustomEventManagerSet) {
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Ignore Starline:", "Ignore Starline",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_starline, subghz_scene_receiver_config_set_starline,
subghz); subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index( value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_StarLine); subghz->ignore_filter, SubGhzProtocolFilter_StarLine);
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]); variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Ignore Cars:", "Ignore Cars",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_auto_alarms, subghz_scene_receiver_config_set_auto_alarms,
subghz); subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index( value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_AutoAlarms); subghz->ignore_filter, SubGhzProtocolFilter_AutoAlarms);
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]); variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Ignore Magellan:", "Ignore Magellan",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_magellan, subghz_scene_receiver_config_set_magellan,
subghz); subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index( value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_Magellan); subghz->ignore_filter, SubGhzProtocolFilter_Magellan);
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]); variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Ignore Weather:", "Ignore Princeton",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_weather,
subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_Weather);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore TPMS:",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_tpms,
subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_TPMS);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore Princeton:",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_princeton, subghz_scene_receiver_config_set_princeton,
subghz); subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index( value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFlag_Princeton); subghz->ignore_filter, SubGhzProtocolFilter_Princeton);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore Nice Flor-S / Nice One",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_niceflors,
subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFilter_NiceFlorS);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore Weather",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_weather,
subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFilter_Weather);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]);
item = variable_item_list_add(
subghz->variable_item_list,
"Ignore TPMS",
COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_tpms,
subghz);
value_index = subghz_scene_receiver_config_ignore_filter_get_index(
subghz->ignore_filter, SubGhzProtocolFilter_TPMS);
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, combobox_text[value_index]); variable_item_set_current_value_text(item, combobox_text[value_index]);
} }
@@ -488,7 +507,7 @@ void subghz_scene_receiver_config_on_enter(void* context) {
// Enable speaker, will send all incoming noises and signals to speaker so you can listen how your remote sounds like :) // Enable speaker, will send all incoming noises and signals to speaker so you can listen how your remote sounds like :)
item = variable_item_list_add( item = variable_item_list_add(
subghz->variable_item_list, subghz->variable_item_list,
"Sound:", "Sound",
COMBO_BOX_COUNT, COMBO_BOX_COUNT,
subghz_scene_receiver_config_set_speaker, subghz_scene_receiver_config_set_speaker,
subghz); subghz);

View File

@@ -67,6 +67,12 @@ void subghz_scene_set_type_on_enter(void* context) {
SubmenuIndexAlutechAT4N, SubmenuIndexAlutechAT4N,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); subghz);
submenu_add_item(
subghz->submenu,
"KL: HCS101 433MHz",
SubmenuIndexHCS101_433_92,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item( submenu_add_item(
subghz->submenu, subghz->submenu,
"KL: DoorHan 315MHz", "KL: DoorHan 315MHz",
@@ -163,6 +169,24 @@ void subghz_scene_set_type_on_enter(void* context) {
SubmenuIndexElmesElectronic, SubmenuIndexElmesElectronic,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); subghz);
submenu_add_item(
subghz->submenu,
"KL: Normstahl 433MHz",
SubmenuIndexNormstahl_433_92,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"KL: JCM Tech 433MHz",
SubmenuIndexJCM_433_92,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"KL: Nice Mhouse 433MHz",
SubmenuIndexNiceMHouse_433_92,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item( submenu_add_item(
subghz->submenu, subghz->submenu,
"KL: Nice Smilo 433MHz", "KL: Nice Smilo 433MHz",
@@ -278,19 +302,19 @@ void subghz_scene_set_type_on_enter(void* context) {
submenu_add_item( submenu_add_item(
subghz->submenu, subghz->submenu,
"Security+1.0 315MHz", "Security+1.0 315MHz",
SubmenuIndexLiftMaster_315_00, SubmenuIndexSecPlus_v1_315_00,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); subghz);
submenu_add_item( submenu_add_item(
subghz->submenu, subghz->submenu,
"Security+1.0 390MHz", "Security+1.0 390MHz",
SubmenuIndexLiftMaster_390_00, SubmenuIndexSecPlus_v1_390_00,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); subghz);
submenu_add_item( submenu_add_item(
subghz->submenu, subghz->submenu,
"Security+1.0 433MHz", "Security+1.0 433MHz",
SubmenuIndexLiftMaster_433_00, SubmenuIndexSecPlus_v1_433_00,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); subghz);
submenu_add_item( submenu_add_item(
@@ -371,7 +395,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
subghz->txrx, "AM650", 433920000, SUBGHZ_PROTOCOL_CAME_NAME, key, 24); subghz->txrx, "AM650", 433920000, SUBGHZ_PROTOCOL_CAME_NAME, key, 24);
break; break;
case SubmenuIndexCAME12bit868: case SubmenuIndexCAME12bit868:
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4 key = (key & 0x00000FF0) | 0x1; //btn 0x1, 0x2, 0x4
generated_protocol = subghz_txrx_gen_data_protocol( generated_protocol = subghz_txrx_gen_data_protocol(
subghz->txrx, "AM650", 868350000, SUBGHZ_PROTOCOL_CAME_NAME, key, 12); subghz->txrx, "AM650", 868350000, SUBGHZ_PROTOCOL_CAME_NAME, key, 12);
break; break;
@@ -702,15 +726,51 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
} }
break; break;
case SubmenuIndexLiftMaster_315_00: case SubmenuIndexNiceMHouse_433_92:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "NICE_MHOUSE");
if(!generated_protocol) {
furi_string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexJCM_433_92:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "JCM_Tech");
if(!generated_protocol) {
furi_string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexNormstahl_433_92:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "Normstahl");
if(!generated_protocol) {
furi_string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexHCS101_433_92:
generated_protocol = subghz_txrx_gen_keeloq_protocol(
subghz->txrx, "AM650", 433920000, key & 0x000FFFFF, 0x2, 0x0003, "HCS101");
if(!generated_protocol) {
furi_string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexSecPlus_v1_315_00:
generated_protocol = generated_protocol =
subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 315000000); subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 315000000);
break; break;
case SubmenuIndexLiftMaster_390_00: case SubmenuIndexSecPlus_v1_390_00:
generated_protocol = generated_protocol =
subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 390000000); subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 390000000);
break; break;
case SubmenuIndexLiftMaster_433_00: case SubmenuIndexSecPlus_v1_433_00:
generated_protocol = generated_protocol =
subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 433920000); subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 433920000);
break; break;
@@ -730,6 +790,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
subghz->txrx, "AM650", 390000000, key, 0x68, 0xE500000); subghz->txrx, "AM650", 390000000, key, 0x68, 0xE500000);
break; break;
case SubmenuIndexSecPlus_v2_433_00: case SubmenuIndexSecPlus_v2_433_00:
key = (key & 0x7FFFF3FC); // 850LM pairing
generated_protocol = subghz_txrx_gen_secplus_v2_protocol( generated_protocol = subghz_txrx_gen_secplus_v2_protocol(
subghz->txrx, "AM650", 433920000, key, 0x68, 0xE500000); subghz->txrx, "AM650", 433920000, key, 0x68, 0xE500000);
break; break;

View File

@@ -83,7 +83,7 @@ struct SubGhz {
SubGhzLastSettings* last_settings; SubGhzLastSettings* last_settings;
SubGhzProtocolFlag filter; SubGhzProtocolFlag filter;
SubGhzProtocolFlag ignore_filter; SubGhzProtocolFilter ignore_filter;
FuriString* error_str; FuriString* error_str;
SubGhzLock lock; SubGhzLock lock;

View File

@@ -314,7 +314,7 @@ void subghz_last_settings_log(SubGhzLastSettings* instance) {
TAG, TAG,
"Frequency: %03ld.%02ld, FeedbackLevel: %ld, FATrigger: %.2f, External: %s, ExtPower: %s, TimestampNames: %s, ExtPowerAmp: %s,\n" "Frequency: %03ld.%02ld, FeedbackLevel: %ld, FATrigger: %.2f, External: %s, ExtPower: %s, TimestampNames: %s, ExtPowerAmp: %s,\n"
"GPSBaudrate: %ld, Hopping: %s,\nPreset: %ld, RSSI: %.2f, " "GPSBaudrate: %ld, Hopping: %s,\nPreset: %ld, RSSI: %.2f, "
"Starline: %s, Cars: %s, Magellan: %s, BinRAW: %s", "BinRAW: %s, Starline: %s, Cars: %s, Magellan: %s, NiceFloR-S: %s, Weather: %s, TPMS: %s",
instance->frequency / 1000000 % 1000, instance->frequency / 1000000 % 1000,
instance->frequency / 10000 % 100, instance->frequency / 10000 % 100,
instance->frequency_analyzer_feedback_level, instance->frequency_analyzer_feedback_level,
@@ -327,11 +327,17 @@ void subghz_last_settings_log(SubGhzLastSettings* instance) {
bool_to_char(instance->enable_hopping), bool_to_char(instance->enable_hopping),
instance->preset_index, instance->preset_index,
(double)instance->rssi, (double)instance->rssi,
subghz_last_settings_log_filter_get_index(instance->filter, SubGhzProtocolFlag_BinRAW),
subghz_last_settings_log_filter_get_index( subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFlag_StarLine), instance->ignore_filter, SubGhzProtocolFilter_StarLine),
subghz_last_settings_log_filter_get_index( subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFlag_AutoAlarms), instance->ignore_filter, SubGhzProtocolFilter_AutoAlarms),
subghz_last_settings_log_filter_get_index( subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFlag_Magellan), instance->ignore_filter, SubGhzProtocolFilter_Magellan),
subghz_last_settings_log_filter_get_index(instance->filter, SubGhzProtocolFlag_BinRAW)); subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFilter_NiceFlorS),
subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFilter_Weather),
subghz_last_settings_log_filter_get_index(
instance->ignore_filter, SubGhzProtocolFilter_TPMS));
} }

View File

@@ -136,10 +136,12 @@ FURI_NORETURN void __furi_crash() {
if(__furi_check_message == NULL) { if(__furi_check_message == NULL) {
__furi_check_message = "Fatal Error"; __furi_check_message = "Fatal Error";
#ifndef __FURI_TRACE
} else if(__furi_check_message == (void*)__FURI_ASSERT_MESSAGE_FLAG) { } else if(__furi_check_message == (void*)__FURI_ASSERT_MESSAGE_FLAG) {
__furi_check_message = "furi_assert failed"; __furi_check_message = "furi_assert failed";
} else if(__furi_check_message == (void*)__FURI_CHECK_MESSAGE_FLAG) { } else if(__furi_check_message == (void*)__FURI_CHECK_MESSAGE_FLAG) {
__furi_check_message = "furi_check failed"; __furi_check_message = "furi_check failed";
#endif
} }
furi_hal_console_puts("\r\n\033[0;31m[CRASH]"); furi_hal_console_puts("\r\n\033[0;31m[CRASH]");

View File

@@ -23,9 +23,16 @@ extern "C" {
#define FURI_NORETURN noreturn #define FURI_NORETURN noreturn
#endif #endif
#define __FURI_TRACE
// Flags instead of pointers will save ~4 bytes on furi_assert and furi_check calls. // Flags instead of pointers will save ~4 bytes on furi_assert and furi_check calls.
#ifndef __FURI_TRACE
#define __FURI_ASSERT_MESSAGE_FLAG (0x01) #define __FURI_ASSERT_MESSAGE_FLAG (0x01)
#define __FURI_CHECK_MESSAGE_FLAG (0x02) #define __FURI_CHECK_MESSAGE_FLAG (0x02)
#else
#define __FURI_ASSERT_MESSAGE_FLAG __FILE__
#define __FURI_CHECK_MESSAGE_FLAG __FILE__
#endif
/** Crash system */ /** Crash system */
FURI_NORETURN void __furi_crash(); FURI_NORETURN void __furi_crash();

View File

@@ -86,11 +86,13 @@ const SubGhzProtocol ws_protocol_acurite_592txr = {
.name = WS_PROTOCOL_ACURITE_592TXR_NAME, .name = WS_PROTOCOL_ACURITE_592TXR_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send,
.decoder = &ws_protocol_acurite_592txr_decoder, .decoder = &ws_protocol_acurite_592txr_decoder,
.encoder = &ws_protocol_acurite_592txr_encoder, .encoder = &ws_protocol_acurite_592txr_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_acurite_592txr_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_acurite_592txr_alloc(SubGhzEnvironment* environment) {

View File

@@ -69,11 +69,13 @@ const SubGhzProtocol ws_protocol_acurite_606tx = {
.name = WS_PROTOCOL_ACURITE_606TX_NAME, .name = WS_PROTOCOL_ACURITE_606TX_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_acurite_606tx_decoder, .decoder = &ws_protocol_acurite_606tx_decoder,
.encoder = &ws_protocol_acurite_606tx_encoder, .encoder = &ws_protocol_acurite_606tx_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_acurite_606tx_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_acurite_606tx_alloc(SubGhzEnvironment* environment) {

View File

@@ -70,11 +70,13 @@ const SubGhzProtocol ws_protocol_acurite_609txc = {
.name = WS_PROTOCOL_ACURITE_609TXC_NAME, .name = WS_PROTOCOL_ACURITE_609TXC_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_acurite_609txc_decoder, .decoder = &ws_protocol_acurite_609txc_decoder,
.encoder = &ws_protocol_acurite_609txc_encoder, .encoder = &ws_protocol_acurite_609txc_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_acurite_609txc_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_acurite_609txc_alloc(SubGhzEnvironment* environment) {

View File

@@ -84,11 +84,13 @@ const SubGhzProtocol ws_protocol_ambient_weather = {
.name = WS_PROTOCOL_AMBIENT_WEATHER_NAME, .name = WS_PROTOCOL_AMBIENT_WEATHER_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_ambient_weather_decoder, .decoder = &ws_protocol_ambient_weather_decoder,
.encoder = &ws_protocol_ambient_weather_encoder, .encoder = &ws_protocol_ambient_weather_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_ambient_weather_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_ambient_weather_alloc(SubGhzEnvironment* environment) {

View File

@@ -81,11 +81,13 @@ const SubGhzProtocol ws_protocol_auriol_ahfl = {
.name = WS_PROTOCOL_AURIOL_AHFL_NAME, .name = WS_PROTOCOL_AURIOL_AHFL_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_auriol_ahfl_decoder, .decoder = &ws_protocol_auriol_ahfl_decoder,
.encoder = &ws_protocol_auriol_ahfl_encoder, .encoder = &ws_protocol_auriol_ahfl_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_auriol_ahfl_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_auriol_ahfl_alloc(SubGhzEnvironment* environment) {

View File

@@ -80,11 +80,13 @@ const SubGhzProtocol ws_protocol_auriol_th = {
.name = WS_PROTOCOL_AURIOL_TH_NAME, .name = WS_PROTOCOL_AURIOL_TH_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_auriol_th_decoder, .decoder = &ws_protocol_auriol_th_decoder,
.encoder = &ws_protocol_auriol_th_encoder, .encoder = &ws_protocol_auriol_th_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_auriol_th_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_auriol_th_alloc(SubGhzEnvironment* environment) {

View File

@@ -83,11 +83,13 @@ const SubGhzProtocol ws_protocol_gt_wt_02 = {
.name = WS_PROTOCOL_GT_WT_02_NAME, .name = WS_PROTOCOL_GT_WT_02_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_gt_wt_02_decoder, .decoder = &ws_protocol_gt_wt_02_decoder,
.encoder = &ws_protocol_gt_wt_02_encoder, .encoder = &ws_protocol_gt_wt_02_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_gt_wt_02_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_gt_wt_02_alloc(SubGhzEnvironment* environment) {

View File

@@ -109,11 +109,13 @@ const SubGhzProtocol ws_protocol_gt_wt_03 = {
.name = WS_PROTOCOL_GT_WT_03_NAME, .name = WS_PROTOCOL_GT_WT_03_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_gt_wt_03_decoder, .decoder = &ws_protocol_gt_wt_03_decoder,
.encoder = &ws_protocol_gt_wt_03_encoder, .encoder = &ws_protocol_gt_wt_03_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_gt_wt_03_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_gt_wt_03_alloc(SubGhzEnvironment* environment) {

View File

@@ -94,11 +94,13 @@ const SubGhzProtocol ws_protocol_infactory = {
.name = WS_PROTOCOL_INFACTORY_NAME, .name = WS_PROTOCOL_INFACTORY_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_infactory_decoder, .decoder = &ws_protocol_infactory_decoder,
.encoder = &ws_protocol_infactory_encoder, .encoder = &ws_protocol_infactory_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_infactory_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_infactory_alloc(SubGhzEnvironment* environment) {

View File

@@ -63,11 +63,12 @@ const SubGhzProtocolEncoder subghz_protocol_kia_encoder = {
const SubGhzProtocol subghz_protocol_kia = { const SubGhzProtocol subghz_protocol_kia = {
.name = SUBGHZ_PROTOCOL_KIA_NAME, .name = SUBGHZ_PROTOCOL_KIA_NAME,
.type = SubGhzProtocolTypeDynamic, .type = SubGhzProtocolTypeDynamic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Decodable,
SubGhzProtocolFlag_AutoAlarms,
.decoder = &subghz_protocol_kia_decoder, .decoder = &subghz_protocol_kia_decoder,
.encoder = &subghz_protocol_kia_encoder, .encoder = &subghz_protocol_kia_encoder,
.filter = SubGhzProtocolFilter_AutoAlarms,
}; };
void* subghz_protocol_decoder_kia_alloc(SubGhzEnvironment* environment) { void* subghz_protocol_decoder_kia_alloc(SubGhzEnvironment* environment) {

View File

@@ -98,10 +98,12 @@ const SubGhzProtocol ws_protocol_lacrosse_tx = {
.name = WS_PROTOCOL_LACROSSE_TX_NAME, .name = WS_PROTOCOL_LACROSSE_TX_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather, SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable,
.decoder = &ws_protocol_lacrosse_tx_decoder, .decoder = &ws_protocol_lacrosse_tx_decoder,
.encoder = &ws_protocol_lacrosse_tx_encoder, .encoder = &ws_protocol_lacrosse_tx_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_lacrosse_tx_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_lacrosse_tx_alloc(SubGhzEnvironment* environment) {

View File

@@ -76,11 +76,13 @@ const SubGhzProtocol ws_protocol_lacrosse_tx141thbv2 = {
.name = WS_PROTOCOL_LACROSSE_TX141THBV2_NAME, .name = WS_PROTOCOL_LACROSSE_TX141THBV2_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_lacrosse_tx141thbv2_decoder, .decoder = &ws_protocol_lacrosse_tx141thbv2_decoder,
.encoder = &ws_protocol_lacrosse_tx141thbv2_encoder, .encoder = &ws_protocol_lacrosse_tx141thbv2_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_lacrosse_tx141thbv2_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_lacrosse_tx141thbv2_alloc(SubGhzEnvironment* environment) {

View File

@@ -64,11 +64,12 @@ const SubGhzProtocol subghz_protocol_magellan = {
.name = SUBGHZ_PROTOCOL_MAGELLAN_NAME, .name = SUBGHZ_PROTOCOL_MAGELLAN_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send,
SubGhzProtocolFlag_Magellan,
.decoder = &subghz_protocol_magellan_decoder, .decoder = &subghz_protocol_magellan_decoder,
.encoder = &subghz_protocol_magellan_encoder, .encoder = &subghz_protocol_magellan_encoder,
.filter = SubGhzProtocolFilter_Magellan,
}; };
void* subghz_protocol_encoder_magellan_alloc(SubGhzEnvironment* environment) { void* subghz_protocol_encoder_magellan_alloc(SubGhzEnvironment* environment) {

View File

@@ -356,9 +356,11 @@ const SubGhzProtocol ws_protocol_nexus_th = {
.name = WS_PROTOCOL_NEXUS_TH_NAME, .name = WS_PROTOCOL_NEXUS_TH_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send,
.decoder = &ws_protocol_nexus_th_decoder, .decoder = &ws_protocol_nexus_th_decoder,
.encoder = &ws_protocol_nexus_th_encoder, .encoder = &ws_protocol_nexus_th_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };

View File

@@ -84,6 +84,8 @@ const SubGhzProtocol subghz_protocol_nice_flor_s = {
.decoder = &subghz_protocol_nice_flor_s_decoder, .decoder = &subghz_protocol_nice_flor_s_decoder,
.encoder = &subghz_protocol_nice_flor_s_encoder, .encoder = &subghz_protocol_nice_flor_s_encoder,
.filter = SubGhzProtocolFilter_NiceFlorS,
}; };
static void subghz_protocol_nice_flor_s_remote_controller( static void subghz_protocol_nice_flor_s_remote_controller(

View File

@@ -424,7 +424,9 @@ const SubGhzProtocol ws_protocol_oregon2 = {
.name = WS_PROTOCOL_OREGON2_NAME, .name = WS_PROTOCOL_OREGON2_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable |
SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_oregon2_decoder, .decoder = &ws_protocol_oregon2_decoder,
.filter = SubGhzProtocolFilter_Weather,
}; };

View File

@@ -360,7 +360,9 @@ const SubGhzProtocol ws_protocol_oregon3 = {
.name = WS_PROTOCOL_OREGON3_NAME, .name = WS_PROTOCOL_OREGON3_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable |
SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_oregon3_decoder, .decoder = &ws_protocol_oregon3_decoder,
.filter = SubGhzProtocolFilter_Weather,
}; };

View File

@@ -95,11 +95,13 @@ const SubGhzProtocol ws_protocol_oregon_v1 = {
.name = WS_PROTOCOL_OREGON_V1_NAME, .name = WS_PROTOCOL_OREGON_V1_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_oregon_v1_decoder, .decoder = &ws_protocol_oregon_v1_decoder,
.encoder = &ws_protocol_oregon_v1_encoder, .encoder = &ws_protocol_oregon_v1_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_oregon_v1_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_oregon_v1_alloc(SubGhzEnvironment* environment) {

View File

@@ -73,10 +73,12 @@ const SubGhzProtocol subghz_protocol_princeton = {
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_868 | SubGhzProtocolFlag_315 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_868 | SubGhzProtocolFlag_315 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send | SubGhzProtocolFlag_Princeton, SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send,
.decoder = &subghz_protocol_princeton_decoder, .decoder = &subghz_protocol_princeton_decoder,
.encoder = &subghz_protocol_princeton_encoder, .encoder = &subghz_protocol_princeton_encoder,
.filter = SubGhzProtocolFilter_Princeton,
}; };
void* subghz_protocol_encoder_princeton_alloc(SubGhzEnvironment* environment) { void* subghz_protocol_encoder_princeton_alloc(SubGhzEnvironment* environment) {

View File

@@ -70,10 +70,12 @@ const SubGhzProtocol subghz_protocol_scher_khan = {
.name = SUBGHZ_PROTOCOL_SCHER_KHAN_NAME, .name = SUBGHZ_PROTOCOL_SCHER_KHAN_NAME,
.type = SubGhzProtocolTypeDynamic, .type = SubGhzProtocolTypeDynamic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Decodable |
SubGhzProtocolFlag_Save | SubGhzProtocolFlag_AutoAlarms, SubGhzProtocolFlag_Save,
.decoder = &subghz_protocol_scher_khan_decoder, .decoder = &subghz_protocol_scher_khan_decoder,
.encoder = &subghz_protocol_scher_khan_encoder, .encoder = &subghz_protocol_scher_khan_encoder,
.filter = SubGhzProtocolFilter_AutoAlarms,
}; };
void* subghz_protocol_decoder_scher_khan_alloc(SubGhzEnvironment* environment) { void* subghz_protocol_decoder_scher_khan_alloc(SubGhzEnvironment* environment) {

View File

@@ -101,11 +101,12 @@ const SubGhzProtocol tpms_protocol_schrader_gg4 = {
.name = TPMS_PROTOCOL_SCHRADER_GG4_NAME, .name = TPMS_PROTOCOL_SCHRADER_GG4_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_AM | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_AM |
SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_TPMS | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save,
SubGhzProtocolFlag_Save,
.decoder = &tpms_protocol_schrader_gg4_decoder, .decoder = &tpms_protocol_schrader_gg4_decoder,
.encoder = &tpms_protocol_schrader_gg4_encoder, .encoder = &tpms_protocol_schrader_gg4_encoder,
.filter = SubGhzProtocolFilter_TPMS,
}; };
void* tpms_protocol_decoder_schrader_gg4_alloc(SubGhzEnvironment* environment) { void* tpms_protocol_decoder_schrader_gg4_alloc(SubGhzEnvironment* environment) {

View File

@@ -79,11 +79,12 @@ const SubGhzProtocol subghz_protocol_star_line = {
.name = SUBGHZ_PROTOCOL_STAR_LINE_NAME, .name = SUBGHZ_PROTOCOL_STAR_LINE_NAME,
.type = SubGhzProtocolTypeDynamic, .type = SubGhzProtocolTypeDynamic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send,
SubGhzProtocolFlag_StarLine,
.decoder = &subghz_protocol_star_line_decoder, .decoder = &subghz_protocol_star_line_decoder,
.encoder = &subghz_protocol_star_line_encoder, .encoder = &subghz_protocol_star_line_encoder,
.filter = SubGhzProtocolFilter_StarLine,
}; };
/** /**

View File

@@ -79,11 +79,13 @@ const SubGhzProtocol ws_protocol_thermopro_tx4 = {
.name = WS_PROTOCOL_THERMOPRO_TX4_NAME, .name = WS_PROTOCOL_THERMOPRO_TX4_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_thermopro_tx4_decoder, .decoder = &ws_protocol_thermopro_tx4_decoder,
.encoder = &ws_protocol_thermopro_tx4_encoder, .encoder = &ws_protocol_thermopro_tx4_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_thermopro_tx4_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_thermopro_tx4_alloc(SubGhzEnvironment* environment) {

View File

@@ -90,11 +90,13 @@ const SubGhzProtocol ws_protocol_tx_8300 = {
.name = WS_PROTOCOL_TX_8300_NAME, .name = WS_PROTOCOL_TX_8300_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_tx_8300_decoder, .decoder = &ws_protocol_tx_8300_decoder,
.encoder = &ws_protocol_tx_8300_encoder, .encoder = &ws_protocol_tx_8300_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_tx_8300_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_tx_8300_alloc(SubGhzEnvironment* environment) {

View File

@@ -84,11 +84,13 @@ const SubGhzProtocol ws_protocol_wendox_w6726 = {
.name = WS_PROTOCOL_WENDOX_W6726_NAME, .name = WS_PROTOCOL_WENDOX_W6726_NAME,
.type = SubGhzProtocolTypeStatic, .type = SubGhzProtocolTypeStatic,
.flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 | .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_868 |
SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Weather | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load |
SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save, SubGhzProtocolFlag_Save,
.decoder = &ws_protocol_wendox_w6726_decoder, .decoder = &ws_protocol_wendox_w6726_decoder,
.encoder = &ws_protocol_wendox_w6726_encoder, .encoder = &ws_protocol_wendox_w6726_encoder,
.filter = SubGhzProtocolFilter_Weather,
}; };
void* ws_protocol_decoder_wendox_w6726_alloc(SubGhzEnvironment* environment) { void* ws_protocol_decoder_wendox_w6726_alloc(SubGhzEnvironment* environment) {

View File

@@ -112,6 +112,7 @@ typedef enum {
SubGhzProtocolTypeStatic, SubGhzProtocolTypeStatic,
SubGhzProtocolTypeDynamic, SubGhzProtocolTypeDynamic,
SubGhzProtocolTypeRAW, SubGhzProtocolTypeRAW,
SubGhzProtocolWeatherStation, // Unused, kept for compatibility
SubGhzProtocolCustom, SubGhzProtocolCustom,
SubGhzProtocolTypeBinRAW, SubGhzProtocolTypeBinRAW,
} SubGhzProtocolType; } SubGhzProtocolType;
@@ -128,14 +129,18 @@ typedef enum {
SubGhzProtocolFlag_Load = (1 << 8), SubGhzProtocolFlag_Load = (1 << 8),
SubGhzProtocolFlag_Send = (1 << 9), SubGhzProtocolFlag_Send = (1 << 9),
SubGhzProtocolFlag_BinRAW = (1 << 10), SubGhzProtocolFlag_BinRAW = (1 << 10),
SubGhzProtocolFlag_StarLine = (1 << 11),
SubGhzProtocolFlag_AutoAlarms = (1 << 12),
SubGhzProtocolFlag_Magellan = (1 << 13),
SubGhzProtocolFlag_Princeton = (1 << 14),
SubGhzProtocolFlag_Weather = (1 << 15),
SubGhzProtocolFlag_TPMS = (1 << 16),
} SubGhzProtocolFlag; } SubGhzProtocolFlag;
typedef enum {
SubGhzProtocolFilter_StarLine = (1 << 0),
SubGhzProtocolFilter_AutoAlarms = (1 << 1),
SubGhzProtocolFilter_Magellan = (1 << 2),
SubGhzProtocolFilter_Princeton = (1 << 3),
SubGhzProtocolFilter_NiceFlorS = (1 << 4),
SubGhzProtocolFilter_Weather = (1 << 5),
SubGhzProtocolFilter_TPMS = (1 << 6),
} SubGhzProtocolFilter;
struct SubGhzProtocol { struct SubGhzProtocol {
const char* name; const char* name;
SubGhzProtocolType type; SubGhzProtocolType type;
@@ -143,4 +148,6 @@ struct SubGhzProtocol {
const SubGhzProtocolEncoder* encoder; const SubGhzProtocolEncoder* encoder;
const SubGhzProtocolDecoder* decoder; const SubGhzProtocolDecoder* decoder;
SubGhzProtocolFilter filter;
}; };