RF22
rf22_test.pde

Test suite for RF22 library

// rf22_test.pde
// -*- mode: C++ -*-
//
// Test code used during library development, showing how
// to do various things, and how to call various functions
#include <SPI.h>
#include <RF22.h>
// Singleton instance of the radio
RF22 rf22;
void setup()
{
Serial.begin(9600);
if (!rf22.init())
Serial.println("RF22 init failed");
}
void
test_read_write()
{
uint8_t val;
rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 10);
val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
Serial.println(val, DEC);
rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 5);
val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
Serial.println(val, DEC);
Serial.println("-----");
}
void
test_adc()
{
uint8_t val = rf22.adcRead(RF22_ADCSEL_GND);
Serial.println(val, HEX);
}
void test_temp()
{
uint8_t val = rf22.temperatureRead();
Serial.println(val, HEX);
}
void
test_burst_read()
{
uint8_t buf[127];
rf22.spiBurstRead(0, buf, sizeof(buf));
uint8_t i;
for (i = 0; i < 127; i++)
{
Serial.print(i, HEX);
Serial.print(": ");
Serial.println(buf[i], HEX);
}
}
void test_burst_write()
{
uint8_t buf[] = "Hello";
rf22.spiBurstWrite(RF22_REG_7F_FIFO_ACCESS, buf, sizeof(buf));
}
void
test_wut()
{
Serial.println("WUT Start");
rf22.setWutPeriod(10000); // 10000, 0, 0 -> 1 secs
rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, RF22_ENWT);
// Wait for the interrupt to occur
while (1)
{
uint8_t val = rf22.spiRead(RF22_REG_04_INTERRUPT_STATUS2);
if (val & RF22_IWUT)
break;
}
rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, 0);
Serial.println("WUT Interrupt bit detected OK");
}
void
test_set_frequency()
{
if (!rf22.setFHStepSize(0))
Serial.println("setFHStepSize 1 Fail");
if (!rf22.setFHChannel(0))
Serial.println("setFHChannel 1 Fail");
if (!rf22.setFrequency(434.0))
Serial.println("setFrequency 1 Fail");
if (!rf22.setFrequency(240.0))
Serial.println("setFrequency 2 Fail");
if (!rf22.setFrequency(929.9999)) // Higher than this produces FREQERR on my 06 silicon
Serial.println("setFrequency 3 Fail");
if (rf22.setFrequency(960.1)) // Should fail
Serial.println("setFrequency 4 Fail");
Serial.println("-------------");
}
void
test_rssi()
{
rf22.setModeRx();
float f = 430.0;
while (f < 435.0)
{
rf22.setFrequency(f);
delayMicroseconds(200); // Wait for freq to settle
uint8_t rssi = rf22.rssiRead();
Serial.print(f);
Serial.print(": ");
Serial.println(rssi, DEC);
f += 1.0;
}
rf22.setModeIdle();
Serial.println("-------------");
}
// Sends 0.5 secs of PN9 modulated with with GFSK at full power
void test_tx_pn9()
{
rf22.setFrequency(434.0);
rf22.setTxPower(RF22_TXPOW_17DBM);
rf22.setModeRx();
// Takes a little while to start
delay(1);
Serial.println(rf22.statusRead(), HEX);
// rf22.setModemConfig(RF22::UnmodulatedCarrier);
rf22.setModeTx(); // Turns off Rx
// Takes a little while to start
delay(1);
Serial.println(rf22.statusRead(), HEX);
delay(500);
rf22.setModeIdle();
// Takes a little while to turn off the transmitter
delay(10);
Serial.println(rf22.statusRead(), HEX);
Serial.println("-------------");
delay(500);
}
// Connect analog test points to GPIO1 and GPIO2
void test_analog_gpio()
{
rf22.setFrequency(434.0);
rf22.setModeRx();
// GPIO1 for Test N output
rf22.spiWrite(RF22_REG_0C_GPIO_CONFIGURATION1, 0x0c);
// GPIO2 for Test P output
rf22.spiWrite(RF22_REG_0D_GPIO_CONFIGURATION2, 0x0d);
rf22.spiWrite(RF22_REG_50_ANALOG_TEST_BUS_SELECT, 15); // Detector?
while (1);
}
void test_modem_config()
{
if (rf22.setModemConfig((RF22::ModemConfigChoice)255)) // Should fail
Serial.println("setModemConfig 1 failed");
Serial.println("setModemConfig 2 failed");
Serial.println("setModemConfig 3 failed");
Serial.println("setModemConfig 3 failed");
Serial.println("setModemConfig 4 failed");
Serial.println("-------------");
}
// This works with test_rx below
void test_tx()
{
if (!rf22.setFrequency(434.0))
Serial.println("setFrequency failed");
Serial.println("setModemConfig failed");
uint8_t data[] = "hello";
// 255 octets:
// uint8_t data[] = "12345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012345";
rf22.send(data, sizeof(data));
Serial.println("-------------");
}
// This works with test_tx above
void test_rx()
{
if (!rf22.setFrequency(434.0))
Serial.println("setFrequency failed");
Serial.println("setModemConfig failed");
while (1)
{
uint8_t buf[RF22_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf22.recv(buf, &len)) // Should fail, no message available
Serial.println("recv 1 failed");
rf22.waitAvailable();
if (rf22.recv(buf, &len))
{
Serial.print("got one in user: ");
Serial.println((char*)buf);
}
else
{
Serial.print("recv 2 failed");
}
}
}
void loop()
{
// test_read_write();
// test_adc();
// test_temp();
// test_burst_read();
// test_burst_write();
// test_wut();
// test_set_frequency();
// test_rssi();
test_tx_pn9();
// test_analog_gpio();
// test_modem_config();
// test_tx();
// test_rx();
// while (1);
delay(1000);
}