mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 10:48:35 -07:00
FAAC SLH/Spa 20-bits counter
This commit is contained in:
@@ -13,14 +13,14 @@ void subghz_scene_set_cnt_on_enter(void* context) {
|
|||||||
|
|
||||||
// Setup view
|
// Setup view
|
||||||
ByteInput* byte_input = subghz->byte_input;
|
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_set_result_callback(
|
||||||
byte_input,
|
byte_input,
|
||||||
subghz_scene_set_cnt_byte_input_callback,
|
subghz_scene_set_cnt_byte_input_callback,
|
||||||
NULL,
|
NULL,
|
||||||
subghz,
|
subghz,
|
||||||
subghz->txrx->secure_data->cnt,
|
subghz->txrx->secure_data->cnt,
|
||||||
2);
|
3);
|
||||||
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
|
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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[0] << 24 | subghz->txrx->secure_data->fix[1] << 16 |
|
||||||
subghz->txrx->secure_data->fix[2] << 8 | subghz->txrx->secure_data->fix[3];
|
subghz->txrx->secure_data->fix[2] << 8 | subghz->txrx->secure_data->fix[3];
|
||||||
|
|
||||||
uint16_t cnt = subghz->txrx->secure_data->cnt[0] << 8 |
|
uint32_t cnt = subghz->txrx->secure_data->cnt[0] << 16 |
|
||||||
subghz->txrx->secure_data->cnt[1];
|
subghz->txrx->secure_data->cnt[1] << 8 |
|
||||||
|
subghz->txrx->secure_data->cnt[2];
|
||||||
|
|
||||||
uint32_t seed = subghz->txrx->secure_data->seed[0] << 24 |
|
uint32_t seed = subghz->txrx->secure_data->seed[0] << 24 |
|
||||||
subghz->txrx->secure_data->seed[1] << 16 |
|
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,
|
subghz->txrx->fff_data,
|
||||||
fix_part >> 4,
|
fix_part >> 4,
|
||||||
fix_part & 0xf,
|
fix_part & 0xf,
|
||||||
cnt,
|
(cnt & 0xFFFFF),
|
||||||
seed,
|
seed,
|
||||||
"FAAC_SLH",
|
"FAAC_SLH",
|
||||||
868350000,
|
868350000,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t fix[4];
|
uint8_t fix[4];
|
||||||
uint8_t cnt[2];
|
uint8_t cnt[3];
|
||||||
uint8_t seed[4];
|
uint8_t seed[4];
|
||||||
} SecureData;
|
} SecureData;
|
||||||
|
|
||||||
|
|||||||
@@ -123,11 +123,9 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
|
|||||||
fixx[i] = (fix >> (shiftby -= 4)) & 0xF;
|
fixx[i] = (fix >> (shiftby -= 4)) & 0xF;
|
||||||
}
|
}
|
||||||
if((instance->generic.cnt % 2) == 0) {
|
if((instance->generic.cnt % 2) == 0) {
|
||||||
decrypt = fixx[6] << 28 | fixx[7] << 24 | fixx[5] << 20 | fixx[1] << 16 |
|
decrypt = fixx[6] << 28 | fixx[7] << 24 | fixx[5] << 20 | (instance->generic.cnt & 0xFFFFF);
|
||||||
instance->generic.cnt;
|
|
||||||
} else {
|
} else {
|
||||||
decrypt = fixx[2] << 28 | fixx[3] << 24 | fixx[4] << 20 | fixx[1] << 16 |
|
decrypt = fixx[2] << 28 | fixx[3] << 24 | fixx[4] << 20 | (instance->generic.cnt & 0xFFFFF);
|
||||||
instance->generic.cnt;
|
|
||||||
}
|
}
|
||||||
for
|
for
|
||||||
M_EACH(manufacture_code, *subghz_keystore_get_data(instance->keystore), SubGhzKeyArray_t) {
|
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,
|
FlipperFormat* flipper_format,
|
||||||
uint32_t serial,
|
uint32_t serial,
|
||||||
uint8_t btn,
|
uint8_t btn,
|
||||||
uint16_t cnt,
|
uint32_t cnt,
|
||||||
uint32_t seed,
|
uint32_t seed,
|
||||||
const char* manufacture_name,
|
const char* manufacture_name,
|
||||||
uint32_t frequency,
|
uint32_t frequency,
|
||||||
@@ -164,7 +162,7 @@ bool subghz_protocol_faac_slh_create_data(
|
|||||||
SubGhzProtocolEncoderFaacSLH* instance = context;
|
SubGhzProtocolEncoderFaacSLH* instance = context;
|
||||||
instance->generic.serial = serial;
|
instance->generic.serial = serial;
|
||||||
instance->generic.btn = btn;
|
instance->generic.btn = btn;
|
||||||
instance->generic.cnt = cnt;
|
instance->generic.cnt = (cnt & 0xFFFFF);
|
||||||
instance->generic.seed = seed;
|
instance->generic.seed = seed;
|
||||||
instance->manufacture_name = manufacture_name;
|
instance->manufacture_name = manufacture_name;
|
||||||
instance->generic.data_count_bit = 64;
|
instance->generic.data_count_bit = 64;
|
||||||
@@ -414,7 +412,7 @@ static void subghz_protocol_faac_slh_check_remote_controller(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
instance->cnt = decrypt & 0xFFFF;
|
instance->cnt = decrypt & 0xFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context) {
|
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,
|
output,
|
||||||
"%s %dbit\r\n"
|
"%s %dbit\r\n"
|
||||||
"Key:%lX%08lX\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"
|
"Hop:%08lX Btn:%lX\r\n"
|
||||||
"Sn:%07lX Sd:%8X",
|
"Sn:%07lX Sd:%8X",
|
||||||
instance->generic.protocol_name,
|
instance->generic.protocol_name,
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ bool subghz_protocol_faac_slh_create_data(
|
|||||||
FlipperFormat* flipper_format,
|
FlipperFormat* flipper_format,
|
||||||
uint32_t serial,
|
uint32_t serial,
|
||||||
uint8_t btn,
|
uint8_t btn,
|
||||||
uint16_t cnt,
|
uint32_t cnt,
|
||||||
uint32_t seed,
|
uint32_t seed,
|
||||||
const char* manufacture_name,
|
const char* manufacture_name,
|
||||||
uint32_t frequency,
|
uint32_t frequency,
|
||||||
|
|||||||
Reference in New Issue
Block a user