Skip to content

Commit

Permalink
adds haven65 pcbs to the repo
Browse files Browse the repository at this point in the history
adds haven65 pcbs to the repo
includes
haven65 solder
haven65 hotswap
  • Loading branch information
frankBTHID committed Mar 12, 2023
1 parent 15fa4d0 commit f75dd95
Show file tree
Hide file tree
Showing 15 changed files with 778 additions and 1 deletion.
10 changes: 10 additions & 0 deletions keyboards/ah/haven65_hotswap/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Copyright 2023 Freather
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once


#define EECONFIG_USER_DATA_SIZE 4

// generated by KBFirmware JSON to QMK Parser
// https://noroadsleft.github.io/kbf_qmk_converter/
129 changes: 129 additions & 0 deletions keyboards/ah/haven65_hotswap/info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
"keyboard_name": "HAVEN65_HOTSWAP",
"manufacturer": "Atelier_Haven",
"url": "https://keyspensory.store/products/gb-haven65-by-atelier-haven?_pos=1&_sid=5e7dcb0e4&_ss=r&variant=41788985868461",
"maintainer": "Freather",
"usb": {
"vid": "0x4446",
"pid": "0x4665",
"device_version": "1.0.0"
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
"matrix_pins": {
"rows": ["B5", "B6", "C6", "F1", "D6"],
"cols": ["F7", "F6", "F5", "F4", "F0", "B4", "D0", "D1", "D2", "D3", "D5", "B0", "B1", "B2", "B3"]
},
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"console": false,
"command": true,
"nkro": true,
"backlight": false,
"rgblight": true,
"audio": false,
"key_lock": false
},
"rgblight": {
"pin": "C7",
"led_count": 1,
"hue_steps": 8,
"saturation_steps": 8,
"brightness_steps": 8,
"max_brightness": 255,
"sleep": true,
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"rgb_test": true,
"snake": true,
"static_gradient": true,
"twinkle": true
}
},
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "Esc", "matrix":[0,0],"x": 0, "y": 0 },
{ "label": "1", "matrix":[0,1],"x": 1, "y": 0 },
{ "label": "2", "matrix":[0,2],"x": 2, "y": 0 },
{ "label": "3", "matrix":[0,3],"x": 3, "y": 0 },
{ "label": "4", "matrix":[0,4],"x": 4, "y": 0 },
{ "label": "5", "matrix":[0,5],"x": 5, "y": 0 },
{ "label": "6", "matrix":[0,6],"x": 6, "y": 0 },
{ "label": "7", "matrix":[0,7],"x": 7, "y": 0 },
{ "label": "8", "matrix":[0,8],"x": 8, "y": 0 },
{ "label": "9", "matrix":[0,9],"x": 9, "y": 0 },
{ "label": "0", "matrix":[0,10],"x": 10, "y": 0 },
{ "label": "-", "matrix":[0,11],"x": 11, "y": 0 },
{ "label": "=", "matrix":[0,12],"x": 12, "y": 0 },
{ "label": "backspace", "matrix":[0,13],"x": 13, "y": 0, "w": 2 },
{ "label": "home", "matrix":[0,14],"x": 15, "y": 0 },

{ "label": "tab", "matrix":[1,0],"x": 0, "y": 1, "w": 1.5 },
{ "label": "q", "matrix":[1,1],"x": 1.5, "y": 1 },
{ "label": "w", "matrix":[1,2],"x": 2.5, "y": 1 },
{ "label": "e", "matrix":[1,3],"x": 3.5, "y": 1 },
{ "label": "r", "matrix":[1,4],"x": 4.5, "y": 1 },
{ "label": "t", "matrix":[1,5],"x": 5.5, "y": 1 },
{ "label": "y", "matrix":[1,6],"x": 6.5, "y": 1 },
{ "label": "u", "matrix":[1,7],"x": 7.5, "y": 1 },
{ "label": "i", "matrix":[1,8],"x": 8.5, "y": 1 },
{ "label": "o", "matrix":[1,9],"x": 9.5, "y": 1 },
{ "label": "p", "matrix":[1,10],"x": 10.5, "y": 1 },
{ "label": "{", "matrix":[1,11],"x": 11.5, "y": 1 },
{ "label": "}", "matrix":[1,12],"x": 12.5, "y": 1 },
{ "label": "|", "matrix":[2,13],"x": 13.5, "y": 1, "w": 1.5 },
{ "label": "insert", "matrix":[1,14],"x": 15, "y": 1 },

