diff --git a/protocols/ford_v0.c b/protocols/ford_v0.c index e9d5c99..279f1b0 100644 --- a/protocols/ford_v0.c +++ b/protocols/ford_v0.c @@ -55,7 +55,6 @@ typedef struct SubGhzProtocolDecoderFordV0 { uint32_t serial; uint8_t button; uint32_t count; - uint8_t bs_magic; } SubGhzProtocolDecoderFordV0; #ifdef ENABLE_EMULATE_FEATURE typedef struct SubGhzProtocolEncoderFordV0 { @@ -69,7 +68,6 @@ typedef struct SubGhzProtocolEncoderFordV0 { uint8_t button; uint32_t count; uint8_t bs; - uint8_t bs_magic; } SubGhzProtocolEncoderFordV0; #endif typedef enum { @@ -90,8 +88,7 @@ static void decode_ford_v0( uint16_t key2, uint32_t* serial, uint8_t* button, - uint32_t* count, - uint8_t* bs_magic); + uint32_t* count); #ifdef ENABLE_EMULATE_FEATURE static void encode_ford_v0( uint8_t header_byte, @@ -150,10 +147,11 @@ const SubGhzProtocol ford_protocol_v0 = { // BS = (counter_low_byte + 0x6F + (button << 4)) & 0xFF // ============================================================================= #ifdef ENABLE_EMULATE_FEATURE -static uint8_t ford_v0_calculate_bs(uint32_t count, uint8_t button, uint8_t bs_magic) { - //Do the BS calculation, move right the overflow bit if neccesary - uint16_t result = ((uint16_t)count & 0xFF) + bs_magic + (button << 4); - return (uint8_t)(result - ((result & 0xFF00) ? 0x80 : 0)); +static uint8_t ford_v0_calculate_bs(uint32_t serial, uint32_t count, uint8_t button) { + return (uint8_t)((((count >> 24) & 0xFF) + ((count >> 16) & 0xFF) + ((count >> 8) & 0xFF) + + (count & 0xFF) + ((serial >> 24) & 0xFF) + ((serial >> 16) & 0xFF) + + ((serial >> 8) & 0xFF) + (serial & 0xFF) + (button << 4)) & + 0xFF); } #endif // ============================================================================= @@ -223,8 +221,7 @@ static void decode_ford_v0( uint16_t key2, uint32_t* serial, uint8_t* button, - uint32_t* count, - uint8_t* bs_magic) { + uint32_t* count) { uint8_t buf[13] = {0}; for(int i = 0; i < 8; ++i) { @@ -235,7 +232,6 @@ static void decode_ford_v0( buf[9] = (uint8_t)(key2 & 0xFF); uint8_t tmp = buf[8]; - uint8_t bs = tmp; uint8_t parity = 0; uint8_t parity_any = (tmp != 0); while(tmp) { @@ -277,9 +273,6 @@ static void decode_ford_v0( *button = (buf[5] >> 4) & 0x0F; *count = ((buf[5] & 0x0F) << 16) | (buf[6] << 8) | buf[7]; - - //Build the BS Magic number for this fob. - *bs_magic = bs + ((bs & 0x80) ? 0x80 : 0) - (*button << 4) - (uint8_t)(*count & 0xFF); } // ============================================================================= @@ -385,7 +378,6 @@ void* subghz_protocol_encoder_ford_v0_alloc(SubGhzEnvironment* environment) { instance->button = 0; instance->count = 0; instance->bs = 0; - instance->bs_magic = 0; FURI_LOG_I(TAG, "Encoder allocated"); return instance; @@ -595,22 +587,14 @@ SubGhzProtocolStatus instance->generic.cnt = instance->count; FURI_LOG_I(TAG, "Counter: 0x%05lX", (unsigned long)instance->count); - flipper_format_rewind(flipper_format); - uint32_t bs_magic_temp = 0; - if(!flipper_format_read_uint32(flipper_format, "BSMagic", &bs_magic_temp, 1)) - instance->bs_magic = 0x6F; //For Backward compatibility - else - instance->bs_magic = (uint8_t)bs_magic_temp; - // Calculate BS from counter and button, as well as the BS Magic Number we pulled on decode. - instance->bs = ford_v0_calculate_bs(instance->count, instance->button, instance->bs_magic); + instance->bs = ford_v0_calculate_bs(instance->serial, instance->count, instance->button); FURI_LOG_I( TAG, - "Calculated BS: 0x%02X (from Cnt=0x%05lX, Btn=0x%02X, BSMagic=0x%02X))", + "Calculated BS: 0x%02X (from Cnt=0x%05lX, Btn=0x%02X)", instance->bs, (unsigned long)instance->count, - instance->button, - instance->bs_magic); + instance->button); encode_ford_v0( header_byte, @@ -723,12 +707,7 @@ static bool ford_v0_process_data(SubGhzProtocolDecoderFordV0* instance) { uint16_t key2 = ~key2_raw; decode_ford_v0( - instance->key1, - key2, - &instance->serial, - &instance->button, - &instance->count, - &instance->bs_magic); + instance->key1, key2, &instance->serial, &instance->button, &instance->count); instance->key2 = key2; return true; @@ -767,7 +746,6 @@ void subghz_protocol_decoder_ford_v0_reset(void* context) { instance->serial = 0; instance->button = 0; instance->count = 0; - instance->bs_magic = 0; } void subghz_protocol_decoder_ford_v0_feed(void* context, bool level, uint32_t duration) { @@ -903,9 +881,6 @@ SubGhzProtocolStatus subghz_protocol_decoder_ford_v0_serialize( flipper_format_write_uint32(flipper_format, "Btn", &temp, 1); flipper_format_write_uint32(flipper_format, "Cnt", &instance->count, 1); - - temp = (uint32_t)instance->bs_magic; - flipper_format_write_uint32(flipper_format, "BSMagic", &temp, 1); } return ret; @@ -940,12 +915,6 @@ SubGhzProtocolStatus flipper_format_read_uint32(flipper_format, "Cnt", &instance->count, 1); instance->generic.cnt = instance->count; - - uint32_t bs_magic_temp = 0; - if(flipper_format_read_uint32(flipper_format, "BSMagic", &bs_magic_temp, 1)) - instance->bs_magic = bs_magic_temp; - else - instance->bs_magic = 0x6F; //For backward psf file compatibiility. } return ret; @@ -977,7 +946,6 @@ void subghz_protocol_decoder_ford_v0_get_string(void* context, FuriString* outpu "Cnt: %05lX" " BS: %02X" " CRC: %02X\r\n" - "BS Magic: %02X" " Btn: %02X - %s\r\n", instance->generic.protocol_name, instance->generic.data_count_bit, @@ -990,7 +958,6 @@ void subghz_protocol_decoder_ford_v0_get_string(void* context, FuriString* outpu (unsigned long)instance->count, (instance->key2 >> 8) & 0xFF, instance->key2 & 0xFF, - instance->bs_magic, instance->button, button_name); } diff --git a/scenes/protopirate_scene_saved_info.c b/scenes/protopirate_scene_saved_info.c index b9ee5bc..142d652 100644 --- a/scenes/protopirate_scene_saved_info.c +++ b/scenes/protopirate_scene_saved_info.c @@ -146,11 +146,6 @@ void protopirate_scene_saved_info_on_enter(void* context) { furi_string_cat_printf(info_str, "BS: %02X\n", (uint8_t)temp_data); } - flipper_format_rewind(ff); - if(flipper_format_read_uint32(ff, "BSMagic", &temp_data, 1)) { - furi_string_cat_printf(info_str, "BS Magic: %02X\n", (uint8_t)temp_data); - } - flipper_format_rewind(ff); if(flipper_format_read_uint32(ff, "CRC", &temp_data, 1)) { furi_string_cat_printf(info_str, "CRC: %02X\n", (uint8_t)temp_data);