#include "gpio.h"
#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)
#define SPI_SCLK 4 // P1-23
#define SPI_MOSI 5 // P1-19
#define SPI_MISO 6 // P1-21
// P1-20 GND
// P1-17 3V3
static SPI_CONFIG spiConfig = {SPI_CS, SPI_SCLK, SPI_MOSI, SPI_MISO, SPI_SPOL0, SPI_CPOL0, SPI_CPHA0, 1000, 1000, 1000};
void setup()
{
gpio_setout(SPI_RESET);
gpio_low(SPI_RESET);
spi_init(&spiConfig);
Serial.begin(19200);
}
void reset()
{
gpio_high(SPI_RESET);
delay(2000);
gpio_low(SPI_RESET);
}
void test2()
{
unsigned char wr_mode_tx[] = {0x80 |0x01, 0x0C}; // set mode register to TRANSMITTER
unsigned char rd_mode[] = {0x00 |0x01, 0x00}; // read mode register
unsigned char rx[2];
reset();
spi_select();
spi_frame(wr_mode_tx, NULL, sizeof(wr_mode_tx));
spi_deselect();
spi_select();
spi_frame(rd_mode, rx, sizeof(rd_mode));
spi_deselect();
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)
{
hrf_test_send_ook();
}
}
//void setup()
//{
// gpio_init();
// gpio_setout(SPI_RESET);
// gpio_setout(SPI_CS);
// gpio_setout(SPI_SCLK);
// gpio_setout(SPI_MISO);
// gpio_setout(SPI_MOSI);
//}
//void loop()
//{
// while (true)
// {
// gpio_high(SPI_RESET);
// delaysec(1);
// gpio_low(SPI_RESET);
// delaysec(1);
//
// gpio_high(SPI_CS);
// delaysec(1);
// gpio_low(SPI_CS);
// delaysec(1);
//
// gpio_high(SPI_SCLK);
// delaysec(1);
// gpio_low(SPI_SCLK);
// delaysec(1);
//
// gpio_high(SPI_MISO);
// delaysec(1);
// gpio_low(SPI_MISO);
// delaysec(1);
//
// gpio_high(SPI_MOSI);
// delaysec(1);
// gpio_low(SPI_MOSI);
// delaysec(1);
// }
//}