{ "label": "capslock", "matrix":[2,0],"x": 0, "y": 2, "w": 1.75 },
{ "label": "a", "matrix":[2,1],"x": 1.75, "y": 2 },
{ "label": "s", "matrix":[2,2],"x": 2.75, "y": 2 },
{ "label": "d", "matrix":[2,3],"x": 3.75, "y": 2 },
{ "label": "f", "matrix":[2,4],"x": 4.75, "y": 2 },
{ "label": "g", "matrix":[2,5],"x": 5.75, "y": 2 },
{ "label": "h", "matrix":[2,6],"x": 6.75, "y": 2 },
{ "label": "j", "matrix":[2,7],"x": 7.75, "y": 2 },
{ "label": "k", "matrix":[2,8],"x": 8.75, "y": 2 },
{ "label": "l", "matrix":[2,9],"x": 9.75, "y": 2 },
{ "label": ";", "matrix":[2,10],"x": 10.75, "y": 2 },
{ "label": "'", "matrix":[2,11],"x": 11.75, "y": 2 },
{ "label": "enter", "matrix":[2,12],"x": 12.75, "y": 2, "w": 2.25 },
{ "label": "delete", "matrix":[2,14],"x": 15, "y": 2 },

{ "label": "leftshift", "matrix":[3,0],"x": 0, "y": 3, "w": 2.25 },
{ "label": "z", "matrix":[3,2],"x": 2.25, "y": 3 },
{ "label": "x", "matrix":[3,3],"x": 3.25, "y": 3 },
{ "label": "c", "matrix":[3,4],"x": 4.25, "y": 3 },
{ "label": "v", "matrix":[3,5],"x": 5.25, "y": 3 },
{ "label": "b", "matrix":[3,6],"x": 6.25, "y": 3 },
{ "label": "n", "matrix":[3,7],"x": 7.25, "y": 3 },
{ "label": "m", "matrix":[3,8],"x": 8.25, "y": 3 },
{ "label": ",", "matrix":[3,9],"x": 9.25, "y": 3 },
{ "label": ".", "matrix":[3,10],"x": 10.25, "y": 3 },
{ "label": "/", "matrix":[3,11],"x": 11.25, "y": 3 },
{ "label": "rightshift", "matrix":[3,12],"x": 12.25, "y": 3, "w": 1.75 },
{ "label": "up", "matrix":[3,13],"x": 14, "y": 3 },
{ "label": "end", "matrix":[3,14],"x": 15, "y": 3 },

{ "label": "lctrl", "matrix":[4,0],"x": 0, "y": 4, "w": 1.25 },
{ "label": "lwin", "matrix":[4,1],"x": 1.25, "y": 4, "w": 1.25 },
{ "label": "lalt", "matrix":[4,2],"x": 2.5, "y": 4, "w": 1.25 },
{ "label": "space", "matrix":[4,6],"x": 3.75, "y": 4, "w": 6.25 },
{ "label": "ralt", "matrix":[4,9],"x": 10, "y": 4, "w": 1.25 },
{ "label": "MO(1)", "matrix":[4,10],"x": 11.25, "y": 4, "w": 1.25 },
{ "label": "left", "matrix":[4,11],"x": 13, "y": 4 },
{ "label": "down", "matrix":[4,12],"x": 14, "y": 4 },
{ "label": "right", "matrix":[4,13],"x": 15, "y": 4 }
]
}
},
"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
}
22 changes: 22 additions & 0 deletions keyboards/ah/haven65_hotswap/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2023 Freather
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),

[1] = LAYOUT(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
205 changes: 205 additions & 0 deletions keyboards/ah/haven65_hotswap/keymaps/via/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
// Copyright 2023 Freather
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BACKSPACE, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),

