summaryrefslogtreecommitdiffstats
path: root/rf_test/recv.c
diff options
context:
space:
mode:
Diffstat (limited to 'rf_test/recv.c')
-rw-r--r--rf_test/recv.c87
1 files changed, 37 insertions, 50 deletions
diff --git a/rf_test/recv.c b/rf_test/recv.c
index a908bbe..9cb3daa 100644
--- a/rf_test/recv.c
+++ b/rf_test/recv.c
@@ -1,80 +1,67 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
-#include <util/setbaud.h>
#define TEST_LED PB1
#define LOCK_LED PD6
#define UNLOCK_LED PD7
-#define SYN 0xA1
-#define FIN 0xB2
-#define LOCK 0xC3
-#define UNLOCK 0xD3
+#define SYN 0xAA
+#define LOCK 0xB5
+#define UNLOCK 0xAE
-static void usart_init(void)
-{
- UBRR0H = UBRRH_VALUE;
- UBRR0L = UBRRL_VALUE;
- UCSR0B = (1 << RXEN0) | (1 << RXCIE0);
- UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
-}
+#define SIGPIN PB3
+#define SIGLEN 200
+
+static volatile unsigned char data = 0;
-static unsigned char usart_recv(void)
+static inline void led_init(void)
{
- while((UCSR0A & (1 << RXC0)) == 0);
- return UDR0;
+ DDRB |= (1 << TEST_LED);
+ DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
}
-static void led_init(void)
+static inline void pcint2_init(void)
{
- DDRB |= (1 << TEST_LED);
- DDRD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
- PORTD |= (1 << LOCK_LED) | (1 << UNLOCK_LED);
+ PCICR |= (1 << PCIE2);
+ PCMSK2 |= (1 << PCINT2);
}
int main(void)
{
- usart_init();
+ DDRB &= ~(1 << SIGPIN);
+ PORTB &= ~(1 << SIGPIN);
+
led_init();
+ pcint2_init();
sei();
- for (;;)
- ;
+ for (;;) {
+ if (data == LOCK) {
+ PORTD |= (1 << LOCK_LED);
+ PORTD &= ~(1 << UNLOCK_LED);
+ }
+
+ if (data == UNLOCK) {
+ PORTD &= ~(1 << LOCK_LED);
+ PORTD |= (1 << UNLOCK_LED);
+ }
+
+ data = 0;
+ _delay_ms(100);
+ }
return 0;
}
-ISR(USART_RX_vect)
+ISR(PCINT2_vect)
{
- unsigned char data, buf;
-
- data = 0;
- buf = usart_recv();
-
- if (buf == SYN) {
- buf = usart_recv();
-
- while (buf != FIN) {
- buf = usart_recv();
-
- if (buf == SYN) {
- PORTB ^= (1 << TEST_LED);
- return;
- }
-
- if (buf != FIN)
- data = buf;
- }
+ int n, bit;
- if(data == LOCK) {
- PORTD |= (1 << LOCK_LED);
- PORTD &= ~(1 << UNLOCK_LED);
- } else if (data == UNLOCK) {
- PORTD |= (1 << UNLOCK_LED);
- PORTD &= ~(1 << LOCK_LED);
- }
+ for (n = 7; n >= 0; n--) {
+ _delay_ms(SIGLEN);
+ bit = ((PINB >> SIGPIN) & 1);
+ data = bit == 1 ? (data | (1 << n)) : (data & ~(1 << n));
}
-
}