summaryrefslogtreecommitdiffstats
path: root/rf_test/recv.c
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/recv.c
parentb1799c15f551f8703a12a0b899dc5e3fad157bde (diff)
downloadsmart-home-0adb6c825ea194c455a377d0570c596d933f317e.tar.gz
RF tests.
Diffstat (limited to 'rf_test/recv.c')
-rw-r--r--rf_test/recv.c85
1 files changed, 85 insertions, 0 deletions
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);
+ }
+ }
+ }
+
+}