diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index 1e1925834..04cc093ff 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -25,8 +25,12 @@ typedef enum { SubmenuIndexStilmatic, SubmenuIndexDTMNeo433, SubmenuIndexGibidi433, + SubmenuIndexNiceMHouse_433_92, + SubmenuIndexJCM_433_92, + SubmenuIndexNormstahl_433_92, SubmenuIndexGSN, SubmenuIndexAprimatic, + SubmenuIndexHCS101_433_92, SubmenuIndexANMotorsAT4, SubmenuIndexAlutechAT4N, SubmenuIndexNiceFlo12bit, @@ -51,9 +55,9 @@ typedef enum { SubmenuIndexGateTX, SubmenuIndexDoorHan_315_00, SubmenuIndexDoorHan_433_92, - SubmenuIndexLiftMaster_315_00, - SubmenuIndexLiftMaster_390_00, - SubmenuIndexLiftMaster_433_00, + SubmenuIndexSecPlus_v1_315_00, + SubmenuIndexSecPlus_v1_390_00, + SubmenuIndexSecPlus_v1_433_00, SubmenuIndexSecPlus_v2_310_00, SubmenuIndexSecPlus_v2_315_00, SubmenuIndexSecPlus_v2_390_00, diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_config.c b/applications/main/subghz/scenes/subghz_scene_receiver_config.c index f16508c2c..ff6bbab9a 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_config.c @@ -282,6 +282,14 @@ static void subghz_scene_receiver_config_set_magellan(VariableItem* item) { subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Magellan); } +static void subghz_scene_receiver_config_set_princeton(VariableItem* item) { + subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Princeton); +} + +static void subghz_scene_receiver_config_set_niceflors(VariableItem* item) { + subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_NiceFlorS); +} + static void subghz_scene_receiver_config_set_weather(VariableItem* item) { subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Weather); } @@ -289,10 +297,6 @@ 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) { - subghz_scene_receiver_config_set_ignore_filter(item, SubGhzProtocolFlag_Princeton); -} - static void subghz_scene_receiver_config_var_list_enter_callback(void* context, uint32_t index) { furi_assert(context); SubGhz* subghz = context; @@ -351,7 +355,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Frequency:", + "Frequency", subghz_setting_get_frequency_count(setting), subghz_scene_receiver_config_set_frequency, subghz); @@ -371,7 +375,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Modulation:", + "Modulation", subghz_setting_get_preset_count(setting), subghz_scene_receiver_config_set_preset, subghz); @@ -386,7 +390,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { // Hopping item = variable_item_list_add( subghz->variable_item_list, - "Hopping:", + "Hopping", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_hopping_running, subghz); @@ -400,7 +404,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { SubGhzCustomEventManagerSet) { item = variable_item_list_add( subghz->variable_item_list, - "Bin RAW:", + "Bin RAW", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_bin_raw, subghz); @@ -414,7 +418,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { SubGhzCustomEventManagerSet) { item = variable_item_list_add( subghz->variable_item_list, - "Ignore Starline:", + "Ignore Starline", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_starline, subghz); @@ -426,7 +430,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Ignore Cars:", + "Ignore Cars", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_auto_alarms, subghz); @@ -438,7 +442,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Ignore Magellan:", + "Ignore Magellan", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_magellan, subghz); @@ -450,7 +454,31 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Ignore Weather:", + "Ignore Princeton", + COMBO_BOX_COUNT, + subghz_scene_receiver_config_set_princeton, + subghz); + + value_index = subghz_scene_receiver_config_ignore_filter_get_index( + subghz->ignore_filter, SubGhzProtocolFlag_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 NiceFlorS / 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, SubGhzProtocolFlag_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); @@ -462,7 +490,7 @@ void subghz_scene_receiver_config_on_enter(void* context) { item = variable_item_list_add( subghz->variable_item_list, - "Ignore TPMS:", + "Ignore TPMS", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_tpms, subghz); @@ -471,24 +499,12 @@ void subghz_scene_receiver_config_on_enter(void* context) { 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, - subghz_scene_receiver_config_set_princeton, - subghz); - - value_index = subghz_scene_receiver_config_ignore_filter_get_index( - subghz->ignore_filter, SubGhzProtocolFlag_Princeton); - variable_item_set_current_value_index(item, value_index); - variable_item_set_current_value_text(item, combobox_text[value_index]); } // 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( subghz->variable_item_list, - "Sound:", + "Sound", COMBO_BOX_COUNT, subghz_scene_receiver_config_set_speaker, subghz); diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index d31978015..28db55d75 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -67,6 +67,12 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexAlutechAT4N, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "KL: HCS101 433MHz", + SubmenuIndexHCS101_433_92, + subghz_scene_set_type_submenu_callback, + subghz); submenu_add_item( subghz->submenu, "KL: DoorHan 315MHz", @@ -163,6 +169,24 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexElmesElectronic, subghz_scene_set_type_submenu_callback, 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( subghz->submenu, "KL: Nice Smilo 433MHz", @@ -278,19 +302,19 @@ void subghz_scene_set_type_on_enter(void* context) { submenu_add_item( subghz->submenu, "Security+1.0 315MHz", - SubmenuIndexLiftMaster_315_00, + SubmenuIndexSecPlus_v1_315_00, subghz_scene_set_type_submenu_callback, subghz); submenu_add_item( subghz->submenu, "Security+1.0 390MHz", - SubmenuIndexLiftMaster_390_00, + SubmenuIndexSecPlus_v1_390_00, subghz_scene_set_type_submenu_callback, subghz); submenu_add_item( subghz->submenu, "Security+1.0 433MHz", - SubmenuIndexLiftMaster_433_00, + SubmenuIndexSecPlus_v1_433_00, subghz_scene_set_type_submenu_callback, subghz); 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); break; 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( subghz->txrx, "AM650", 868350000, SUBGHZ_PROTOCOL_CAME_NAME, key, 12); break; @@ -702,15 +726,51 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); } 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 = subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 315000000); break; - case SubmenuIndexLiftMaster_390_00: + case SubmenuIndexSecPlus_v1_390_00: generated_protocol = subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 390000000); break; - case SubmenuIndexLiftMaster_433_00: + case SubmenuIndexSecPlus_v1_433_00: generated_protocol = subghz_txrx_gen_secplus_v1_protocol(subghz->txrx, "AM650", 433920000); break; @@ -730,6 +790,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { subghz->txrx, "AM650", 390000000, key, 0x68, 0xE500000); break; case SubmenuIndexSecPlus_v2_433_00: + key = (key & 0x7FFFF3FC); // 850LM pairing generated_protocol = subghz_txrx_gen_secplus_v2_protocol( subghz->txrx, "AM650", 433920000, key, 0x68, 0xE500000); break; diff --git a/applications/main/subghz/subghz_last_settings.c b/applications/main/subghz/subghz_last_settings.c index dc4e3a5ff..dc0a08234 100644 --- a/applications/main/subghz/subghz_last_settings.c +++ b/applications/main/subghz/subghz_last_settings.c @@ -314,7 +314,7 @@ void subghz_last_settings_log(SubGhzLastSettings* instance) { TAG, "Frequency: %03ld.%02ld, FeedbackLevel: %ld, FATrigger: %.2f, External: %s, ExtPower: %s, TimestampNames: %s, ExtPowerAmp: %s,\n" "GPSBaudrate: %ld, Hopping: %s,\nPreset: %ld, RSSI: %.2f, " - "Starline: %s, Cars: %s, Magellan: %s, BinRAW: %s", + "Starline: %s, Cars: %s, Magellan: %s, NiceFloR-S: %s, BinRAW: %s", instance->frequency / 1000000 % 1000, instance->frequency / 10000 % 100, instance->frequency_analyzer_feedback_level, @@ -333,5 +333,10 @@ void subghz_last_settings_log(SubGhzLastSettings* instance) { instance->ignore_filter, SubGhzProtocolFlag_AutoAlarms), subghz_last_settings_log_filter_get_index( instance->ignore_filter, SubGhzProtocolFlag_Magellan), + subghz_last_settings_log_filter_get_index( + instance->ignore_filter, SubGhzProtocolFlag_NiceFlorS), + subghz_last_settings_log_filter_get_index( + instance->ignore_filter, SubGhzProtocolFlag_Weather), + subghz_last_settings_log_filter_get_index(instance->ignore_filter, SubGhzProtocolFlag_TPMS), subghz_last_settings_log_filter_get_index(instance->filter, SubGhzProtocolFlag_BinRAW)); } diff --git a/lib/subghz/protocols/nice_flor_s.c b/lib/subghz/protocols/nice_flor_s.c index 8c4a22858..3f56ba107 100644 --- a/lib/subghz/protocols/nice_flor_s.c +++ b/lib/subghz/protocols/nice_flor_s.c @@ -80,7 +80,7 @@ const SubGhzProtocol subghz_protocol_nice_flor_s = { .type = SubGhzProtocolTypeDynamic, .flag = SubGhzProtocolFlag_433 | SubGhzProtocolFlag_868 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | - SubGhzProtocolFlag_Send, + SubGhzProtocolFlag_Send | SubGhzProtocolFlag_NiceFlorS, .decoder = &subghz_protocol_nice_flor_s_decoder, .encoder = &subghz_protocol_nice_flor_s_encoder, diff --git a/lib/subghz/types.h b/lib/subghz/types.h index 50d5f0ced..45967cdf8 100644 --- a/lib/subghz/types.h +++ b/lib/subghz/types.h @@ -132,8 +132,9 @@ typedef enum { SubGhzProtocolFlag_AutoAlarms = (1 << 12), SubGhzProtocolFlag_Magellan = (1 << 13), SubGhzProtocolFlag_Princeton = (1 << 14), - SubGhzProtocolFlag_Weather = (1 << 15), - SubGhzProtocolFlag_TPMS = (1 << 16), + SubGhzProtocolFlag_NiceFlorS = (1 << 15), + SubGhzProtocolFlag_Weather = (1 << 16), + SubGhzProtocolFlag_TPMS = (1 << 17), } SubGhzProtocolFlag; struct SubGhzProtocol {