diff options
Diffstat (limited to 'tmk_core/common')
| -rw-r--r-- | tmk_core/common/avr/timer.c | 36 | ||||
| -rw-r--r-- | tmk_core/common/host_driver.h | 9 | 
2 files changed, 24 insertions, 21 deletions
diff --git a/tmk_core/common/avr/timer.c b/tmk_core/common/avr/timer.c index 292b41c3a..84af44488 100644 --- a/tmk_core/common/avr/timer.c +++ b/tmk_core/common/avr/timer.c @@ -17,6 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include <avr/io.h>  #include <avr/interrupt.h> +#include <util/atomic.h>  #include <stdint.h>  #include "timer_avr.h"  #include "timer.h" @@ -24,7 +25,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  // counter resolution 1ms  // NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }} -volatile uint32_t timer_count = 0; +volatile uint32_t timer_count;  void timer_init(void)  { @@ -52,10 +53,9 @@ void timer_init(void)  inline  void timer_clear(void)  { -    uint8_t sreg = SREG; -    cli(); +  ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {      timer_count = 0; -    SREG = sreg; +  }  }  inline @@ -63,10 +63,9 @@ uint16_t timer_read(void)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return (t & 0xFFFF);  } @@ -76,10 +75,9 @@ uint32_t timer_read32(void)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return t;  } @@ -89,10 +87,9 @@ uint16_t timer_elapsed(uint16_t last)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return TIMER_DIFF_16((t & 0xFFFF), last);  } @@ -102,10 +99,9 @@ uint32_t timer_elapsed32(uint32_t last)  {      uint32_t t; -    uint8_t sreg = SREG; -    cli(); -    t = timer_count; -    SREG = sreg; +    ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { +      t = timer_count; +    }      return TIMER_DIFF_32(t, last);  } diff --git a/tmk_core/common/host_driver.h b/tmk_core/common/host_driver.h index edb9e5dd9..588d1c0be 100644 --- a/tmk_core/common/host_driver.h +++ b/tmk_core/common/host_driver.h @@ -20,7 +20,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include <stdint.h>  #include "report.h" - +#ifdef MIDI_ENABLE +	#include "midi.h" +#endif  typedef struct {      uint8_t (*keyboard_leds)(void); @@ -28,6 +30,11 @@ typedef struct {      void (*send_mouse)(report_mouse_t *);      void (*send_system)(uint16_t);      void (*send_consumer)(uint16_t); +#ifdef MIDI_ENABLE +    void (*usb_send_func)(MidiDevice *, uint16_t, uint8_t, uint8_t, uint8_t); +    void (*usb_get_midi)(MidiDevice *); +    void (*midi_usb_init)(MidiDevice *); +#endif  } host_driver_t;  #endif  | 
