/* hrf69_test.c D.J.Whale 03/04/2016 * * A simple exerciser for the HopeRF RFM69 radio * Configures for OOK, and uses a bitpattern than generates * a fixed tone, that can be measured at the receiving end. */ /***** INCLUDES *****/ //#include <stdio.h> //#include <stdlib.h> #include "system.h" #include "delay.h" #include "gpio.h" #include "spi.h" #include "hrfm69.h" #include "trace.h" /***** CONFIGURATION *****/ /* Only define this if you are running mac/pc/pi, * arduino will have a different console wrapper to drive tests, probably */ #define HRFM69_TEST extern void gpio_mock_set_in(uint8_t g, uint8_t v); /* GPIO assignments for Arduino Pro Micro */ //#define RESET 2 //#define CS 3 //#define MOSI 4 //#define MISO 5 //#define SCLK 6 /* GPIO assignments for Raspberry Pi using BCM numbering */ #define RESET 25 #define LED_GREEN 27 // (not B rev1) #define LED_RED 22 #define CS 7 // CE1 #define SCLK 11 #define MOSI 10 #define MISO 9 SPI_CONFIG radioConfig = {CS, SCLK, MOSI, MISO, SPI_SPOL0, SPI_CPOL0, SPI_CPHA0}; //TSETTLE, THOLD, TFREQ}; /***** FUNCTION PROTOTYPES *****/ static void reset(void); //void hrf_test_rw(void); //void hrf_test_send_ook_tone(void); #if defined(HRFM69_TEST) int main(int argc, char **argv) { gpio_init(); gpio_setout(RESET); gpio_low(RESET); gpio_setout(LED_RED); gpio_low(LED_RED); gpio_setout(LED_GREEN); gpio_low(LED_GREEN); // spi_init does gpio_init (might not be correct in the longer term for shared GPIO) //spi_init(&radioConfig); gpio_high(LED_RED); gpio_high(LED_GREEN); delaysec(2); gpio_low(LED_RED); gpio_low(LED_GREEN); //hrf_test_send_ook(); //spi_finished(); gpio_finished(); return 0; } #endif // Reset is really a function of how the Energenie radio is wired up to the Pi or // Arduino, so it will appear in the 'radio' module. It is here for testing convenience. static void reset(void) { gpio_high(RESET); delayms(150); gpio_low(RESET); delayus(100); } // write a register and read it back // TODO readback should read the version register // write should write a register that is not likely to mess with too much configuration //#define TX 0x04 //#define RX 0x0C //void hrf_test_rw(void) //{ // uint8_t result; // // reset(); // gpio_mock_set_in(MISO, 1); // force return bus high to test // // //printf("** write:%02X\n", (unsigned int) HRF_MODE_TRANSMITER); // TRACE_OUTS("** write:"); // TRACE_OUTN(TX); // TRACE_NL(); // // HRF_writereg(HRF_ADDR_OPMODE, TX); // result = HRF_readreg(0x00); // // //printf("** read:%02X\n", (unsigned int) result); // TRACE_OUTS("** read:"); // TRACE_OUTN(result); // TRACE_NL(); // // //printf("** write:%02X\n", (unsigned int) HRF_MODE_RECEIVER); // TRACE_OUTS("** write:"); // TRACE_OUTN(RX); // TRACE_NL(); // // HRF_writereg(HRF_ADDR_OPMODE, RX); // result = HRF_readreg(0x00); // // //printf("** read:%02X\n", (unsigned int) result); // TRACE_OUTS("** read:"); // TRACE_OUTN(result); // TRACE_NL(); // // spi_finished(); //} #if 0 HRF_CONFIG_REC config_OOK[] = { {HRF_ADDR_REGDATAMODUL, HRF_VAL_REGDATAMODUL_OOK}, // modulation scheme OOK {HRF_ADDR_FDEVMSB, 0}, // frequency deviation -> 0kHz {HRF_ADDR_FDEVLSB, 0}, // frequency deviation -> 0kHz {HRF_ADDR_FRMSB, HRF_VAL_FRMSB433}, // carrier freq -> 433.92MHz 0x6C7AE1 {HRF_ADDR_FRMID, HRF_VAL_FRMID433}, // carrier freq -> 433.92MHz 0x6C7AE1 {HRF_ADDR_FRLSB, HRF_VAL_FRLSB433}, // carrier freq -> 433.92MHz 0x6C7AE1 {HRF_ADDR_RXBW, HRF_VAL_RXBW120}, // channel filter bandwidth 120kHz {HRF_ADDR_BITRATEMSB, 0x1A}, // 4800b/s {HRF_ADDR_BITRATELSB, 0x0B}, // 4800b/s {HRF_ADDR_PREAMBLELSB, 0}, // preamble size LSB 3 {HRF_ADDR_SYNCCONFIG, HRF_VAL_SYNCCONFIG0}, // Size of the Sync word = 4 (SyncSize + 1) {HRF_ADDR_PACKETCONFIG1, HRF_VAL_PACKETCONFIG1OOK}, // Fixed length, no Manchester coding, OOK {HRF_ADDR_PAYLOADLEN, 8}, // Payload Length {HRF_ADDR_FIFOTHRESH, 8} // Condition to start packet transmission: wait for 30 bytes in FIFO }; #endif #if 0 // Send a test tone using OOK modulation void hrf_test_send_ook_tone(void) { reset(); HRF_config(config_OOK, sizeof(config_OOK)); HRF_change_mode(HRF_MODE_TRANSMITTER); /* Wait for transmitter to be ready */ HRF_pollreg(HRF_ADDR_IRQFLAGS1, HRF_MASK_MODEREADY|HRF_MASK_TXREADY, HRF_MASK_MODEREADY|HRF_MASK_TXREADY); /* A regular tone */ static uint8_t payload[] = { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA }; while (1) /* Forever */ { HRF_writefifo_burst(payload, sizeof(payload)); HRF_pollreg(HRF_ADDR_IRQFLAGS2, HRF_MASK_PACKETSENT, HRF_MASK_PACKETSENT); // wait for Packet sent } //uint8_t irqflags2 = HRF_readreg(HRF_ADDR_IRQFLAGS2); //TRACE_OUTS("irqflags2:"); //TRACE_OUTN(irqflags2); //TRACE_NL(); //if (((irqflags2 & HRF_MASK_FIFONOTEMPTY) != 0) || ((irqflags2 & HRF_MASK_FIFOOVERRUN) != 0)) //{ // TRACE_FAIL("Failed to send repeated payload"); //} } #endif /***** END OF FILE *****/