dynamic keymap sanity check (#8181)
[jackhill/qmk/firmware.git] / quantum / fauxclicky.h
CommitLineData
c68e596f
PIN
1/*
2Copyright 2017 Priyadi Iman Nurcahyo
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#ifdef AUDIO_ENABLE
b624f32f 17# error "AUDIO_ENABLE and FAUXCLICKY_ENABLE cannot be both enabled"
c68e596f
PIN
18#endif
19
20#include "musical_notes.h"
8c93c5d9 21#include "stdbool.h"
c68e596f 22
b624f32f 23__attribute__((weak)) float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_D4, 0.25);
24__attribute__((weak)) float fauxclicky_released_note[2] = MUSICAL_NOTE(_C4, 0.125);
25__attribute__((weak)) float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C4, 0.25);
c68e596f 26
8c93c5d9
PIN
27bool fauxclicky_enabled;
28
c68e596f
PIN
29//
30// tempo in BPM
31//
32
33#ifndef FAUXCLICKY_TEMPO
b624f32f 34# define FAUXCLICKY_TEMPO TEMPO_DEFAULT
c68e596f
PIN
35#endif
36
37// beep on press
38#define FAUXCLICKY_ACTION_PRESS fauxclicky_play(fauxclicky_pressed_note)
39
40// beep on release
41#define FAUXCLICKY_ACTION_RELEASE fauxclicky_play(fauxclicky_released_note)
42
43// general purpose beep
44#define FAUXCLICKY_BEEP fauxclicky_play(fauxclicky_beep_note)
45
46// enable
47#define FAUXCLICKY_ON fauxclicky_enabled = true
48
49// disable
b624f32f 50#define FAUXCLICKY_OFF \
51 do { \
52 fauxclicky_enabled = false; \
53 fauxclicky_stop(); \
54 } while (0)
c68e596f 55
8c93c5d9 56// toggle
b624f32f 57#define FAUXCLICKY_TOGGLE \
58 do { \
59 if (fauxclicky_enabled) { \
60 FAUXCLICKY_OFF; \
61 } else { \
62 FAUXCLICKY_ON; \
63 } \
64 } while (0)
8c93c5d9 65
c68e596f
PIN
66//
67// pin configuration
68//
69
70#ifndef FAUXCLICKY_CPU_PRESCALER
b624f32f 71# define FAUXCLICKY_CPU_PRESCALER 8
c68e596f
PIN
72#endif
73
74#ifndef FAUXCLICKY_ENABLE_OUTPUT
b624f32f 75# define FAUXCLICKY_ENABLE_OUTPUT TCCR3A |= _BV(COM3A1)
c68e596f
PIN
76#endif
77
78#ifndef FAUXCLICKY_DISABLE_OUTPUT
b624f32f 79# define FAUXCLICKY_DISABLE_OUTPUT TCCR3A &= ~(_BV(COM3A1) | _BV(COM3A0))
c68e596f
PIN
80#endif
81
82#ifndef FAUXCLICKY_TIMER_PERIOD
b624f32f 83# define FAUXCLICKY_TIMER_PERIOD ICR3
c68e596f
PIN
84#endif
85
86#ifndef FAUXCLICKY_DUTY_CYCLE
b624f32f 87# define FAUXCLICKY_DUTY_CYCLE OCR3A
c68e596f
PIN
88#endif
89
90//
91// definitions
92//
93
94void fauxclicky_init(void);
95void fauxclicky_stop(void);
96void fauxclicky_play(float note[2]);
97void fauxclicky_check(void);