diff --git a/src/energenie/drv/build_rpi b/src/energenie/drv/build_rpi index d717183..1ea8f9c 100755 --- a/src/energenie/drv/build_rpi +++ b/src/energenie/drv/build_rpi @@ -21,9 +21,9 @@ # build hrf69_test -##gcc hrfm69_test.c hrfm69.c spis_rpi.c gpio_rpi.c delay_posix.c -##mv a.out hrfm69_test -##chmod u+x hrfm69_test +gcc hrfm69_test.c hrfm69.c spis.c gpio_rpi.c delay_posix.c +mv a.out hrfm69_test +chmod u+x hrfm69_test # build radio_test diff --git a/src/energenie/drv/hrfm69.c b/src/energenie/drv/hrfm69.c index 3a24f4c..ae53263 100644 --- a/src/energenie/drv/hrfm69.c +++ b/src/energenie/drv/hrfm69.c @@ -7,11 +7,17 @@ #include "system.h" #include "hrfm69.h" #include "spi.h" - +#include "trace.h" // Write an 8 bit value to a register void HRF_writereg(uint8_t addr, uint8_t data) { + TRACE_OUTS("writereg "); + TRACE_OUTN(addr); + TRACE_OUTC(' '); + TRACE_OUTN(data); + TRACE_NL(); + spi_select(); spi_byte(addr | HRF_MASK_WRITE_DATA); spi_byte(data); diff --git a/src/energenie/drv/hrfm69.h b/src/energenie/drv/hrfm69.h index c40b04e..ea27e73 100644 --- a/src/energenie/drv/hrfm69.h +++ b/src/energenie/drv/hrfm69.h @@ -33,6 +33,7 @@ #define HRF_ADDR_FRMID 0x08 #define HRF_ADDR_FRLSB 0x09 #define HRF_ADDR_AFCCTRL 0x0B +#define HRF_ADDR_VERSION 0x10 #define HRF_ADDR_LNA 0x18 #define HRF_ADDR_RXBW 0x19 #define HRF_ADDR_AFCFEI 0x1E @@ -91,6 +92,7 @@ #define HRF_VAL_RSSITHRESH220 0xDC // RSSI threshold 0xE4 -> 0xDC (220) #define HRF_VAL_PREAMBLELSB3 0x03 // preamble size LSB 3 #define HRF_VAL_PREAMBLELSB5 0x05 // preamble size LSB 5 +#define HRF_VAL_SYNCCONFIG0 0x00 // sync word disabled #define HRF_VAL_SYNCCONFIG2 0x88 // Size of the Synch word = 2 (SyncSize + 1) #define HRF_VAL_SYNCCONFIG4 0x98 // Size of the Synch word = 4 (SyncSize + 1) #define HRF_VAL_PAYLOADLEN255 0xFF // max Length in RX, not used in Tx diff --git a/src/energenie/drv/hrfm69_test.c b/src/energenie/drv/hrfm69_test.c index d14d47b..588cd2e 100644 --- a/src/energenie/drv/hrfm69_test.c +++ b/src/energenie/drv/hrfm69_test.c @@ -52,37 +52,36 @@ /***** FUNCTION PROTOTYPES *****/ +static uint8_t read_ver(void); static void reset(void); -//void hrf_test_rw(void); -//void hrf_test_send_ook_tone(void); +void hrf_test_send_ook_tone(void); #if defined(HRFM69_TEST) int main(int argc, char **argv) { - gpio_init(); + TRACE_OUTS("start\n"); + + //gpio_init(); done by spi_init at moment + spi_init(&radioConfig); 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); + TRACE_OUTS("reset...\n"); + reset(); - gpio_high(LED_RED); - gpio_high(LED_GREEN); + TRACE_OUTS("reading radiover...\n"); + uint8_t rv = read_ver(); + TRACE_OUTN(rv); + TRACE_NL(); - - delaysec(2); - - gpio_low(LED_RED); - gpio_low(LED_GREEN); - - //hrf_test_send_ook(); + TRACE_OUTS("testing...\n"); + hrf_test_send_ook_tone(); //spi_finished(); gpio_finished(); @@ -105,51 +104,12 @@ } -// 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(); -//} +static uint8_t read_ver(void) +{ + return HRF_readreg(HRF_ADDR_VERSION); +} -#if 0 HRF_CONFIG_REC config_OOK[] = { {HRF_ADDR_REGDATAMODUL, HRF_VAL_REGDATAMODUL_OOK}, // modulation scheme OOK {HRF_ADDR_FDEVMSB, 0}, // frequency deviation -> 0kHz @@ -158,27 +118,34 @@ {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_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 + {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, 0x00}, // Fixed length, no Manchester coding, OOK + {HRF_ADDR_PAYLOADLEN, 8}, // Payload Length + {HRF_ADDR_FIFOTHRESH, 7} // Condition to start packet transmission: exceeds 7 bytes in FIFO }; -#endif -#if 0 // Send a test tone using OOK modulation void hrf_test_send_ook_tone(void) { - reset(); + int i; + TRACE_OUTS("config\n"); HRF_config(config_OOK, sizeof(config_OOK)); + + TRACE_OUTS("transmitter mode\n"); HRF_change_mode(HRF_MODE_TRANSMITTER); - /* Wait for transmitter to be ready */ + TRACE_OUTS("read irqflags1="); + delaysec(1); + uint8_t irqflags1 = HRF_readreg(HRF_ADDR_IRQFLAGS1); + TRACE_OUTN(irqflags1); + TRACE_NL(); + + TRACE_OUTS("wait for txready\n"); HRF_pollreg(HRF_ADDR_IRQFLAGS1, HRF_MASK_MODEREADY|HRF_MASK_TXREADY, HRF_MASK_MODEREADY|HRF_MASK_TXREADY); /* A regular tone */ @@ -186,8 +153,9 @@ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA }; - while (1) /* Forever */ + for (i=0; i<8; i++) { + TRACE_OUTS("tx\n"); HRF_writefifo_burst(payload, sizeof(payload)); HRF_pollreg(HRF_ADDR_IRQFLAGS2, HRF_MASK_PACKETSENT, HRF_MASK_PACKETSENT); // wait for Packet sent } @@ -203,7 +171,6 @@ // TRACE_FAIL("Failed to send repeated payload"); //} } -#endif /***** END OF FILE *****/