summaryrefslogtreecommitdiffstats
path: root/rf_test
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2024-12-10 19:43:38 +0800
committerSadeep Madurange <sadeep@asciimx.com>2024-12-10 19:43:38 +0800
commitb8103d0b0624ca7fbbccfc7d7b2bef560efd3198 (patch)
treec05dea9834bc471cd653c8e9b9049d70338fc4de /rf_test
parent2c039dc4090ed31b46395ca2026a79061f095597 (diff)
downloadsmart-home-b8103d0b0624ca7fbbccfc7d7b2bef560efd3198.tar.gz
Function to start listening.
Diffstat (limited to 'rf_test')
-rw-r--r--rf_test/radio.c9
-rw-r--r--rf_test/radio.h2
-rw-r--r--rf_test/recv.c23
3 files changed, 26 insertions, 8 deletions
diff --git a/rf_test/radio.c b/rf_test/radio.c
index 37cfab9..83bd7c2 100644
--- a/rf_test/radio.c
+++ b/rf_test/radio.c
@@ -96,6 +96,15 @@ uint8_t radio_recv(char *buf, uint8_t n)
return read_len;
}
+void radio_listen(void)
+{
+ write_reg(0x01, (read_reg(0x01) & 0xE3) | 0x10);
+ while ((read_reg(0x27) & 0x80))
+ ;
+
+ // todo: go to low power mode
+}
+
void radio_init(const struct radio_cfg *cfg)
{
SPI_DDR |= (1 << SPI_SS) | (1 << SPI_SCK) | (1 << SPI_MOSI);
diff --git a/rf_test/radio.h b/rf_test/radio.h
index 71e3e8b..c56121b 100644
--- a/rf_test/radio.h
+++ b/rf_test/radio.h
@@ -11,6 +11,8 @@ struct radio_cfg {
void radio_init(const struct radio_cfg *cfg);
+void radio_listen(void);
+
void radio_send(const char *data, uint8_t n);
uint8_t radio_recv(char *buf, uint8_t n);
diff --git a/rf_test/recv.c b/rf_test/recv.c
index 64451a0..47b8b7e 100644
--- a/rf_test/recv.c
+++ b/rf_test/recv.c
@@ -1,11 +1,10 @@
+#include <string.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "radio.h"
#include "serial.h"
-#define PAYLOAD_LEN 13
-
#define RX_PIN PB0
#define RX_DDR DDRB
#define RX_PORT PORTB
@@ -14,21 +13,29 @@
#define RX_PCMSK PCMSK0
#define RX_PCINTVEC PCINT0_vect
+#define MAX_PAYLOAD_LEN 60
+
+static char *s = "hello, world!";
+static uint8_t slen = strlen(s);
+
int main(void)
{
struct radio_cfg cfg;
- cfg.payload_len = PAYLOAD_LEN;
+ cfg.netid = 0x01;
+ cfg.nodeid = 0x01;
+ cfg.payload_len = slen;
RX_DDR &= ~(1 << RX_PIN);
PCICR |= (1 << RX_PCIE);
RX_PCMSK |= (1 << RX_PCINT);
serial_init();
- radio_init(&cfg);
-
sei();
+ radio_init(&cfg);
+ radio_listen();
+
for (;;)
;
@@ -38,13 +45,13 @@ int main(void)
ISR(RX_PCINTVEC)
{
uint8_t i, n;
- char buf[PAYLOAD_LEN + 1];
+ char buf[MAX_PAYLOAD_LEN];
cli();
- serial_write_line("Handling pin change IRQ");
+ serial_write_line("Detected pin change IRQ");
- n = radio_recv(buf, PAYLOAD_LEN);
+ n = radio_recv(buf, MAX_PAYLOAD_LEN - 1);
buf[n] = '\0';
for (i = 0; i < n; i++)