diff --git a/Makefile b/Makefile index a614297..40904bf 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ $(OBJDUMP) -S $< > $@ size: $(TARGET).elf - $(AVRSIZE) -C --mcu=$(MCU) $(TARGET).elf + $(AVRSIZE) --mcu=$(MCU) $(TARGET).elf clean: rm -f $(TARGET).elf $(TARGET).hex $(TARGET).obj \ diff --git a/avrrfm.c b/avrrfm.c index afcc0bc..b8869f2 100644 --- a/avrrfm.c +++ b/avrrfm.c @@ -90,11 +90,13 @@ printString("Hello Radio!\r\n"); initRadio(868600); - sendByte(0xaa); - sendString("Hello Radio!"); + // sendByte(0xaa); + // sendString("Hello Radio!"); + receiveByte(); while (true) { - // do useful stuff + // sendByte(0xaa); + // _delay_ms(1000); } return 0; diff --git a/rfm69.c b/rfm69.c index 4ee16f1..5a08700 100644 --- a/rfm69.c +++ b/rfm69.c @@ -7,11 +7,6 @@ #include "rfm69.h" -/** - * Sets the module to the given operating mode. - */ -#define set_mode(mode) regWrite(OP_MODE, (regRead(OP_MODE) & ~MASK_MODE) | (mode & MASK_MODE)) - static volatile uint8_t irqFlags1; static volatile uint8_t irqFlags2; @@ -57,6 +52,13 @@ return value; } +/** + * Sets the module to the given operating mode. + */ +static void setMode(uint8_t mode) { + regWrite(OP_MODE, (regRead(OP_MODE) & ~MASK_MODE) | (mode & MASK_MODE)); +} + ISR(INT0_vect) { irqFlags1 = regRead(IRQ_FLAGS1); irqFlags2 = regRead(IRQ_FLAGS2); @@ -110,12 +112,14 @@ printString("Sending payload: "); printByte(payload); - set_mode(MODE_TX); + setMode(MODE_TX); loop_until_bit_is_set(irqFlags2, 3); printString("PacketSent\r\n"); - - set_mode(MODE_SLEEP); + + // better wait a bit before going to standby? + _delay_ms(10); + setMode(MODE_STDBY); } size_t sendString(char *payload) { @@ -133,12 +137,42 @@ spiDes(); printString("Sending payload...\r\n"); - set_mode(MODE_TX); + setMode(MODE_TX); loop_until_bit_is_set(irqFlags2, 3); printString("PacketSent\r\n"); - set_mode(MODE_SLEEP); + _delay_ms(10); + setMode(MODE_STDBY); return len; +} + +uint8_t receiveByte(void) { + + // set variable packet length, turn off CRC for now + regWrite(PCK_CFG1, (regRead(PCK_CFG1) | 0x80) & ~0x10); + + // get "PayloadReady" on DIO0 + regWrite(DIO_MAP1, (regRead(DIO_MAP1) & ~0x80) | 0x40); + + printString("Starting receiving...\r\n"); + setMode(MODE_RX); + + loop_until_bit_is_set(irqFlags2, 2); + printString("PayloadReady\r\n"); + + // can also read FIFO after going to standby + uint8_t len = regRead(FIFO); + uint8_t payload = regRead(FIFO); + + printString("Length: "); + printUint(len); + printString("Payload: "); + printByte(payload); + + _delay_ms(10); + setMode(MODE_STDBY); + + return payload; } \ No newline at end of file diff --git a/rfm69.h b/rfm69.h index a88323f..cf42e2e 100644 --- a/rfm69.h +++ b/rfm69.h @@ -66,5 +66,7 @@ */ size_t sendString(char *payload); +uint8_t receiveByte(void); + #endif /* RFM69_H */