[FL-2934] WS: add protocol Acurite 592TXR (#1916)

* WS: add protocol Acurite 592TXR
* WS: fix decoder Acurite_592TXR
* SubGhz: proper types in math

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
Skorpionm
2022-10-26 18:56:54 +04:00
committed by GitHub
parent 406d830fb6
commit 378bf05068
8 changed files with 455 additions and 2 deletions

View File

@@ -216,4 +216,34 @@ uint16_t subghz_protocol_blocks_lfsr_digest16(
}
}
return sum;
}
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t num_bytes) {
int result = 0;
for(size_t i = 0; i < num_bytes; ++i) {
result += message[i];
}
return (uint8_t)result;
}
int subghz_protocol_blocks_parity8(uint8_t byte) {
byte ^= byte >> 4;
byte &= 0xf;
return (0x6996 >> byte) & 1;
}
int subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t num_bytes) {
int result = 0;
for(size_t i = 0; i < num_bytes; ++i) {
result ^= subghz_protocol_blocks_parity8(message[i]);
}
return result;
}
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t num_bytes) {
uint8_t result = 0;
for(size_t i = 0; i < num_bytes; ++i) {
result ^= message[i];
}
return result;
}

View File

@@ -161,6 +161,37 @@ uint16_t subghz_protocol_blocks_lfsr_digest16(
uint16_t gen,
uint16_t key);
/**
* Compute Addition of a number of bytes.
* @param message bytes of message data
* @param num_bytes number of bytes to sum
* @return summation value
**/
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t num_bytes);
/**
* Compute bit parity of a single byte (8 bits).
* @param byte single byte to check
* @return 1 odd parity, 0 even parity
**/
int subghz_protocol_blocks_parity8(uint8_t byte);
/**
* Compute bit parity of a number of bytes.
* @param message bytes of message data
* @param num_bytes number of bytes to sum
* @return 1 odd parity, 0 even parity
**/
int subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t num_bytes);
/**
* Compute XOR (byte-wide parity) of a number of bytes.
* @param message bytes of message data
* @param num_bytes number of bytes to sum
* @return summation value, per bit-position 1 odd parity, 0 even parity
**/
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t num_bytes);
#ifdef __cplusplus
}
#endif