| 260 | static inline uint8_t mul_8(uint32_t v, uint32_t q) { v = v * q + 128; return (uint8_t)((v + (v >> 8)) >> 8); } |
| 261 | |
| 262 | uint16_t crc16(const void* r, size_t size, uint16_t crc) |
| 263 | { |
| 264 | crc = ~crc; |
| 265 | |
| 266 | const uint8_t* p = static_cast<const uint8_t*>(r); |
| 267 | for (; size; --size) |
| 268 | { |
| 269 | const uint16_t q = *p++ ^ (crc >> 8); |
| 270 | uint16_t k = (q >> 4) ^ q; |
| 271 | crc = (((crc << 8) ^ k) ^ (k << 5)) ^ (k << 12); |
| 272 | } |
| 273 | |
| 274 | return static_cast<uint16_t>(~crc); |
| 275 | } |
| 276 | |
| 277 | enum etc_constants |
| 278 | { |
no outgoing calls
no test coverage detected