From 5e9232e4bcd5f94429bddabfcfcd011e0dfacc56 Mon Sep 17 00:00:00 2001 From: d4rks1d33 Date: Tue, 22 Sep 2026 14:02:25 +0000 Subject: [PATCH] update psa and fiat for less FP, add FM flag to some renault models --- lib/subghz/protocols/fiat_v1.c | 2 +- lib/subghz/protocols/protocol_items.c | 2 +- lib/subghz/protocols/psa.c | 10 ++++++++++ lib/subghz/protocols/renault_v1.c | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/subghz/protocols/fiat_v1.c b/lib/subghz/protocols/fiat_v1.c index 01b305f8..3d18d716 100644 --- a/lib/subghz/protocols/fiat_v1.c +++ b/lib/subghz/protocols/fiat_v1.c @@ -136,7 +136,7 @@ const SubGhzProtocolEncoder subghz_protocol_fiat_v1_encoder = { const SubGhzProtocol fiat_v1_protocol = { .name = FIAT_V1_PROTOCOL_NAME, .type = SubGhzProtocolTypeDynamic, - .flag = SubGhzProtocolFlag_315 | SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | + .flag = SubGhzProtocolFlag_315 | SubGhzProtocolFlag_433 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Send, .decoder = &subghz_protocol_fiat_v1_decoder, diff --git a/lib/subghz/protocols/protocol_items.c b/lib/subghz/protocols/protocol_items.c index c4abf0c0..4b0652e8 100644 --- a/lib/subghz/protocols/protocol_items.c +++ b/lib/subghz/protocols/protocol_items.c @@ -156,7 +156,7 @@ const SubGhzProtocol* const subghz_protocol_registry_items[] = { &ford_protocol_v2, &ford_protocol_v3, //&subghz_protocol_land_rover_v0, - &subghz_protocol_toyota, + //&subghz_protocol_toyota, &honda_static_protocol, &honda_v1_protocol, &honda_v2_protocol, diff --git a/lib/subghz/protocols/psa.c b/lib/subghz/protocols/psa.c index 2a8a993b..93d435c9 100644 --- a/lib/subghz/protocols/psa.c +++ b/lib/subghz/protocols/psa.c @@ -761,6 +761,16 @@ static bool psa_am_varied(uint32_t hi, uint32_t lo) { static bool psa_am_complete(SubGhzProtocolDecoderPSA* instance) { if(instance->am_bits_len < 80) return false; + // A genuine PSA frame terminates at a DETERMINISTIC buffer length: + // 80 -> FM/state-2 path (64 key1 + 16 validation, then end marker) + // 88 -> AM/state-4 path (PSA_KEY2_BITS + 8 realignment slack) + // A Fiat/Marelli frame (Peugeot Boxer, Fiat Ducato, Citroen Jumper -- same + // Hitag2 PCF7946 hardware) is 102 bits of continuous Manchester, so PSA + // force-terminates it at random lengths (83/85/87/96...). Accept only the + // two PSA-native lengths so the Fiat V1 decoder claims the Marelli frames + // instead. (Fixes PSA/FiatV1 cross-detection.) + if(instance->am_bits_len != 80 && instance->am_bits_len != 88) return false; + uint8_t max_off = instance->am_bits_len - 80; if(max_off > 8) max_off = 8; diff --git a/lib/subghz/protocols/renault_v1.c b/lib/subghz/protocols/renault_v1.c index 5c6fde3b..77b1cf17 100644 --- a/lib/subghz/protocols/renault_v1.c +++ b/lib/subghz/protocols/renault_v1.c @@ -269,7 +269,7 @@ const SubGhzProtocol renault_v1_protocol = { .name = RENAULT_PROTOCOL_V1_NAME, .type = SubGhzProtocolTypeDynamic, .flag = SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_315 | SubGhzProtocolFlag_433 | - SubGhzProtocolFlag_868 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_Save | + SubGhzProtocolFlag_868 | SubGhzProtocolFlag_AM | SubGhzProtocolFlag_FM | SubGhzProtocolFlag_Save | SubGhzProtocolFlag_Load | SubGhzProtocolFlag_Send, .encoder = &subghz_protocol_renault_v1_encoder,