Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addition of Daisy V2 Macropad #23915

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions keyboards/draytronics/daisy_v2/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*Copyright 2024 Blake Drayson / Draytronics

Contact info@draytronics.co.uk

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/>.

This code is inspired by and adapted from the code used in the Printed Pad by Noah Beidelman (@noahbei)

It also references the concept of glitching animations from Aleks (@aleksbrgt)

The pixel graphics used here are from a combination of sources;

1. Layer indicators are created by myself and free to use by anyone.
2. "Revengeday", "Cyber Cafe", "Cortex Implant" logos are used with kind permission of OBEY THE SYSTEM.
A collective of Fediverse instances and creatives. https://git.cyberwa.re/obey-the-system.
They are licenced as Non-Commercial and for use by members of the network, with attribution.
3. Key press indicator graphics were commissioned for this project and were designed by the
amazing https://corteximplant.com/@jadedtwin / https://www.jadedtwin.com/
*/
#pragma once

// Config for the STM32F072 to configure the OLED display via I2C.
#define I2C_DRIVER I2CD1
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define I2C1_SCL_PAL_MODE 1
#define I2C1_SDA_PAL_MODE 1
#define I2C1_TIMINGR_PRESC 0x00U
#define I2C1_TIMINGR_SCLDEL 0x03U
#define I2C1_TIMINGR_SDADEL 0x01U
#define I2C1_TIMINGR_SCLH 0x03U
#define I2C1_TIMINGR_SCLL 0x09U

#define OLED_TIMEOUT 300000
122 changes: 122 additions & 0 deletions keyboards/draytronics/daisy_v2/daisy_v2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
/*Copyright 2024 Blake Drayson / Draytronics

Contact info@draytronics.co.uk

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/>.

This code is inspired by and adapted from the code used in the Printed Pad by Noah Beidelman (@noahbei)

It also references the concept of glitching animations from Aleks (@aleksbrgt)

The pixel graphics used here are from a combination of sources;

1. Layer indicators are created by myself and free to use by anyone.
2. "Revengeday", "Cyber Cafe", "Cortex Implant" logos are used with kind permission of OBEY THE SYSTEM.
A collective of Fediverse instances and creatives. https://git.cyberwa.re/obey-the-system.
They are licenced as Non-Commercial and for use by members of the network, with attribution.
3. Key press indicator graphics were commissioned for this project and were designed by the
amazing https://corteximplant.com/@jadedtwin / https://www.jadedtwin.com/
*/
#include "daisy_v2.h"

enum my_keycodes {
ENCODER_PRESS = QK_KB,
};

void board_init(void) {
SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
}

const uint8_t max_layer = 3;
uint8_t current_display_mode = 0;

bool hidden = false;

uint8_t key_pressed = 0;


/* EEPROM Stuct and function to allow init / saving of OLED mode */
typedef union {
uint32_t raw;
struct {
uint8_t oled_mode :8;
};
} kb_config_t;

kb_config_t kb_config;

void eeconfig_init_kb(void) {
//Init initial value and save to EEPROM.
kb_config.raw = 0;
eeconfig_update_kb(kb_config.raw);
}
/* End */

void keyboard_post_init_user(void) {
//Read user value and set current_display_mode.
kb_config.oled_mode = eeconfig_read_kb();
current_display_mode = kb_config.oled_mode;

//This is an adjustment to resolve the issue that occurs when there is a
//static colour underglow the first LED can be a different colour on first init.
rgblight_disable_noeeprom();
rgblight_enable_noeeprom();
}

bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
if (!process_record_user(keycode, record)) {
return false;
}
#ifdef OLED_ENABLE
if (record->event.pressed) {
key_pressed++;
} else {
if (key_pressed)
key_pressed--;
}
#endif
switch(keycode) {
case LT(0, ENCODER_PRESS):
if (record->event.pressed) {
// on tap
if (record->tap.count) {
tap_code(KC_MUTE);
}
#ifdef OLED_ENABLE
// on hold
else {
hidden = false;
current_display_mode = (current_display_mode + 1) % 5;
// When mode changes update EEPROM.
kb_config.oled_mode = current_display_mode;
eeconfig_update_kb(kb_config.raw);
}
#endif
}
return false;
}
return true;
}

