diff --git a/src/energenie/drv/hrf69.h b/src/energenie/drv/hrf69.h index fd26cac..6402116 100644 --- a/src/energenie/drv/hrf69.h +++ b/src/energenie/drv/hrf69.h @@ -66,7 +66,7 @@ // Radio modes #define HRF_MODE_STANDBY 0x04 // Standby -#define HRF_MODE_TRANSMITER 0x0C // Transmiter +#define HRF_MODE_TRANSMITTER 0x0C // Transmiter #define HRF_MODE_RECEIVER 0x10 // Receiver // Values to store in registers diff --git a/src/energenie/drv/hrf69_test.c b/src/energenie/drv/hrf69_test.c index f88a350..f7a97a1 100644 --- a/src/energenie/drv/hrf69_test.c +++ b/src/energenie/drv/hrf69_test.c @@ -36,15 +36,21 @@ /***** FUNCTION PROTOTYPES *****/ static void reset(void); -void hrf_test_connect(void); +void hrf_test_rw(void); +void hrf_test_send_ook(void); #if defined(HRF69_TEST) int main(int argc, char **argv) { - hrf_test_connect(); - return 0; + hrf_test_rw(); + + //TODO: Can't test this until real radio added, + // polling means flags will never clear + //hrf_test_send_ook(); + + return 0; } #endif @@ -78,7 +84,7 @@ #define TX 0x04 #define RX 0x0C -void hrf_test_connect(void) +void hrf_test_rw(void) { uint8_t result; @@ -115,4 +121,70 @@ } +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, 0x40}, // 1938b/s + {HRF_ADDR_BITRATELSB, 0x80}, // 1938b/s + {HRF_ADDR_PREAMBLELSB, 0}, // preamble size LSB 3 + {HRF_ADDR_SYNCCONFIG, HRF_VAL_SYNCCONFIG4}, // Size of the Sync word = 4 (SyncSize + 1) + {HRF_ADDR_SYNCVALUE1, HRF_VAL_SYNCVALUE1OOK}, // sync value 1 + {HRF_ADDR_SYNCVALUE2, 0}, // sync value 2 + {HRF_ADDR_SYNCVALUE3, 0}, // sync value 3 + {HRF_ADDR_SYNCVALUE4, 0}, // sync value 4 + {HRF_ADDR_PACKETCONFIG1, HRF_VAL_PACKETCONFIG1OOK}, // Fixed length, no Manchester coding, OOK + {HRF_ADDR_PAYLOADLEN, HRF_VAL_PAYLOADLEN_OOK}, // Payload Length + {HRF_ADDR_FIFOTHRESH, HRF_VAL_FIFOTHRESH30} // Condition to start packet transmission: wait for 30 bytes in FIFO +}; + +// A 'go for broke' OOK payload sender +void hrf_test_send_ook(void) +{ + + reset(); + gpio_mock_set_in(MISO, 1); // force return bus high to test + + HRF_config(config_OOK, sizeof(config_OOK)); + HRF_change_mode(HRF_MODE_TRANSMITTER); + + static uint8_t payload[] = { + // Preamble + 0x00, 0x80, 0x00, 0x00, 0x00, + // Encoded 20 bit address + 0x8E, 0xE8, 0xEE, 0x88, 0x8E, 0xE8, 0xEE, 0x88, 0x8E, 0xE8, + // Command bits + 0xEE, 0xE8 // 1110 = E = switch 1 off + //0xEE, 0xEE // 1111 = F = switch 1 on + }; + + HRF_pollreg(HRF_ADDR_IRQFLAGS1, HRF_MASK_MODEREADY|HRF_MASK_TXREADY, HRF_MASK_MODEREADY|HRF_MASK_TXREADY); + HRF_writefifo_burst(payload, sizeof(payload)); + + for (int i=0; i<8; i++) + { + HRF_pollreg(HRF_ADDR_IRQFLAGS2, HRF_MASK_FIFOLEVEL, 0); + 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"); + } + + spi_finished(); +} + + /***** END OF FILE *****/ diff --git a/src/energenie/drv/trace.c b/src/energenie/drv/trace.c deleted file mode 100644 index e69de29..0000000 --- a/src/energenie/drv/trace.c +++ /dev/null diff --git a/src/energenie/drv/trace.h b/src/energenie/drv/trace.h index 65118c6..5598ffa 100644 --- a/src/energenie/drv/trace.h +++ b/src/energenie/drv/trace.h @@ -17,6 +17,7 @@ */ #include +#include #define TRACE_OUTS(s) printf("%s", s) #define TRACE_OUTN(n) printf("%d", (unsigned int)n)