diff --git a/src/energenie/drv/hrf69.c b/src/energenie/drv/hrf69.c index 1ddee4e..71a49b4 100644 --- a/src/energenie/drv/hrf69.c +++ b/src/energenie/drv/hrf69.c @@ -2,7 +2,7 @@ * * Hope RF RFM69 radio controller code. */ - +#include #include "system.h" #include "hrf69.h" #include "spi.h" @@ -36,7 +36,7 @@ { spi_select(); spi_byte(HRF_ADDR_FIFO | HRF_MASK_WRITE_DATA); - spi_frame(buf, buf, len); + spi_frame(buf, NULL, len); spi_deselect(); } diff --git a/src/energenie/drv/ino_ook/ino_ook.ino b/src/energenie/drv/ino_ook/ino_ook.ino index 886ed67..ea935a3 100644 --- a/src/energenie/drv/ino_ook/ino_ook.ino +++ b/src/energenie/drv/ino_ook/ino_ook.ino @@ -2,6 +2,8 @@ #include "spi.h" //#include "trace.h" #include "delay.h" +#include "hrf69.h" + // pin number on Raspberry Pi (not GPIO number) #define SPI_RESET 2 // P1-22 (active high) #define SPI_CS 3 // P1-26 (active low) @@ -24,7 +26,7 @@ void reset() { gpio_high(SPI_RESET); - delay(150); + delay(2000); gpio_low(SPI_RESET); } @@ -47,12 +49,76 @@ Serial.println(rx[1]); } +//TODO this table should be in progmem?? +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) +{ + 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 + }; + + reset(); + HRF_config(config_OOK, sizeof(config_OOK)); + HRF_change_mode(HRF_MODE_TRANSMITTER); + + + 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"); + //} + +} + void loop() { while (true) { - test2(); + hrf_test_send_ook(); } }