@@ -54,7 +54,8 @@ SRC = keymap_common.c \ | |||
led.c \ | |||
backlight.c \ | |||
ledmap.c \ | |||
vibration.c | |||
vibration.c \ | |||
buzzer.c | |||
ifdef KEYMAP | |||
SRC := keymap_$(KEYMAP).c $(SRC) |
@@ -54,7 +54,8 @@ SRC = keymap_common.c \ | |||
led.c \ | |||
backlight.c \ | |||
ledmap.c \ | |||
vibration.c | |||
vibration.c \ | |||
buzzer.c | |||
ifdef KEYMAP | |||
SRC := keymap_$(KEYMAP).c $(SRC) |
@@ -0,0 +1,67 @@ | |||
/* | |||
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); | |||
} |
@@ -0,0 +1,26 @@ | |||
/* | |||
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 |
@@ -31,6 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include "ps2.h" | |||
#endif | |||
#include "vibration.h" | |||
#include "buzzer.h" | |||
#include "keymap_common.h" | |||
@@ -82,6 +83,7 @@ void matrix_init(void) | |||
keymaps_cache_init(); | |||
vibration_init(); | |||
buzzer_init(); | |||
// initialize cols | |||
init_cols(); |
@@ -0,0 +1,94 @@ | |||
#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 |
@@ -16,6 +16,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
*/ | |||
#include <stdint.h> | |||
#include <util/delay.h> | |||
#include "action.h" | |||
#include "action_layer.h" | |||
#include "backlight.h" | |||
@@ -23,9 +24,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include "eeconfig.h" | |||
#include "keymap_common.h" | |||
#include "vibration.h" | |||
#include "pitches.h" | |||
#include "buzzer.h" | |||
#include "tentapad.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; | |||
static uint8_t layer = 0; | |||
static uint8_t backlight = 0; | |||
@@ -113,6 +122,11 @@ void enter_config_mode(void) | |||
backlight = backlight_mode; | |||
backlight_level(8); | |||
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) | |||
@@ -124,6 +138,9 @@ void exit_config_mode(void) | |||
default_layer_set(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) | |||
@@ -135,9 +152,14 @@ void switch_layout(void) | |||
else { | |||
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)); | |||
buzzer(pgm_read_word(&tones[layer]), 50); | |||
if (layer == 0) { | |||
_delay_ms(10); | |||
buzzer(pgm_read_word(&tones[layer]), 50); | |||
} | |||
} | |||
void switch_backlight(void) | |||
@@ -149,6 +171,11 @@ void switch_backlight(void) | |||
else { | |||
backlight = (backlight + 1) % (BACKLIGHT_LEVELS); | |||
} | |||
xprintf("backlight: %d\n", backlight); | |||
dprintf("backlight: %d\n", backlight); | |||
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); | |||
} | |||
} |