[MOD] Added common reflect method
This commit is contained in:
parent
3b8218c397
commit
03d2a9bf26
5 changed files with 17 additions and 26 deletions
|
@ -372,19 +372,12 @@ void Module::waitForMicroseconds(uint32_t start, uint32_t len) {
|
|||
#endif
|
||||
}
|
||||
|
||||
uint8_t Module::flipBits(uint8_t b) {
|
||||
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
|
||||
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
|
||||
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
|
||||
return b;
|
||||
}
|
||||
|
||||
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;
|
||||
uint32_t Module::reflect(uint32_t in, uint8_t bits) {
|
||||
uint32_t res = 0;
|
||||
for(uint8_t i = 0; i < bits; i++) {
|
||||
res |= (((in & ((uint32_t)1 << i)) >> i) << (bits - i - 1));
|
||||
}
|
||||
return(res);
|
||||
}
|
||||
|
||||
void Module::hexdump(uint8_t* data, size_t len, uint32_t offset, uint8_t width, bool be) {
|
||||
|
|
10
src/Module.h
10
src/Module.h
|
@ -462,13 +462,11 @@ class Module {
|
|||
|
||||
/*!
|
||||
\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);
|
||||
|
||||
/*!
|
||||
\brief Function to reflect bits within an integer.
|
||||
*/
|
||||
static uint16_t flipBits16(uint16_t i);
|
||||
static uint32_t reflect(uint32_t in, uint8_t bits);
|
||||
|
||||
/*!
|
||||
\brief Function to dump data as hex into the debug port.
|
||||
|
|
|
@ -303,7 +303,7 @@ int16_t AX25Client::sendFrame(AX25Frame* frame) {
|
|||
|
||||
// flip bit order
|
||||
for(size_t i = 0; i < frameBuffLen; i++) {
|
||||
frameBuff[i] = Module::flipBits(frameBuff[i]);
|
||||
frameBuff[i] = Module::reflect(frameBuff[i], 8);
|
||||
}
|
||||
|
||||
// calculate FCS
|
||||
|
|
|
@ -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)
|
||||
if(remBits > 0) {
|
||||
// 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;
|
||||
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) {
|
||||
symbol = encodeBCD(symbol);
|
||||
}
|
||||
symbol = Module::flipBits(symbol);
|
||||
symbol = Module::reflect(symbol, 8);
|
||||
symbol >>= (8 - symbolLength);
|
||||
|
||||
// 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;
|
||||
for(uint8_t i = 0; i < numSteps; i++) {
|
||||
symbol = encodeBCD(' ');
|
||||
symbol = Module::flipBits(symbol);
|
||||
symbol = Module::reflect(symbol, 8);
|
||||
symbol >>= (8 - symbolLength);
|
||||
msg[blockPos] |= (uint32_t)symbol << symbolPos;
|
||||
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;
|
||||
|
||||
// finally, we can flip the bits
|
||||
symbol = Module::flipBits((uint8_t)symbol);
|
||||
symbol = Module::reflect((uint8_t)symbol, 8);
|
||||
symbol >>= (8 - symbolLength);
|
||||
|
||||
// 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) {
|
||||
// get the message symbol from the code word and reverse bits
|
||||
uint32_t symbol = (cw & (0x7FUL << bitPos)) >> bitPos;
|
||||
symbol = Module::flipBits((uint8_t)symbol);
|
||||
symbol = Module::reflect((uint8_t)symbol, 8);
|
||||
symbol >>= (8 - symbolLength);
|
||||
|
||||
// decode BCD if needed
|
||||
|
|
|
@ -367,7 +367,7 @@ void PhysicalLayer::updateDirectBuffer(uint8_t bit) {
|
|||
|
||||
// check complete byte
|
||||
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]);
|
||||
|
||||
this->bufferWritePos++;
|
||||
|
|
Loading…
Add table
Reference in a new issue