From 5da447a2b04244ac9522d02a5cee745097d5be71 Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Mon, 9 Sep 2024 04:11:00 +0300 Subject: [PATCH] more chance to generate working remote at gangqi --- .../helpers/subghz_txrx_create_protocol_key.c | 13 +++++++++++-- lib/subghz/protocols/gangqi.c | 6 ++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c b/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c index e3b9c1103..a79f5dbea 100644 --- a/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c +++ b/applications/main/subghz/helpers/subghz_txrx_create_protocol_key.c @@ -387,14 +387,23 @@ void subghz_txrx_gen_serial_gangqi(uint64_t* result_key) { uint64_t randkey; uint64_t only_required_bytes; uint16_t sum_of_3bytes; + uint8_t xorbytes; do { randkey = (uint64_t)rand(); - only_required_bytes = (randkey & 0xFFFFF0000); + only_required_bytes = (randkey & 0x0FFFF0000) | 0x200000000; sum_of_3bytes = ((only_required_bytes >> 32) & 0xFF) + ((only_required_bytes >> 24) & 0xFF) + ((only_required_bytes >> 16) & 0xFF); - } while(!((!(sum_of_3bytes & 0x3)) && ((0xb2 < sum_of_3bytes) && (sum_of_3bytes < 0x1ae)))); + xorbytes = ((only_required_bytes >> 32) & 0xFF) ^ ((only_required_bytes >> 24) & 0xFF) ^ + ((only_required_bytes >> 16) & 0xFF); + } while( + !((((!(sum_of_3bytes & 0x3)) && ((0xB < sum_of_3bytes) && (sum_of_3bytes < 0x141))) && + ((((only_required_bytes >> 32) & 0xFF) == 0x2) || + (((only_required_bytes >> 32) & 0xFF) == 0x3))) && + ((((xorbytes == 0xBA) || (xorbytes == 0xE2)) || + ((xorbytes == 0x3A) || (xorbytes == 0xF2))) || + (xorbytes == 0xB2)))); // Serial 01 button 01 uint64_t new_key = only_required_bytes | (0b01 << 14) | (0xD << 10) | (0b01 << 8); diff --git a/lib/subghz/protocols/gangqi.c b/lib/subghz/protocols/gangqi.c index 4873a0506..9cbb71763 100644 --- a/lib/subghz/protocols/gangqi.c +++ b/lib/subghz/protocols/gangqi.c @@ -494,8 +494,10 @@ void subghz_protocol_decoder_gangqi_get_string(void* context, FuriString* output (instance->generic.serial & 0xFF); // Returns true if serial is valid bool serial_is_valid = - ((!(sum_3bytes_serial & 0x3)) && - ((0xb2 < sum_3bytes_serial) && (sum_3bytes_serial < 0x1ae))); + (((!(sum_3bytes_serial & 0x3)) && + ((0xB < sum_3bytes_serial) && (sum_3bytes_serial < 0x141))) && + ((((instance->generic.serial >> 16) & 0xFF) == 0x2) || + (((instance->generic.serial >> 16) & 0xFF) == 0x3))); furi_string_cat_printf( output,