Beninca / Allmatic support

This commit is contained in:
MX 2023-04-01 21:36:59 +03:00
parent f0d94e2757
commit 7b1d7904c1
No known key found for this signature in database
GPG key ID: 7CCC66B7DBDD1C83
5 changed files with 55 additions and 6 deletions

View file

@ -1,4 +1,6 @@
### New changes ### 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: 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) * 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 * SubGHz: Fix false detections of StarLine 72bit, flipper can decode only 64bit

View file

@ -69,9 +69,9 @@ Also check the changelog in releases for latest updates!
### Current modified and new Sub-GHz protocols list: ### Current modified and new Sub-GHz protocols list:
Thanks to Official team (to their SubGHz Developer, Skorp) for implementing decoders for these protocols. 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: HCS101
- Keeloq: AN-Motors - Keeloq: AN-Motors
- Keeloq: JCM Tech - Keeloq: JCM Tech
@ -81,16 +81,18 @@ Encoders/sending made by Eng1n33r & @xMasterX:
- Keeloq: FAAC RC,XT - Keeloq: FAAC RC,XT
- Keeloq: Mutancode - Keeloq: Mutancode
- Keeloq: Normstahl - Keeloq: Normstahl
- Keeloq: Beninca - Keeloq: Beninca + Allmatic
- Keeloq: Stilmatic / Schellenberg - Keeloq: Stilmatic / Schellenberg
- Keeloq: CAME Space - Keeloq: CAME Space
- Keeloq: Aprimatic (model TR and similar) - Keeloq: Aprimatic (model TR and similar)
Encoders/sending made by @Eng1n33r & @xMasterX:
- CAME Atomo - CAME Atomo
- Nice Flor S - Nice Flor S
- FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)] - 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) - 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 - Star Line
- Security+ v1 & v2
Encoders made by @assasinfil & @xMasterX: Encoders made by @assasinfil & @xMasterX:
- Somfy Telis - Somfy Telis

View file

@ -13,6 +13,8 @@ typedef enum {
SubmenuIndexSomfyTelis, SubmenuIndexSomfyTelis,
SubmenuIndexBeninca433, SubmenuIndexBeninca433,
SubmenuIndexBeninca868, SubmenuIndexBeninca868,
SubmenuIndexAllmatic433,
SubmenuIndexAllmatic868,
SubmenuIndexIronLogic, SubmenuIndexIronLogic,
SubmenuIndexElmesElectronic, SubmenuIndexElmesElectronic,
SubmenuIndexSommer_FM_434, SubmenuIndexSommer_FM_434,

View file

@ -171,6 +171,18 @@ void subghz_scene_set_type_on_enter(void* context) {
SubmenuIndexBeninca868, SubmenuIndexBeninca868,
subghz_scene_set_type_submenu_callback, subghz_scene_set_type_submenu_callback,
subghz); 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( submenu_add_item(
subghz->submenu, subghz->submenu,
"KL: Sommer 434MHz", "KL: Sommer 434MHz",
@ -505,6 +517,30 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
generated_protocol = true; generated_protocol = true;
} }
break; 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: case SubmenuIndexElmesElectronic:
if(subghz_scene_set_type_submenu_gen_data_keeloq( if(subghz_scene_set_type_submenu_gen_data_keeloq(
subghz, subghz,

View file

@ -243,9 +243,9 @@ static bool subghz_protocol_keeloq_gen_data(
decrypt = btn << 28 | (instance->generic.serial & 0xFF) << 16 | instance->generic.cnt; 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) { 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) { 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) || if((decrypt >> 28 == btn) && (((((uint16_t)(decrypt >> 16)) & 0xFF) == end_serial) ||
((((uint16_t)(decrypt >> 16)) & 0xFF) == 0))) { ((((uint16_t)(decrypt >> 16)) & 0xFF) == 0))) {
instance->cnt = decrypt & 0x0000FFFF; 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 true;
} }
return false; return false;