1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-13 13:09:49 +04:00

Update came_atomo.c

better encoder ?
This commit is contained in:
r3df0xx
2022-06-17 17:20:50 +03:00
parent 24cf48e8e9
commit b09801e677

View File

@@ -155,16 +155,33 @@ static void subghz_protocol_encoder_came_atomo_get_upload(SubGhzProtocolEncoderC
pack[0] += (i+1); pack[0] += (i+1);
} }
FURI_LOG_I(TAG, "TX encoder prepared: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]);
atomo_encrypt(pack); atomo_encrypt(pack);
uint32_t hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3]; uint32_t hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3];
uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7]; uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7];
instance->generic.data = (uint64_t)hi << 32 | lo; instance->generic.data = (uint64_t)hi << 32 | lo;
FURI_LOG_I(TAG, "TX encrypted data: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]);
instance->generic.data ^= 0xFFFFFFFFFFFFFFFF; instance->generic.data ^= 0xFFFFFFFFFFFFFFFF;
instance->generic.data >>= 4; instance->generic.data >>= 4;
instance->generic.data = (uint64_t)0x1 << 60 | instance->generic.data; instance->generic.data &= 0xFFFFFFFFFFFFFFF;
for(uint8_t i = instance->generic.data_count_bit; i > 0; i--) { hi = instance->generic.data >> 32;
lo = instance->generic.data & 0xFFFFFFFF;
FURI_LOG_I(TAG, "TX 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));
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_came_atomo_const.te_long);
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_atomo_const.te_short);
for(uint8_t i = (instance->generic.data_count_bit - 2); 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(instance->generic.data, i - 1), &result)) {
instance->encoder.upload[index++] = subghz_protocol_encoder_came_atomo_add_duration_to_upload(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(instance->generic.data, i - 1), &result);
@@ -186,14 +203,26 @@ static void subghz_protocol_encoder_came_atomo_get_upload(SubGhzProtocolEncoderC
pack[4] = ((instance->generic.data_2 >> 24) & 0xFF); pack[5] = ((instance->generic.data_2 >> 16) & 0xFF); pack[4] = ((instance->generic.data_2 >> 24) & 0xFF); pack[5] = ((instance->generic.data_2 >> 16) & 0xFF);
pack[6] = ((instance->generic.data_2 >> 8) & 0xFF); pack[7] = (instance->generic.data_2 & 0xFF); pack[6] = ((instance->generic.data_2 >> 8) & 0xFF); pack[7] = (instance->generic.data_2 & 0xFF);
FURI_LOG_I(TAG, "TX NEW encoder prepared: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]);
atomo_encrypt(pack); atomo_encrypt(pack);
uint32_t hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3]; uint32_t hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3];
uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7]; uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7];
instance->generic.data = (uint64_t)hi << 32 | lo; instance->generic.data = (uint64_t)hi << 32 | lo;
FURI_LOG_I(TAG, "TX NEW encrypted data: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]);
instance->generic.data ^= 0xFFFFFFFFFFFFFFFF; instance->generic.data ^= 0xFFFFFFFFFFFFFFFF;
instance->generic.data >>= 4; instance->generic.data >>= 4;
instance->generic.data = (uint64_t)0x1 << 60 | instance->generic.data; instance->generic.data &= 0xFFFFFFFFFFFFFFF;
hi = instance->generic.data >> 32;
lo = instance->generic.data & 0xFFFFFFFF;
FURI_LOG_I(TAG, "TX 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));
} }
bool subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) { bool subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
@@ -436,8 +465,20 @@ static void subghz_protocol_came_atomo_remote_controller(
* 0x0 - Last zero nibble * 0x0 - Last zero nibble
* */ * */
uint32_t hi = instance->data >> 32;
uint32_t lo = instance->data & 0xFFFFFFFF;
FURI_LOG_I(TAG, "RX received data: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
(hi >> 24), ((hi >> 16) & 0xFF), ((hi >> 8) & 0xFF), (hi & 0xFF),
(lo >> 24), ((lo >> 16) & 0xFF), ((lo >> 8) & 0xFF), (lo & 0xFF));
instance->data ^= 0xFFFFFFFFFFFFFFFF; instance->data ^= 0xFFFFFFFFFFFFFFFF;
instance->data <<= 4; instance->data <<= 4;
hi = instance->data >> 32;
lo = instance->data & 0xFFFFFFFF;
FURI_LOG_I(TAG, "RX inverted data: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
(hi >> 24), ((hi >> 16) & 0xFF), ((hi >> 8) & 0xFF), (hi & 0xFF),
(lo >> 24), ((lo >> 16) & 0xFF), ((lo >> 8) & 0xFF), (lo & 0xFF));
uint8_t pack[8] = {}; uint8_t pack[8] = {};
pack[0] = (instance->data >> 56); pack[1] = ((instance->data >> 48) & 0xFF); pack[0] = (instance->data >> 56); pack[1] = ((instance->data >> 48) & 0xFF);
@@ -447,6 +488,9 @@ static void subghz_protocol_came_atomo_remote_controller(
atomo_decrypt(pack); atomo_decrypt(pack);
FURI_LOG_I(TAG, "RX decrypted data: %02X %02X %02X %02X %02X %02X %02X %02X\n\n",
pack[0], pack[1], pack[2], pack[3], pack[4], pack[5], pack[6], pack[7]);
instance->cnt_2 = pack[0]; instance->cnt_2 = pack[0];
instance->cnt = (uint16_t)pack[1] << 8 | pack[2]; instance->cnt = (uint16_t)pack[1] << 8 | pack[2];
instance->serial = (uint32_t)(pack[3]) << 24 | pack[4] << 16 | pack[5] << 8 | pack[6]; instance->serial = (uint32_t)(pack[3]) << 24 | pack[4] << 16 | pack[5] << 8 | pack[6];
@@ -457,8 +501,8 @@ static void subghz_protocol_came_atomo_remote_controller(
if(btn_decode == 0x4) {instance->btn = 0x3;} if(btn_decode == 0x4) {instance->btn = 0x3;}
if(btn_decode == 0x6) {instance->btn = 0x4;} if(btn_decode == 0x6) {instance->btn = 0x4;}
uint32_t hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3]; hi = pack[0] << 24 | pack[1] << 16 | pack[2] << 8 | pack[3];
uint32_t lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7]; lo = pack[4] << 24 | pack[5] << 16 | pack[6] << 8 | pack[7];
instance->data_2 = (uint64_t)hi << 32 | lo; instance->data_2 = (uint64_t)hi << 32 | lo;
} }