diff --git a/applications/subghz/scenes/subghz_scene_set_cnt.c b/applications/subghz/scenes/subghz_scene_set_cnt.c index 3bd39b341..718e055db 100644 --- a/applications/subghz/scenes/subghz_scene_set_cnt.c +++ b/applications/subghz/scenes/subghz_scene_set_cnt.c @@ -13,14 +13,14 @@ void subghz_scene_set_cnt_on_enter(void* context) { // Setup view ByteInput* byte_input = subghz->byte_input; - byte_input_set_header_text(byte_input, "Enter COUNTER in hex"); + byte_input_set_header_text(byte_input, "Enter COUNTER in hex, 20bits"); byte_input_set_result_callback( byte_input, subghz_scene_set_cnt_byte_input_callback, NULL, subghz, subghz->txrx->secure_data->cnt, - 2); + 3); view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); } diff --git a/applications/subghz/scenes/subghz_scene_set_seed.c b/applications/subghz/scenes/subghz_scene_set_seed.c index 5d8f29715..8e582f442 100644 --- a/applications/subghz/scenes/subghz_scene_set_seed.c +++ b/applications/subghz/scenes/subghz_scene_set_seed.c @@ -36,8 +36,9 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) { subghz->txrx->secure_data->fix[0] << 24 | subghz->txrx->secure_data->fix[1] << 16 | subghz->txrx->secure_data->fix[2] << 8 | subghz->txrx->secure_data->fix[3]; - uint16_t cnt = subghz->txrx->secure_data->cnt[0] << 8 | - subghz->txrx->secure_data->cnt[1]; + uint32_t cnt = subghz->txrx->secure_data->cnt[0] << 16 | + subghz->txrx->secure_data->cnt[1] << 8 | + subghz->txrx->secure_data->cnt[2]; uint32_t seed = subghz->txrx->secure_data->seed[0] << 24 | subghz->txrx->secure_data->seed[1] << 16 | @@ -52,7 +53,7 @@ bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) { subghz->txrx->fff_data, fix_part >> 4, fix_part & 0xf, - cnt, + (cnt & 0xFFFFF), seed, "FAAC_SLH", 868350000, diff --git a/applications/subghz/subghz_i.h b/applications/subghz/subghz_i.h index 595a70b3c..18173febf 100644 --- a/applications/subghz/subghz_i.h +++ b/applications/subghz/subghz_i.h @@ -43,7 +43,7 @@ typedef struct { uint8_t fix[4]; - uint8_t cnt[2]; + uint8_t cnt[3]; uint8_t seed[4]; } SecureData; diff --git a/lib/subghz/protocols/faac_slh.c b/lib/subghz/protocols/faac_slh.c index 290c7d5d5..382fb9009 100644 --- a/lib/subghz/protocols/faac_slh.c +++ b/lib/subghz/protocols/faac_slh.c @@ -123,11 +123,9 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst fixx[i] = (fix >> (shiftby -= 4)) & 0xF; } if((instance->generic.cnt % 2) == 0) { - decrypt = fixx[6] << 28 | fixx[7] << 24 | fixx[5] << 20 | fixx[1] << 16 | - instance->generic.cnt; + decrypt = fixx[6] << 28 | fixx[7] << 24 | fixx[5] << 20 | (instance->generic.cnt & 0xFFFFF); } else { - decrypt = fixx[2] << 28 | fixx[3] << 24 | fixx[4] << 20 | fixx[1] << 16 | - instance->generic.cnt; + decrypt = fixx[2] << 28 | fixx[3] << 24 | fixx[4] << 20 | (instance->generic.cnt & 0xFFFFF); } for M_EACH(manufacture_code, *subghz_keystore_get_data(instance->keystore), SubGhzKeyArray_t) { @@ -155,7 +153,7 @@ bool subghz_protocol_faac_slh_create_data( FlipperFormat* flipper_format, uint32_t serial, uint8_t btn, - uint16_t cnt, + uint32_t cnt, uint32_t seed, const char* manufacture_name, uint32_t frequency, @@ -164,7 +162,7 @@ bool subghz_protocol_faac_slh_create_data( SubGhzProtocolEncoderFaacSLH* instance = context; instance->generic.serial = serial; instance->generic.btn = btn; - instance->generic.cnt = cnt; + instance->generic.cnt = (cnt & 0xFFFFF); instance->generic.seed = seed; instance->manufacture_name = manufacture_name; instance->generic.data_count_bit = 64; @@ -414,7 +412,7 @@ static void subghz_protocol_faac_slh_check_remote_controller( break; } } - instance->cnt = decrypt & 0xFFFF; + instance->cnt = decrypt & 0xFFFFF; } uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context) { @@ -493,7 +491,7 @@ void subghz_protocol_decoder_faac_slh_get_string(void* context, string_t output) output, "%s %dbit\r\n" "Key:%lX%08lX\r\n" - "Fix:%08lX Cnt:%04X\r\n" + "Fix:%08lX Cnt:%05X\r\n" "Hop:%08lX Btn:%lX\r\n" "Sn:%07lX Sd:%8X", instance->generic.protocol_name, diff --git a/lib/subghz/protocols/faac_slh.h b/lib/subghz/protocols/faac_slh.h index 288892191..cc36e12b7 100644 --- a/lib/subghz/protocols/faac_slh.h +++ b/lib/subghz/protocols/faac_slh.h @@ -42,7 +42,7 @@ bool subghz_protocol_faac_slh_create_data( FlipperFormat* flipper_format, uint32_t serial, uint8_t btn, - uint16_t cnt, + uint32_t cnt, uint32_t seed, const char* manufacture_name, uint32_t frequency,