diff --git a/avrrfm.c b/avrrfm.c
index b8869f2..150a4ae 100644
--- a/avrrfm.c
+++ b/avrrfm.c
@@ -90,13 +90,13 @@
printString("Hello Radio!\r\n");
initRadio(868600);
- // sendByte(0xaa);
+ // sendByte(0x7b);
// sendString("Hello Radio!");
- receiveByte();
while (true) {
- // sendByte(0xaa);
+ // transmitByte(0x7b);
// _delay_ms(1000);
+ receiveByte();
}
return 0;
diff --git a/nbproject/Makefile-Custom.mk b/nbproject/Makefile-Custom.mk
index e52435b..15dd811 100644
--- a/nbproject/Makefile-Custom.mk
+++ b/nbproject/Makefile-Custom.mk
@@ -36,8 +36,8 @@
# Object Files
OBJECTFILES= \
${OBJECTDIR}/_ext/48b9ad18/avrrfm.o \
- ${OBJECTDIR}/_ext/48b9ad18/spi.o \
- ${OBJECTDIR}/rfm69.o
+ ${OBJECTDIR}/_ext/48b9ad18/rfm69.o \
+ ${OBJECTDIR}/_ext/48b9ad18/spi.o
# C Compiler Flags
@@ -68,14 +68,14 @@
${MKDIR} -p ${OBJECTDIR}/_ext/48b9ad18
$(COMPILE.c) -g -DBAUD=38400 -DDRIVER=1 -DF_CPU=16000000UL -D__AVR_ATmega328P__ -D__flash=volatile -I. -std=c99 -o ${OBJECTDIR}/_ext/48b9ad18/avrrfm.o /home/dode/dev/avrrfm/avrrfm.c
+${OBJECTDIR}/_ext/48b9ad18/rfm69.o: /home/dode/dev/avrrfm/rfm69.c
+ ${MKDIR} -p ${OBJECTDIR}/_ext/48b9ad18
+ $(COMPILE.c) -g -DBAUD=38400 -DDRIVER=1 -DF_CPU=16000000UL -D__AVR_ATmega328P__ -D__flash=volatile -I. -o ${OBJECTDIR}/_ext/48b9ad18/rfm69.o /home/dode/dev/avrrfm/rfm69.c
+
${OBJECTDIR}/_ext/48b9ad18/spi.o: /home/dode/dev/avrrfm/spi.c
${MKDIR} -p ${OBJECTDIR}/_ext/48b9ad18
$(COMPILE.c) -g -DBAUD=38400 -DDRIVER=1 -DF_CPU=16000000UL -D__AVR_ATmega328P__ -D__flash=volatile -I. -std=c99 -o ${OBJECTDIR}/_ext/48b9ad18/spi.o /home/dode/dev/avrrfm/spi.c
-${OBJECTDIR}/rfm69.o: rfm69.c
- ${MKDIR} -p ${OBJECTDIR}
- $(COMPILE.c) -g -DBAUD=38400 -DDRIVER=1 -DF_CPU=16000000UL -D__AVR_ATmega328P__ -D__flash=volatile -I. -o ${OBJECTDIR}/rfm69.o rfm69.c
-
# Subprojects
.build-subprojects:
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
index 3f32a66..9ba90f3 100644
--- a/nbproject/configurations.xml
+++ b/nbproject/configurations.xml
@@ -43,12 +43,12 @@
-
+ -
+
+ -
+
-
- -
-
- -
-
diff --git a/rfm69.c b/rfm69.c
index 5a08700..3a57708 100644
--- a/rfm69.c
+++ b/rfm69.c
@@ -7,8 +7,8 @@
#include "rfm69.h"
-static volatile uint8_t irqFlags1;
-static volatile uint8_t irqFlags2;
+static volatile uint8_t irqFlags1 = 0;
+static volatile uint8_t irqFlags2 = 0;
/**
* Selects the radio to talk to via SPI.
@@ -59,6 +59,14 @@
regWrite(OP_MODE, (regRead(OP_MODE) & ~MASK_MODE) | (mode & MASK_MODE));
}
+/**
+ * Clears the IRQ flags read from the module.
+ */
+static void clearIrqFlags(void) {
+ irqFlags1 = 0;
+ irqFlags2 = 0;
+}
+
ISR(INT0_vect) {
irqFlags1 = regRead(IRQ_FLAGS1);
irqFlags2 = regRead(IRQ_FLAGS2);
@@ -74,7 +82,13 @@
_delay_ms(5);
+ // turn off CLKOUT
+ regWrite(DIO_MAP2, 0x07);
+
setFreq(kHz);
+ // regWrite(NODE_ADDR, 0x42);
+
+ // add initialization so both modules actually talk to each other :-)
}
void setFreq(uint32_t freq) {
@@ -85,48 +99,62 @@
regWrite(FRF_LSB, freq >> 0);
}
-void sendByte(uint8_t payload) {
- uint8_t opMode = regRead(OP_MODE);
- printString("OpMode: ");
- printByte(opMode);
-
- /*
- regWrite(NODE_ADDR, 0xaa);
- uint8_t nodeAddr = regRead(NODE_ADDR);
- printString("NodeAddr: ");
- printByte(nodeAddr);
- */
-
+void transmitByte(uint8_t payload) {
// set variable packet length, turn off CRC for now
- regWrite(PCK_CFG1, (regRead(PCK_CFG1) | 0x80) & ~0x10);
+ regWrite(PCK_CFG1, 0x80);
// set TX start condition to "at least one byte in FIFO"
- regWrite(FIFO_THRESH, regRead(FIFO_THRESH) | 0x80);
+ regWrite(FIFO_THRESH, 0x8f);
- regWrite(FIFO, 1); // packet length
- regWrite(FIFO, payload); // 1 byte payload
+ spiSel();
+ transmit(FIFO | 0x80);
+ transmit(2); // TODO includes address?
+ transmit(0x42);
+ transmit(payload);
+ spiDes();
// get "PacketSent" on DIO0 (default)
- regWrite(DIO_MAP1, regRead(DIO_MAP1) & ~0xc0);
-
- printString("Sending payload: ");
- printByte(payload);
+ regWrite(DIO_MAP1, 0x00);
setMode(MODE_TX);
loop_until_bit_is_set(irqFlags2, 3);
- printString("PacketSent\r\n");
+ clearIrqFlags();
- // better wait a bit before going to standby?
- _delay_ms(10);
setMode(MODE_STDBY);
+
+ printString("PacketSent\r\n");
}
-size_t sendString(char *payload) {
+uint8_t receiveByte(void) {
+ // set variable packet length, turn off CRC for now, address filtering
+ regWrite(PCK_CFG1, 0x84);
+ // regWrite(PCK_CFG1, 0x80);
+
+ // get "PayloadReady" on DIO0
+ regWrite(DIO_MAP1, 0x40);
+
+ printString("Starting receiving...\r\n");
+ setMode(MODE_RX);
+
+ loop_until_bit_is_set(irqFlags2, 2);
+ clearIrqFlags();
+
+ setMode(MODE_STDBY);
+
+ // can also read FIFO after going to standby
+ printByte(regRead(FIFO));
+ printByte(regRead(FIFO));
+ printByte(regRead(FIFO));
+
+ return 0;
+}
+
+size_t transmitString(char *payload) {
size_t len = fmin(strlen(payload), 64);
- regWrite(PCK_CFG1, (regRead(PCK_CFG1) | 0x80) & ~0x10);
- regWrite(FIFO_THRESH, regRead(FIFO_THRESH) | 0x80);
+ regWrite(PCK_CFG1, 0x80);
+ regWrite(FIFO_THRESH, 0x8f);
spiSel();
transmit(FIFO);
@@ -136,43 +164,17 @@
}
spiDes();
+ // get "PacketSent" on DIO0 (default)
+ regWrite(DIO_MAP1, 0x00);
+
printString("Sending payload...\r\n");
setMode(MODE_TX);
loop_until_bit_is_set(irqFlags2, 3);
+ clearIrqFlags();
printString("PacketSent\r\n");
- _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 cf42e2e..e3370c0 100644
--- a/rfm69.h
+++ b/rfm69.h
@@ -30,9 +30,10 @@
#define IRQ_FLAGS2 0x28
#define PCK_CFG1 0x37
#define NODE_ADDR 0x39
+#define BROAD_ADDR 0x3a
#define FIFO_THRESH 0x3c
-#define MASK_MODE 0x0e
+#define MASK_MODE 0x1c
#define MODE_SLEEP 0x00
#define MODE_STDBY 0x04
@@ -55,7 +56,14 @@
/**
* Transmits one byte and prints some info.
*/
-void sendByte(uint8_t payload);
+void transmitByte(uint8_t payload);
+
+/**
+ * Waits for one byte received and returns it.
+ *
+ * @return received byte
+ */
+uint8_t receiveByte(void);
/**
* Transmits up to 64 characters of the given string, excluding the
@@ -64,9 +72,7 @@
* @param payload string to be sent
* @return characters sent
*/
-size_t sendString(char *payload);
-
-uint8_t receiveByte(void);
+size_t transmitString(char *payload);
#endif /* RFM69_H */