[1] = LAYOUT(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

//indicator variables
bool caps_is_active = false;
int mode = 5;

//to change color if the caps lock is on
void freather_set_color(bool capslock_is_on);
bool process_record_user(uint16_t keycode, keyrecord_t *record);



// Declaring a _freather_config_t struct that will store data
typedef struct _indicator_config_t {
uint8_t h;
uint8_t s;
uint8_t v;
bool enabled;
} indicator_config;

// Board memory layout
typedef struct _freather_config_t {
indicator_config caps;
} freather_config;



// Check if the size of the reserved persistent memory is the same as the size of struct freather_config
_Static_assert(sizeof(indicator_config) == EECONFIG_USER_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data");

// Declaring a new variable freather of type freather_config
freather_config freather;

// Declaring enums for VIA config menu
enum via_freather_enums {

id_freather_indicator_enabled = 1,
id_freather_indicator_color = 2

};

// Initializing persistent memory configuration: default values are declared and stored in PMEM
void eeconfig_init_user(void) {
// Default values
freather.caps.h = 100;
freather.caps.s = 100;
freather.caps.v = 100;
freather.caps.enabled = true;
rgblight_set_effect_range(0,1);
// Write default value to EEPROM now
eeconfig_update_user_datablock(&freather);
}

// On Keyboard startup
void keyboard_post_init_user(void) {
// Read custom menu variables from memory
eeconfig_read_user_datablock(&freather);
}

// Handle the data received by the keyboard from the VIA menus
void freather_config_set_value(uint8_t *data) {
// data = [ value_id, value_data ]
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);

switch (*value_id) {
case id_freather_indicator_enabled: {
freather.caps.enabled = value_data[0];
rgblight_sethsv_at(0,0,0,0);
break;
}
case id_freather_indicator_color: {
freather.caps.h = value_data[0];
freather.caps.s = value_data[1];
freather_set_color(true);
break;
}
}
}

// Handle the data sent by the keyboard to the VIA menus
void freather_config_get_value(uint8_t *data) {
// data = [ value_id, value_data ]
uint8_t *value_id = &(data[0]);
uint8_t *value_data = &(data[1]);

switch (*value_id) {
case id_freather_indicator_enabled: {
value_data[0] = freather.caps.enabled;
break;
}
case id_freather_indicator_color: {
value_data[0] = freather.caps.h;
value_data[1] = freather.caps.s;
break;
}
}
}

//save data to memory
void freather_config_save(void) {
eeconfig_update_user_datablock(&freather);
}



void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
// data = [ command_id, channel_id, value_id, value_data ]
uint8_t *command_id = &(data[0]);
uint8_t *channel_id = &(data[1]);
uint8_t *value_id_and_data = &(data[2]);

if (*channel_id == id_custom_channel) {
switch (*command_id) {
case id_custom_set_value: {
freather_config_set_value(value_id_and_data);
break;
}
case id_custom_get_value: {
freather_config_get_value(value_id_and_data);
break;
}
case id_custom_save: {
freather_config_save();
break;
}
default: {
// Unhandled message.
*command_id = id_unhandled;
break;
}
}
return;
}

*command_id = id_unhandled;
}


void freather_set_color(bool capslock_is_on)
{
if(capslock_is_on == true && freather.caps.enabled == true)
{
rgblight_sethsv_range(freather.caps.h, freather.caps.s, freather.caps.v,0,1); //0 is the location of caps light indicator
}
else{
rgblight_sethsv_at(0,0,0,0); //if is off, then turn off the caps lock indicator
}
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {

switch (keycode) {
case KC_CAPS:
if (record->event.pressed && caps_is_active == false &&freather.caps.enabled == true) { //turn on caps
caps_is_active = true;
mode = rgblight_get_mode();
rgblight_mode(1);
rgblight_sethsv_range(freather.caps.h, freather.caps.s, freather.caps.v, 0, 1); //needs a way to override the effect
return true;
}else if(record->event.pressed && caps_is_active == true ){
rgblight_set_effect_range(0,1);
rgblight_mode(mode);

caps_is_active = false;
}
default:
return true; // Process all other keycodes normally
}
}
1 change: 1 addition & 0 deletions keyboards/ah/haven65_hotswap/keymaps/via/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VIA_ENABLE = yes
21 changes: 21 additions & 0 deletions keyboards/ah/haven65_hotswap/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#Haven65 Hotswap

![haven 65 hotswap](https://i.imgur.com/M1l1DaO.png)


* Keyboard Maintainer: [Freather](https://github.com/CMMS-Freather)
* Hardware Supported: PCB, Atmega32u4

Make example for this keyboard (after setting up your build environment):

make ah/haven65_hotswap:default

Flashing example for this keyboard:

make ah/haven65_hotswap:default:flash

##Bootloader Atmel-DFU

For reset instruction, use the physical reset button on the back of the keyboard to enter bootloader mode

See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
1 change: 1 addition & 0 deletions keyboards/ah/haven65_hotswap/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# This file intentionally left blank
Loading

0 comments on commit f75dd95

Please sign in to comment.