diff --git a/avrrfm.c b/avrrfm.c index 3fb5bd4..afcc0bc 100644 --- a/avrrfm.c +++ b/avrrfm.c @@ -91,6 +91,7 @@ initRadio(868600); sendByte(0xaa); + sendString("Hello Radio!"); while (true) { // do useful stuff diff --git a/rfm69.c b/rfm69.c index a6f8a75..4ee16f1 100644 --- a/rfm69.c +++ b/rfm69.c @@ -10,7 +10,7 @@ /** * Sets the module to the given operating mode. */ -#define set_mode(mode) regWrite(OP_MODE, (opMode & ~MASK_MODE) | (mode & MASK_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; @@ -116,4 +116,29 @@ printString("PacketSent\r\n"); set_mode(MODE_SLEEP); -} \ No newline at end of file +} + +size_t sendString(char *payload) { + size_t len = fmin(strlen(payload), 64); + + regWrite(PCK_CFG1, (regRead(PCK_CFG1) | 0x80) & ~0x10); + regWrite(FIFO_THRESH, regRead(FIFO_THRESH) | 0x80); + + spiSel(); + transmit(FIFO); + transmit(len); + for (size_t i = 0; i < len; i++) { + transmit(payload[i]); + } + spiDes(); + + printString("Sending payload...\r\n"); + set_mode(MODE_TX); + + loop_until_bit_is_set(irqFlags2, 3); + printString("PacketSent\r\n"); + + set_mode(MODE_SLEEP); + + return len; +} \ No newline at end of file diff --git a/rfm69.h b/rfm69.h index 719d47d..a88323f 100644 --- a/rfm69.h +++ b/rfm69.h @@ -8,6 +8,8 @@ #ifndef RFM69_H #define RFM69_H +#include +#include #include #include "rfm69.h" @@ -53,7 +55,16 @@ /** * Transmits one byte and prints some info. */ -void sendByte(uint8_t byte); +void sendByte(uint8_t payload); + +/** + * Transmits up to 64 characters of the given string, excluding the + * terminal '\\0' character. + * + * @param payload string to be sent + * @return characters sent + */ +size_t sendString(char *payload); #endif /* RFM69_H */