diff --git a/lib/subghz/protocols/came_atomo.c b/lib/subghz/protocols/came_atomo.c index de6f20d75..fde88de89 100644 --- a/lib/subghz/protocols/came_atomo.c +++ b/lib/subghz/protocols/came_atomo.c @@ -143,6 +143,12 @@ static void subghz_protocol_encoder_came_atomo_get_upload(SubGhzProtocolEncoderC uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7]; instance->generic.data = (uint64_t)hi << 32 | lo; FURI_LOG_I(TAG, "encrypted data: %02X %02X %02X %02X %02X %02X %02X %02X\n", pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]); + + uint64_t invert = instance->generic.data ^ 0xFFFFFFFFFFFFFFFF; + hi = invert >> 32; + lo = invert & 0xFFFFFFFF; + FURI_LOG_I(TAG, "inverted to upload: %02X %02X %02X %02X %02X %02X %02X %02X\n", (hi >> 24), ((hi >> 16) & 0xFF), ((hi >> 8) & 0xFF), (hi & 0xFF), + (lo >> 24), ((lo >> 16) & 0xFF), ((lo >> 8) & 0xFF), (lo & 0xFF)); //Send start bits Atomo instance->encoder.upload[index++] = level_duration_make(true, (uint32_t)subghz_protocol_came_atomo_const.te_long); @@ -150,10 +156,10 @@ static void subghz_protocol_encoder_came_atomo_get_upload(SubGhzProtocolEncoderC level_duration_make(false, (uint32_t)subghz_protocol_came_atomo_const.te_short); for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) { - if(!manchester_encoder_advance(&enc_state, !bit_read(instance->generic.data, i - 1), &result)) { + if(!manchester_encoder_advance(&enc_state, !bit_read(invert, i - 1), &result)) { instance->encoder.upload[index++] = subghz_protocol_encoder_came_atomo_add_duration_to_upload(result); - manchester_encoder_advance(&enc_state, !bit_read(instance->generic.data, i - 1), &result); + manchester_encoder_advance(&enc_state, !bit_read(invert, i - 1), &result); } instance->encoder.upload[index++] = subghz_protocol_encoder_came_atomo_add_duration_to_upload(result); @@ -165,7 +171,7 @@ static void subghz_protocol_encoder_came_atomo_get_upload(SubGhzProtocolEncoderC } //pause instance->encoder.upload[index++] = - level_duration_make(false, (uint32_t)subghz_protocol_came_atomo_const.te_long * 60); + level_duration_make(false, (uint32_t)subghz_protocol_came_atomo_const.te_long * 57); instance->encoder.size_upload = index; }