led.c \ | led.c \ | ||||
backlight.c \ | backlight.c \ | ||||
ledmap.c \ | ledmap.c \ | ||||
vibration.c | |||||
vibration.c \ | |||||
buzzer.c | |||||
ifdef KEYMAP | ifdef KEYMAP | ||||
SRC := keymap_$(KEYMAP).c $(SRC) | SRC := keymap_$(KEYMAP).c $(SRC) |
led.c \ | led.c \ | ||||
backlight.c \ | backlight.c \ | ||||
ledmap.c \ | ledmap.c \ | ||||
vibration.c | |||||
vibration.c \ | |||||
buzzer.c | |||||
ifdef KEYMAP | ifdef KEYMAP | ||||
SRC := keymap_$(KEYMAP).c $(SRC) | SRC := keymap_$(KEYMAP).c $(SRC) |
/* | |||||
Copyright 2014 Kai Ryu <[email protected]> | |||||
This program is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#include <avr/io.h> | |||||
#include <util/delay.h> | |||||
#include "buzzer.h" | |||||
#include "debug.h" | |||||
void buzzer_init(void) | |||||
{ | |||||
DDRD |= (1<<PD1); | |||||
PORTD &= ~(1<<PD1); | |||||
} | |||||
inline | |||||
void buzzer_on(void) | |||||
{ | |||||
#ifndef EXPERIMENTAL | |||||
PORTD |= (1<<PD1); | |||||
#else | |||||
PORTD |= (1<<PD5); | |||||
#endif | |||||
} | |||||
inline | |||||
void buzzer_off(void) | |||||
{ | |||||
#ifndef EXPERIMENTAL | |||||
PORTD &= ~(1<<PD1); | |||||
#else | |||||
PORTD &= ~(1<<PD5); | |||||
#endif | |||||
} | |||||
void buzzer(uint16_t frequency, uint16_t duration) | |||||
{ | |||||
uint16_t delay = 100000L / (2 * frequency); | |||||
uint16_t period = (uint32_t)frequency * duration / 1000L; | |||||
uint16_t i; | |||||
//dprintf("delay: %d\nperiod: %d\n", delay, period); | |||||
do { | |||||
buzzer_on(); | |||||
i = delay; | |||||
do { | |||||
_delay_us(10); | |||||
} while (--i); | |||||
buzzer_off(); | |||||
i = delay; | |||||
do { | |||||
_delay_us(10); | |||||
} while (--i); | |||||
} while(--period); | |||||
} |
/* | |||||
Copyright 2014 Kai Ryu <[email protected]> | |||||
This program is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef BUZZER_H | |||||
#define BUZZER_H | |||||
#include <stdint.h> | |||||
void buzzer_init(void); | |||||
void buzzer(uint16_t frequency, uint16_t duration); | |||||
#endif |
#include "ps2.h" | #include "ps2.h" | ||||
#endif | #endif | ||||
#include "vibration.h" | #include "vibration.h" | ||||
#include "buzzer.h" | |||||
#include "keymap_common.h" | #include "keymap_common.h" | ||||
keymaps_cache_init(); | keymaps_cache_init(); | ||||
vibration_init(); | vibration_init(); | ||||
buzzer_init(); | |||||
// initialize cols | // initialize cols | ||||
init_cols(); | init_cols(); |
#ifndef PITCHES_H | |||||
#define PITCHES_H | |||||
#define NOTE_B0 31 | |||||
#define NOTE_C1 33 | |||||
#define NOTE_CS1 35 | |||||
#define NOTE_D1 37 | |||||
#define NOTE_DS1 39 | |||||
#define NOTE_E1 41 | |||||
#define NOTE_F1 44 | |||||
#define NOTE_FS1 46 | |||||
#define NOTE_G1 49 | |||||
#define NOTE_GS1 52 | |||||
#define NOTE_A1 55 | |||||
#define NOTE_AS1 58 | |||||
#define NOTE_B1 62 | |||||
#define NOTE_C2 65 | |||||
#define NOTE_CS2 69 | |||||
#define NOTE_D2 73 | |||||
#define NOTE_DS2 78 | |||||
#define NOTE_E2 82 | |||||
#define NOTE_F2 87 | |||||
#define NOTE_FS2 93 | |||||
#define NOTE_G2 98 | |||||
#define NOTE_GS2 104 | |||||
#define NOTE_A2 110 | |||||
#define NOTE_AS2 117 | |||||
#define NOTE_B2 123 | |||||
#define NOTE_C3 131 | |||||
#define NOTE_CS3 139 | |||||
#define NOTE_D3 147 | |||||
#define NOTE_DS3 156 | |||||
#define NOTE_E3 165 | |||||
#define NOTE_F3 175 | |||||
#define NOTE_FS3 185 | |||||
#define NOTE_G3 196 | |||||
#define NOTE_GS3 208 | |||||
#define NOTE_A3 220 | |||||
#define NOTE_AS3 233 | |||||
#define NOTE_B3 247 | |||||
#define NOTE_C4 262 | |||||
#define NOTE_CS4 277 | |||||
#define NOTE_D4 294 | |||||
#define NOTE_DS4 311 | |||||
#define NOTE_E4 330 | |||||
#define NOTE_F4 349 | |||||
#define NOTE_FS4 370 | |||||
#define NOTE_G4 392 | |||||
#define NOTE_GS4 415 | |||||
#define NOTE_A4 440 | |||||
#define NOTE_AS4 466 | |||||
#define NOTE_B4 494 | |||||
#define NOTE_C5 523 | |||||
#define NOTE_CS5 554 | |||||
#define NOTE_D5 587 | |||||
#define NOTE_DS5 622 | |||||
#define NOTE_E5 659 | |||||
#define NOTE_F5 698 | |||||
#define NOTE_FS5 740 | |||||
#define NOTE_G5 784 | |||||
#define NOTE_GS5 831 | |||||
#define NOTE_A5 880 | |||||
#define NOTE_AS5 932 | |||||
#define NOTE_B5 988 | |||||
#define NOTE_C6 1047 | |||||
#define NOTE_CS6 1109 | |||||
#define NOTE_D6 1175 | |||||
#define NOTE_DS6 1245 | |||||
#define NOTE_E6 1319 | |||||
#define NOTE_F6 1397 | |||||
#define NOTE_FS6 1480 | |||||
#define NOTE_G6 1568 | |||||
#define NOTE_GS6 1661 | |||||
#define NOTE_A6 1760 | |||||
#define NOTE_AS6 1865 | |||||
#define NOTE_B6 1976 | |||||
#define NOTE_C7 2093 | |||||
#define NOTE_CS7 2217 | |||||
#define NOTE_D7 2349 | |||||
#define NOTE_DS7 2489 | |||||
#define NOTE_E7 2637 | |||||
#define NOTE_F7 2794 | |||||
#define NOTE_FS7 2960 | |||||
#define NOTE_G7 3136 | |||||
#define NOTE_GS7 3322 | |||||
#define NOTE_A7 3520 | |||||
#define NOTE_AS7 3729 | |||||
#define NOTE_B7 3951 | |||||
#define NOTE_C8 4186 | |||||
#define NOTE_CS8 4435 | |||||
#define NOTE_D8 4699 | |||||
#define NOTE_DS8 4978 | |||||
#endif |
*/ | */ | ||||
#include <stdint.h> | #include <stdint.h> | ||||
#include <util/delay.h> | |||||
#include "action.h" | #include "action.h" | ||||
#include "action_layer.h" | #include "action_layer.h" | ||||
#include "backlight.h" | #include "backlight.h" | ||||
#include "eeconfig.h" | #include "eeconfig.h" | ||||
#include "keymap_common.h" | #include "keymap_common.h" | ||||
#include "vibration.h" | #include "vibration.h" | ||||
#include "pitches.h" | |||||
#include "buzzer.h" | |||||
#include "tentapad.h" | #include "tentapad.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
static const uint16_t tones[] PROGMEM = { | |||||
NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_G5, NOTE_A5, NOTE_B5, | |||||
NOTE_C6, NOTE_D6, NOTE_E6, NOTE_F6, NOTE_G6, NOTE_A6, NOTE_B6, | |||||
NOTE_C7 | |||||
}; | |||||
uint8_t config_mode = 0; | uint8_t config_mode = 0; | ||||
static uint8_t layer = 0; | static uint8_t layer = 0; | ||||
static uint8_t backlight = 0; | static uint8_t backlight = 0; | ||||
backlight = backlight_mode; | backlight = backlight_mode; | ||||
backlight_level(8); | backlight_level(8); | ||||
layer_on(CONFIG_LAYER); | layer_on(CONFIG_LAYER); | ||||
softpwm_led_set(0, 32 * (layer + 1)); | |||||
softpwm_led_set(1, 32 * (backlight + 1)); | |||||
buzzer(pgm_read_word(&tones[0]), 50); | |||||
buzzer(pgm_read_word(&tones[4]), 50); | |||||
buzzer(pgm_read_word(&tones[7]), 50); | |||||
} | } | ||||
void exit_config_mode(void) | void exit_config_mode(void) | ||||
default_layer_set(1UL<<layer); | default_layer_set(1UL<<layer); | ||||
eeconfig_write_default_layer(1UL<<layer); | eeconfig_write_default_layer(1UL<<layer); | ||||
} | } | ||||
buzzer(pgm_read_word(&tones[7]), 50); | |||||
buzzer(pgm_read_word(&tones[4]), 50); | |||||
buzzer(pgm_read_word(&tones[0]), 50); | |||||
} | } | ||||
void switch_layout(void) | void switch_layout(void) | ||||
else { | else { | ||||
layer = (layer + 1) % (last_layer() + 1); | layer = (layer + 1) % (last_layer() + 1); | ||||
} | } | ||||
xprintf("layer: %d\n", layer); | |||||
xprintf("last layer: %d\n", last_layer()); | |||||
dprintf("layer: %d\n", layer); | |||||
dprintf("last layer: %d\n", last_layer()); | |||||
softpwm_led_set(0, 32 * (layer + 1)); | softpwm_led_set(0, 32 * (layer + 1)); | ||||
buzzer(pgm_read_word(&tones[layer]), 50); | |||||
if (layer == 0) { | |||||
_delay_ms(10); | |||||
buzzer(pgm_read_word(&tones[layer]), 50); | |||||
} | |||||
} | } | ||||
void switch_backlight(void) | void switch_backlight(void) | ||||
else { | else { | ||||
backlight = (backlight + 1) % (BACKLIGHT_LEVELS); | backlight = (backlight + 1) % (BACKLIGHT_LEVELS); | ||||
} | } | ||||
xprintf("backlight: %d\n", backlight); | |||||
dprintf("backlight: %d\n", backlight); | |||||
softpwm_led_set(1, 32 * (backlight + 1)); | softpwm_led_set(1, 32 * (backlight + 1)); | ||||
buzzer(pgm_read_word(&tones[7 + backlight]), 50); | |||||
if (backlight == 0) { | |||||
_delay_ms(10); | |||||
buzzer(pgm_read_word(&tones[7 + backlight]), 50); | |||||
} | |||||
} | } |