Fix bug introduced in the move to PROGMEM. Props to @basilrx for finding this. Also added a test case to demonstrate the bug, and guard against more like it in the future.
This commit is contained in:
parent
f6e59b9de8
commit
2c97186329
2
RF24.cpp
2
RF24.cpp
|
@ -649,7 +649,7 @@ void RF24::openReadingPipe(uint8_t child, uint64_t address)
|
||||||
// Note it would be more efficient to set all of the bits for all open
|
// Note it would be more efficient to set all of the bits for all open
|
||||||
// pipes at once. However, I thought it would make the calling code
|
// pipes at once. However, I thought it would make the calling code
|
||||||
// more simple to do it this way.
|
// more simple to do it this way.
|
||||||
write_register(EN_RXADDR,read_register(EN_RXADDR) | _BV(child_pipe_enable[child]));
|
write_register(EN_RXADDR,read_register(EN_RXADDR) | _BV(pgm_read_byte(&child_pipe_enable[child])));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,8 @@ const int interval = 100; //*< ms to wait between sends */
|
||||||
|
|
||||||
char configuration = '1'; //*< Configuration key, one char sent in by the test framework to tell us how to configure, this is the default */
|
char configuration = '1'; //*< Configuration key, one char sent in by the test framework to tell us how to configure, this is the default */
|
||||||
|
|
||||||
|
uint8_t pipe_number = 1; // Which pipe to send on.
|
||||||
|
|
||||||
void one_ok(void)
|
void one_ok(void)
|
||||||
{
|
{
|
||||||
// Have we received enough yet?
|
// Have we received enough yet?
|
||||||
|
@ -203,6 +205,20 @@ void setup(void)
|
||||||
radio.enableDynamicPayloads();
|
radio.enableDynamicPayloads();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Config 4 tests out a higher pipe ##
|
||||||
|
if (configuration == '4' && role == role_sender)
|
||||||
|
{
|
||||||
|
// Set top 4 bytes of the address in pipe 1
|
||||||
|
radio.openReadingPipe(1,pipe & 0xFFFFFFFF00ULL);
|
||||||
|
|
||||||
|
// indicate the pipe to use
|
||||||
|
pipe_number = 5;
|
||||||
|
}
|
||||||
|
else if ( role == role_sender )
|
||||||
|
{
|
||||||
|
radio.openReadingPipe(5,0);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Open pipes to other nodes for communication
|
// Open pipes to other nodes for communication
|
||||||
//
|
//
|
||||||
|
@ -216,7 +232,7 @@ void setup(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
radio.openReadingPipe(1,pipe);
|
radio.openReadingPipe(pipe_number,pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -230,7 +246,7 @@ void setup(void)
|
||||||
// Dump the configuration of the rf unit for debugging
|
// Dump the configuration of the rf unit for debugging
|
||||||
//
|
//
|
||||||
|
|
||||||
//radio.printDetails();
|
radio.printDetails();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Attach interrupt handler to interrupt #0 (using pin 2)
|
// Attach interrupt handler to interrupt #0 (using pin 2)
|
||||||
|
@ -410,7 +426,7 @@ void check_radio(void)
|
||||||
|
|
||||||
// Add an ack packet for the next time around.
|
// Add an ack packet for the next time around.
|
||||||
// Here we will report back how many bytes we got this time.
|
// Here we will report back how many bytes we got this time.
|
||||||
radio.writeAckPayload( 1, &len, sizeof(len) );
|
radio.writeAckPayload( pipe_number, &len, sizeof(len) );
|
||||||
++message_count;
|
++message_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,3 +14,8 @@ stty 57600 raw ignbrk hup < /dev/ttyUSB0
|
||||||
sleep 1
|
sleep 1
|
||||||
stty 57600 raw ignbrk hup < /dev/ttyUSB1
|
stty 57600 raw ignbrk hup < /dev/ttyUSB1
|
||||||
expect test.ex 3
|
expect test.ex 3
|
||||||
|
sleep 1
|
||||||
|
stty 57600 raw ignbrk hup < /dev/ttyUSB0
|
||||||
|
sleep 1
|
||||||
|
stty 57600 raw ignbrk hup < /dev/ttyUSB1
|
||||||
|
expect test.ex 4
|
||||||
|
|
Loading…
Reference in New Issue