]> www.fi.muni.cz Git - bike-lights.git/blobdiff - firmware/gpio.c
firmware: emulate higher resolution of PWM
[bike-lights.git] / firmware / gpio.c
index 2ee32109d754360434afc6ec0ed3d5c3a8269592..8e39bd29923359eb745946711bbb42a07bb21757 100644 (file)
@@ -4,24 +4,40 @@
 
 void gpio_init()
 {
-       DDRB |= _BV(PB2) | _BV(PB4);
-       PORTB &=~ (_BV(PB2) | _BV(PB4));
+       DDRB |=    _BV(PB0) | _BV(PB2) | _BV(PB4) | _BV(PB6);
+       PORTB &=~ (_BV(PB0) | _BV(PB2) | _BV(PB4) | _BV(PB6));
 
-       gpio_set(GPIO_LED2, 1);
+       gpio_set(1, 1);
 }
 
-void gpio_set(unsigned char n, unsigned char on)
+void susp_gpio()
 {
-       unsigned char bits = 0;
-       switch(n) {
-       case GPIO_LED1: bits = _BV(PB4); break;
-       case GPIO_LED2: bits = _BV(PB2); break;
-       }
+       DDRB  &= ~(_BV(PB0) | _BV(PB2) | _BV(PB4) | _BV(PB6));
+       PORTB &= ~(_BV(PB0) | _BV(PB2) | _BV(PB4) | _BV(PB6));
+}
+
+void gpio_before_poweroff()
+{
+       DDRB |= _BV(PB2);
+       PORTB |= _BV(PB2);
+}
 
+void gpio_set(unsigned char n, unsigned char on)
+{
        if (on) {
-               PORTB |= bits;
+               switch(n) {
+               case 0: PORTB |= _BV(PB0); break;
+               case 1: PORTB |= _BV(PB2); break;
+               case 2: PORTB |= _BV(PB4); break;
+               case 3: PORTB |= _BV(PB6); break;
+               }
        } else {
-               PORTB &= ~bits;
+               switch(n) {
+               case 0: PORTB &= ~_BV(PB0); break;
+               case 1: PORTB &= ~_BV(PB2); break;
+               case 2: PORTB &= ~_BV(PB4); break;
+               case 3: PORTB &= ~_BV(PB6); break;
+               }
        }
 }