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