#ifdef OLED_ENABLE
uint32_t flash_timer = 0;
bool layer_changed = false;

// when the layer is changed, flash the layer number on the screen
layer_state_t layer_state_set_kb(layer_state_t state) {
flash_timer = timer_read();
layer_changed = true;
return layer_state_set_user(state);
}
#endif
46 changes: 46 additions & 0 deletions keyboards/draytronics/daisy_v2/daisy_v2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*Copyright 2024 Blake Drayson / Draytronics

Contact info@draytronics.co.uk

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/>.

This code is inspired by and adapted from the code used in the Printed Pad by Noah Beidelman (@noahbei)

It also references the concept of glitching animations from Aleks (@aleksbrgt)

The pixel graphics used here are from a combination of sources;

1. Layer indicators are created by myself and free to use by anyone.
2. "Revengeday", "Cyber Cafe", "Cortex Implant" logos are used with kind permission of OBEY THE SYSTEM.
A collective of Fediverse instances and creatives. https://git.cyberwa.re/obey-the-system.
They are licenced as Non-Commercial and for use by members of the network, with attribution.
3. Key press indicator graphics were commissioned for this project and were designed by the
amazing https://corteximplant.com/@jadedtwin / https://www.jadedtwin.com/
*/
#pragma once

#include "quantum.h"

//for oled key press
extern uint8_t key_pressed;

// for changing oled display mode
extern uint8_t current_display_mode;

// for hidden animation toggle
extern bool hidden;

//for determining when the layer is changed and having a timer for how long we flash the layer
extern uint32_t flash_timer;
extern bool layer_changed;
35 changes: 35 additions & 0 deletions keyboards/draytronics/daisy_v2/halconfig.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*Copyright 2024 Blake Drayson / Draytronics

Contact info@draytronics.co.uk

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/>.

This code is inspired by and adapted from the code used in the Printed Pad by Noah Beidelman (@noahbei)

It also references the concept of glitching animations from Aleks (@aleksbrgt)

The pixel graphics used here are from a combination of sources;

1. Layer indicators are created by myself and free to use by anyone.
2. "Revengeday", "Cyber Cafe", "Cortex Implant" logos are used with kind permission of OBEY THE SYSTEM.
A collective of Fediverse instances and creatives. https://git.cyberwa.re/obey-the-system.
They are licenced as Non-Commercial and for use by members of the network, with attribution.
3. Key press indicator graphics were commissioned for this project and were designed by the
amazing https://corteximplant.com/@jadedtwin / https://www.jadedtwin.com/
*/
#pragma once

#define HAL_USE_I2C TRUE

#include_next <halconf.h>
67 changes: 67 additions & 0 deletions keyboards/draytronics/daisy_v2/keyboard.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{
"manufacturer": "Draytronics",
"keyboard_name": "DAISY",
"maintainer": "ghostseven",
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"encoder": {
"enabled": true,
"rotary": [
{"pin_a": "A14", "pin_b": "A15"}
]
},
"features": {
"bootmagic": true,
"encoder": true,
"extrakey": true,
"mousekey": true,
"oled": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["B11", "B10", "B2", "B1"],
"rows": ["A2", "A1", "A0"]
},
"processor": "STM32F072",
"qmk": {
"tap_keycode_delay": 10
},
"rgblight": {
"led_count": 4,
"animations": {
"breathing": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"knight": true,
"christmas": true,
"static_gradient": true,
"alternating": true,
"twinkle": true
}
},
"url": "https://www.draytronics.co.uk/daisy",
"usb": {
"device_version": "2.0.0",
"pid": "0x4441",
"vid": "0x4454"
},
"ws2812": {
"pin": "B12"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2}
]
}
}
}
Loading