#include "action_macro.h"
#include "debug.h"
#include "backlight.h"
-#include "keymap_midi.h"
#include "bootloader.h"
+#include "eeconfig.h"
+
+#ifdef MIDI_ENABLE
+ #include "keymap_midi.h"
+#endif
+
extern keymap_config_t keymap_config;
#include <inttypes.h>
#ifdef AUDIO_ENABLE
#include "audio.h"
-
- float goodbye[][2] = {
- {440.0*pow(2.0,(31)/12.0), 8},
- {440.0*pow(2.0,(24)/12.0), 8},
- {440.0*pow(2.0,(19)/12.0), 12},
- };
-#endif
+#endif /* AUDIO_ENABLE */
static action_t keycode_to_action(uint16_t keycode);
/* converts key to action */
action_t action_for_key(uint8_t layer, keypos_t key)
{
- // 16bit keycodes - important
+ // 16bit keycodes - important
uint16_t keycode = keymap_key_to_keycode(layer, key);
switch (keycode) {
case RESET: ; // RESET is 0x5000, which is why this is here
clear_keyboard();
#ifdef AUDIO_ENABLE
- play_notes(&goodbye, 3, false, 0);
+ stop_all_notes();
+ play_goodbye_tone();
#endif
_delay_ms(250);
#ifdef ATREUS_ASTAR
debug_enable = true;
break;
case 0x5002 ... 0x50FF:
- // MAGIC actions (BOOTMAGIC without the boot)
+ // MAGIC actions (BOOTMAGIC without the boot)
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
keymap_config.swap_lalt_lgui = 0;
keymap_config.swap_ralt_rgui = 0;
}
- eeconfig_write_keymap(keymap_config.raw);
+ eeconfig_update_keymap(keymap_config.raw);
break;
case 0x5100 ... 0x5FFF: ;
// Layer movement shortcuts
// Set default layer
int layer = keycode & 0xFF;
action.code = ACTION_LAYER_TOGGLE(layer);
+ } else if (type == 0x5) {
+ // OSL(layer) - One-shot layer
+ int layer = keycode & 0xFF;
+ action.code = ACTION_LAYER_ONESHOT(layer);
+ } else if (type == 0x6) {
+ // OSM(mod) - One-shot mod
+ int mod = keycode & 0xFF;
+ action.code = ACTION_MODS_ONESHOT(mod);
}
break;
#ifdef MIDI_ENABLE
/* translates key to keycode */
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
- // Read entire word (16bits)
+ // Read entire word (16bits)
return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
}
action_t keymap_func_to_action(uint16_t keycode)
{
- // For FUNC without 8bit limit
+ // For FUNC without 8bit limit
return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
}