[MOD] Added common reflect method

This commit is contained in:
jgromes 2023-05-12 20:55:51 +02:00
parent 3b8218c397
commit 03d2a9bf26
5 changed files with 17 additions and 26 deletions

View file

@ -372,19 +372,12 @@ void Module::waitForMicroseconds(uint32_t start, uint32_t len) {
#endif #endif
} }
uint8_t Module::flipBits(uint8_t b) { uint32_t Module::reflect(uint32_t in, uint8_t bits) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; uint32_t res = 0;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2; for(uint8_t i = 0; i < bits; i++) {
b = (b & 0xAA) >> 1 | (b & 0x55) << 1; res |= (((in & ((uint32_t)1 << i)) >> i) << (bits - i - 1));
return b; }
} return(res);
uint16_t Module::flipBits16(uint16_t i) {
i = (i & 0xFF00) >> 8 | (i & 0x00FF) << 8;
i = (i & 0xF0F0) >> 4 | (i & 0x0F0F) << 4;
i = (i & 0xCCCC) >> 2 | (i & 0x3333) << 2;
i = (i & 0xAAAA) >> 1 | (i & 0x5555) << 1;
return i;
} }
void Module::hexdump(uint8_t* data, size_t len, uint32_t offset, uint8_t width, bool be) { void Module::hexdump(uint8_t* data, size_t len, uint32_t offset, uint8_t width, bool be) {

View file

@ -462,13 +462,11 @@ class Module {
/*! /*!
\brief Function to reflect bits within a byte. \brief Function to reflect bits within a byte.
\param in The input to reflect.
\param bits Number of bits to reflect.
\return The reflected input.
*/ */
static uint8_t flipBits(uint8_t b); static uint32_t reflect(uint32_t in, uint8_t bits);
/*!
\brief Function to reflect bits within an integer.
*/
static uint16_t flipBits16(uint16_t i);
/*! /*!
\brief Function to dump data as hex into the debug port. \brief Function to dump data as hex into the debug port.

View file

@ -303,7 +303,7 @@ int16_t AX25Client::sendFrame(AX25Frame* frame) {
// flip bit order // flip bit order
for(size_t i = 0; i < frameBuffLen; i++) { for(size_t i = 0; i < frameBuffLen; i++) {
frameBuff[i] = Module::flipBits(frameBuff[i]); frameBuff[i] = Module::reflect(frameBuff[i], 8);
} }
// calculate FCS // calculate FCS

View file

@ -160,7 +160,7 @@ int16_t PagerClient::transmit(uint8_t* data, size_t len, uint32_t addr, uint8_t
// first insert the remainder from previous code word (if any) // first insert the remainder from previous code word (if any)
if(remBits > 0) { if(remBits > 0) {
// this doesn't apply to BCD messages, so no need to check that here // this doesn't apply to BCD messages, so no need to check that here
uint8_t prev = Module::flipBits(data[dataPos - 1]); uint8_t prev = Module::reflect(data[dataPos - 1], 8);
prev >>= 1; prev >>= 1;
msg[blockPos] |= (uint32_t)prev << (RADIOLIB_PAGER_CODE_WORD_LEN - 1 - remBits); msg[blockPos] |= (uint32_t)prev << (RADIOLIB_PAGER_CODE_WORD_LEN - 1 - remBits);
} }
@ -174,7 +174,7 @@ int16_t PagerClient::transmit(uint8_t* data, size_t len, uint32_t addr, uint8_t
if(encoding == RADIOLIB_PAGER_BCD) { if(encoding == RADIOLIB_PAGER_BCD) {
symbol = encodeBCD(symbol); symbol = encodeBCD(symbol);
} }
symbol = Module::flipBits(symbol); symbol = Module::reflect(symbol, 8);
symbol >>= (8 - symbolLength); symbol >>= (8 - symbolLength);
// insert the next message symbol // insert the next message symbol
@ -188,7 +188,7 @@ int16_t PagerClient::transmit(uint8_t* data, size_t len, uint32_t addr, uint8_t
uint8_t numSteps = (symbolPos - RADIOLIB_PAGER_FUNC_BITS_POS + symbolLength)/symbolLength; uint8_t numSteps = (symbolPos - RADIOLIB_PAGER_FUNC_BITS_POS + symbolLength)/symbolLength;
for(uint8_t i = 0; i < numSteps; i++) { for(uint8_t i = 0; i < numSteps; i++) {
symbol = encodeBCD(' '); symbol = encodeBCD(' ');
symbol = Module::flipBits(symbol); symbol = Module::reflect(symbol, 8);
symbol >>= (8 - symbolLength); symbol >>= (8 - symbolLength);
msg[blockPos] |= (uint32_t)symbol << symbolPos; msg[blockPos] |= (uint32_t)symbol << symbolPos;
symbolPos -= symbolLength; symbolPos -= symbolLength;
@ -397,7 +397,7 @@ int16_t PagerClient::readData(uint8_t* data, size_t* len, uint32_t* addr) {
uint32_t symbol = prevSymbol << (symbolLength - ovfBits) | currSymbol; uint32_t symbol = prevSymbol << (symbolLength - ovfBits) | currSymbol;
// finally, we can flip the bits // finally, we can flip the bits
symbol = Module::flipBits((uint8_t)symbol); symbol = Module::reflect((uint8_t)symbol, 8);
symbol >>= (8 - symbolLength); symbol >>= (8 - symbolLength);
// decode BCD and we're done // decode BCD and we're done
@ -415,7 +415,7 @@ int16_t PagerClient::readData(uint8_t* data, size_t* len, uint32_t* addr) {
while(bitPos >= RADIOLIB_PAGER_MESSAGE_END_POS) { while(bitPos >= RADIOLIB_PAGER_MESSAGE_END_POS) {
// get the message symbol from the code word and reverse bits // get the message symbol from the code word and reverse bits
uint32_t symbol = (cw & (0x7FUL << bitPos)) >> bitPos; uint32_t symbol = (cw & (0x7FUL << bitPos)) >> bitPos;
symbol = Module::flipBits((uint8_t)symbol); symbol = Module::reflect((uint8_t)symbol, 8);
symbol >>= (8 - symbolLength); symbol >>= (8 - symbolLength);
// decode BCD if needed // decode BCD if needed

View file

@ -367,7 +367,7 @@ void PhysicalLayer::updateDirectBuffer(uint8_t bit) {
// check complete byte // check complete byte
if(this->bufferBitPos == 8) { if(this->bufferBitPos == 8) {
this->buffer[this->bufferWritePos] = Module::flipBits(this->buffer[this->bufferWritePos]); this->buffer[this->bufferWritePos] = Module::reflect(this->buffer[this->bufferWritePos], 8);
RADIOLIB_VERBOSE_PRINTLN("R\t%X", this->buffer[this->bufferWritePos]); RADIOLIB_VERBOSE_PRINTLN("R\t%X", this->buffer[this->bufferWritePos]);
this->bufferWritePos++; this->bufferWritePos++;