summaryrefslogtreecommitdiffstats
path: root/rf_test
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2024-11-17 13:56:46 +0800
committerSadeep Madurange <sadeep@asciimx.com>2024-11-17 13:56:46 +0800
commit0adb6c825ea194c455a377d0570c596d933f317e (patch)
tree55c03cd326edc4288439b47091552076f3e4cbfd /rf_test
parentb1799c15f551f8703a12a0b899dc5e3fad157bde (diff)
downloadsmart-home-0adb6c825ea194c455a377d0570c596d933f317e.tar.gz
RF tests.
Diffstat (limited to 'rf_test')
-rw-r--r--rf_test/Recv.Makefile43
-rw-r--r--rf_test/Send.Makefile44
-rw-r--r--rf_test/recv.c85
-rw-r--r--rf_test/send.c77
4 files changed, 249 insertions, 0 deletions
diff --git a/rf_test/Recv.Makefile b/rf_test/Recv.Makefile
new file mode 100644
index 0000000..a517111
--- /dev/null
+++ b/rf_test/Recv.Makefile
@@ -0,0 +1,43 @@
+CC = avr-gcc
+MCU = atmega328p
+TARGET = recv
+
+SRC = recv.c
+OBJ = $(SRC:.c=.o)
+
+CFLAGS = -std=gnu99
+CFLAGS += -Os
+CFLAGS += -Wall
+CFLAGS += -mmcu=$(MCU)
+CFLAGS += -DBAUD=115200
+CFLAGS += -DF_CPU=16000000UL
+CFLAGS += -ffunction-sections -fdata-sections
+
+LDFLAGS = -mmcu=$(MCU)
+LDFLAGS += -Wl,--gc-sections
+
+HEX_FLAGS = -O ihex
+HEX_FLAGS += -j .text -j .data
+
+AVRDUDE_FLAGS = -p $(MCU)
+AVRDUDE_FLAGS += -c arduino
+AVRDUDE_FLAGS += -P /dev/cuaU0
+AVRDUDE_FLAGS += -D -U
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+elf: $(OBJ)
+ $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf
+
+hex: elf
+ avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex
+
+upload: hex
+ avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i
+
+.PHONY: clean
+
+clean:
+ rm *.o *.elf *.hex
+
diff --git a/rf_test/Send.Makefile b/rf_test/Send.Makefile
new file mode 100644
index 0000000..f4d4511
--- /dev/null
+++ b/rf_test/Send.Makefile
@@ -0,0 +1,44 @@
+CC = avr-gcc
+MCU = atmega328p
+TARGET = send
+
+SRC = send.c
+OBJ = $(SRC:.c=.o)
+
+CFLAGS = -std=gnu99
+CFLAGS += -Os
+CFLAGS += -Wall
+CFLAGS += -mmcu=$(MCU)
+CFLAGS += -DBAUD=115200
+CFLAGS += -DF_CPU=16000000UL
+CFLAGS += -ffunction-sections -fdata-sections
+
+LDFLAGS = -mmcu=$(MCU)
+LDFLAGS += -Wl,--gc-sections
+
+HEX_FLAGS = -O ihex
+HEX_FLAGS += -j .text -j .data
+
+AVRDUDE_FLAGS = -p $(MCU)
+AVRDUDE_FLAGS += -c arduino
+AVRDUDE_FLAGS += -P /dev/cuaU0
+AVRDUDE_FLAGS += -D -U
+
+%.o: %.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+elf: $(OBJ)
+ $(CC) $(LDFLAGS) $(OBJ) -o $(TARGET).elf
+
+hex: elf
+ avr-objcopy $(HEX_FLAGS) $(TARGET).elf $(TARGET).hex
+
+upload: hex
+ avrdude $(AVRDUDE_FLAGS) flash:w:$(TARGET).hex:i
+
+.PHONY: clean
+
+clean:
+ rm *.o *.elf *.hex
+
+
diff --git a/rf_test/recv.c b/rf_test/recv.c
new file mode 100644
index 0000000..e5764a7
--- /dev/null
+++ b/rf_test/recv.c
@@ -0,0 +1,85 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/setbaud.h>
+
+#define LOCK_LED PD6
+#define UNLOCK_LED PD7
+
+#define SYN 0xA4
+#define ADDR 0x01
+#define LOCK_CMD 0x02
+#define UNLOCK_CMD 0x03
+
+static void usart_init(void)
+{
+ UBRR0H = UBRRH_VALUE;
+ UBRR0L = UBRRL_VALUE;
+#if USE_2X
+ UCSR0A |= (1 << U2X0);
+#else
+ UCSR0A &= ~(1 << U2X0);
+#endif
+ UCSR0B = (1 << TXEN0) | (1 << RXEN0);
+ UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
+}
+
+static unsigned char usart_recv(void)
+{
+ while((UCSR0A & (1 << RXC0)) == 0);
+ return UDR0;
+}
+
+static void led_init(void)
+{
+ DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
+ PORTD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
+}
+
+int main(void)
+{
+ usart_init();
+ led_init();
+
+ sei();
+
+ for (;;)
+ ;
+
+ return 0;
+}
+
+static inline int is_btn_pressed(unsigned char btn)
+{
+ if (!((PIND >> btn) & 0x01)) {
+ _delay_us(2000);
+ return !((PIND >> btn) & 0x01);
+ }
+
+ return 0;
+}
+
+ISR(USART_RX_vect)
+{
+ unsigned char addr, data, chk;
+
+ addr = usart_recv();
+ data = usart_recv();
+ chk = usart_recv();
+
+ if(chk == (addr + data))
+ {
+ if(addr == ADDR)
+ {
+ if(data == LOCK_CMD) {
+ PORTC |= (1 << LOCK_LED);
+ PORTC &= ~(1 << UNLOCK_LED);
+
+ } else if (data == UNLOCK_LED) {
+ PORTC |= (1 << UNLOCK_LED);
+ PORTC &= ~(1 << LOCK_LED);
+ }
+ }
+ }
+
+}
diff --git a/rf_test/send.c b/rf_test/send.c
new file mode 100644
index 0000000..017d67b
--- /dev/null
+++ b/rf_test/send.c
@@ -0,0 +1,77 @@
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/setbaud.h>
+
+#define LOCK_BTN PD6
+#define UNLOCK_BTN PD7
+
+#define SYN 0xA4
+#define ADDR 0x01
+#define LOCK_CMD 0x02
+#define UNLOCK_CMD 0x03
+
+static void usart_init(void)
+{
+ UBRR0H = UBRRH_VALUE;
+ UBRR0L = UBRRL_VALUE;
+#if USE_2X
+ UCSR0A |= (1 << U2X0);
+#else
+ UCSR0A &= ~(1 << U2X0);
+#endif
+ UCSR0B = (1 << TXEN0) | (1 << RXEN0);
+ UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
+}
+
+static void usart_send(unsigned char data)
+{
+ while (!(UCSR0A & (1 << UDRE0)))
+ ;
+ UDR0 = data;
+}
+
+int main(void)
+{
+ usart_init();
+
+ for (;;)
+ ;
+
+ return 0;
+}
+
+static inline int is_btn_pressed(unsigned char btn)
+{
+ if (!((PIND >> btn) & 0x01)) {
+ _delay_us(2000);
+ return !((PIND >> btn) & 0x01);
+ }
+
+ return 0;
+}
+
+static inline void lock(void)
+{
+ usart_send(SYN);
+ usart_send(ADDR);
+ usart_send(LOCK_CMD);
+ usart_send(LOCK_CMD + ADDR);
+}
+
+static inline void unlock(void)
+{
+ usart_send(SYN);
+ usart_send(ADDR);
+ usart_send(UNLOCK_CMD);
+ usart_send(UNLOCK_CMD + ADDR);
+}
+
+ISR(PCINT2_vect)
+{
+ if (is_btn_pressed(LOCK_BTN))
+ lock();
+
+ if (is_btn_pressed(UNLOCK_BTN))
+ unlock();
+}