From 7b1d7904c157b50d732ad3efdba55b7a963b9ee8 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Sat, 1 Apr 2023 21:36:59 +0300 Subject: [PATCH] Beninca / Allmatic support --- CHANGELOG.md | 2 ++ ReadMe.md | 10 +++--- .../main/subghz/helpers/subghz_custom_event.h | 2 ++ .../subghz/scenes/subghz_scene_set_type.c | 36 +++++++++++++++++++ lib/subghz/protocols/keeloq.c | 11 ++++-- 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1d5bf92f..b246b9c21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,6 @@ ### New changes +* SubGHz: Support for Allmatic(reads as Beninca), also fix Beninca protocol +* SubGHz: Allmatic -> Add Manually * Plugins: Show External CC1101 module status in Weather Station and in POCSAG Pager plugins * Plugins: Update **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator) (Fixes BT issues) * SubGHz: Fix false detections of StarLine 72bit, flipper can decode only 64bit diff --git a/ReadMe.md b/ReadMe.md index ecf693337..dbe0e5bb6 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -69,9 +69,9 @@ Also check the changelog in releases for latest updates! ### Current modified and new Sub-GHz protocols list: Thanks to Official team (to their SubGHz Developer, Skorp) for implementing decoders for these protocols. -Encoders/sending made by Eng1n33r & @xMasterX: +Keeloq [Not ALL systems supported for decode or emulation yet!] - [Supported manufacturers list](https://0bin.net/paste/VwR2lNJY#WH9vnPgvcp7w6zVKucFCuNREKAcOij8KsJ6vqLfMn3b) -- Keeloq [Not ALL systems supported for decode or emulation yet!] - [Supported manufacturers list](https://0bin.net/paste/VwR2lNJY#WH9vnPgvcp7w6zVKucFCuNREKAcOij8KsJ6vqLfMn3b) +Encoders or sending made by @xMasterX: - Keeloq: HCS101 - Keeloq: AN-Motors - Keeloq: JCM Tech @@ -81,16 +81,18 @@ Encoders/sending made by Eng1n33r & @xMasterX: - Keeloq: FAAC RC,XT - Keeloq: Mutancode - Keeloq: Normstahl -- Keeloq: Beninca +- Keeloq: Beninca + Allmatic - Keeloq: Stilmatic / Schellenberg - Keeloq: CAME Space - Keeloq: Aprimatic (model TR and similar) + +Encoders/sending made by @Eng1n33r & @xMasterX: - CAME Atomo - Nice Flor S - FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)] - Keeloq: BFT Mitto [External seed calculation required (For info contact me in Discord: Nano#8998)] -> Update! check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md) -- Security+ v1 & v2 - Star Line +- Security+ v1 & v2 Encoders made by @assasinfil & @xMasterX: - Somfy Telis diff --git a/applications/main/subghz/helpers/subghz_custom_event.h b/applications/main/subghz/helpers/subghz_custom_event.h index eb0ed70e7..9d2be7ee5 100644 --- a/applications/main/subghz/helpers/subghz_custom_event.h +++ b/applications/main/subghz/helpers/subghz_custom_event.h @@ -13,6 +13,8 @@ typedef enum { SubmenuIndexSomfyTelis, SubmenuIndexBeninca433, SubmenuIndexBeninca868, + SubmenuIndexAllmatic433, + SubmenuIndexAllmatic868, SubmenuIndexIronLogic, SubmenuIndexElmesElectronic, SubmenuIndexSommer_FM_434, diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index f07204cad..eb9e7d620 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -171,6 +171,18 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexBeninca868, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "KL: Allmatic 433MHz", + SubmenuIndexAllmatic433, + subghz_scene_set_type_submenu_callback, + subghz); + submenu_add_item( + subghz->submenu, + "KL: Allmatic 868MHz", + SubmenuIndexAllmatic868, + subghz_scene_set_type_submenu_callback, + subghz); submenu_add_item( subghz->submenu, "KL: Sommer 434MHz", @@ -505,6 +517,30 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { generated_protocol = true; } break; + case SubmenuIndexAllmatic433: + if(subghz_scene_set_type_submenu_gen_data_keeloq( + subghz, + "AM650", + 433920000, + (key & 0x00FFFF00) | 0x01000011, + 0xC, + 0x0005, + "Beninca")) { + generated_protocol = true; + } + break; + case SubmenuIndexAllmatic868: + if(subghz_scene_set_type_submenu_gen_data_keeloq( + subghz, + "AM650", + 868350000, + (key & 0x00FFFF00) | 0x01000011, + 0xC, + 0x0005, + "Beninca")) { + generated_protocol = true; + } + break; case SubmenuIndexElmesElectronic: if(subghz_scene_set_type_submenu_gen_data_keeloq( subghz, diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c index ab021151d..d2120d879 100644 --- a/lib/subghz/protocols/keeloq.c +++ b/lib/subghz/protocols/keeloq.c @@ -243,9 +243,9 @@ static bool subghz_protocol_keeloq_gen_data( decrypt = btn << 28 | (instance->generic.serial & 0xFF) << 16 | instance->generic.cnt; } - // Beninca -> 4bit serial - simple XOR + // Beninca / Allmatic -> no serial - simple XOR if(strcmp(instance->manufacture_name, "Beninca") == 0) { - decrypt = btn << 28 | (instance->generic.serial & 0xF) << 16 | instance->generic.cnt; + decrypt = btn << 28 | (0x000) << 16 | instance->generic.cnt; } if(strcmp(instance->manufacture_name, "Unknown") == 0) { @@ -812,6 +812,13 @@ static inline bool subghz_protocol_keeloq_check_decrypt( if((decrypt >> 28 == btn) && (((((uint16_t)(decrypt >> 16)) & 0xFF) == end_serial) || ((((uint16_t)(decrypt >> 16)) & 0xFF) == 0))) { instance->cnt = decrypt & 0x0000FFFF; + FURI_LOG_I( + "DED", + "btn: %d, decrypt: %lx, end_serial: %lx, serial: %lx", + btn, + decrypt, + end_serial, + instance->serial); return true; } return false;