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

E-Yooso a68 support #19

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
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
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ You can very easily end up with a bricked device if the written firmware can't j
| Keyboard | MCU | ISP | USB | Wireless | Details |
| -------- | --- | --- | --- | -------- | ------- |
| [NuPhy Air60 v1](https://nuphy.com/products/air60) | SH68F90A / BYK916 | ✅ | ✅ | TBD | [Details](docs/keyboards/nuphy-air60.md) |
| E-YOOSO Z11 | SH68F90A / BYK901 | ✅ | ✅ | N/A | [Details](docs/keyboards/nuphy-air60.md) |
| E-YOOSO Z11 | SH68F90A / BYK901 | ✅ | ❌ | N/A | [Details](docs/keyboards/eyooso-z11.md) |
| E-YOOSO A68 | SH68F90A / BYK901 | ✅ | ❌ | N/A | [Details](docs/keyboards/eyooso-a68.md) |

## Developing

Expand Down
17 changes: 17 additions & 0 deletions docs/keyboards/eyooso-a68.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# E-YOOSO A68

## Specs

- MCU: BYK901(-0997A) (SH68F90A)
- Backlight: Addressable RGB LEDs (RGB)
- Indicators: Single CAPS_LOCK LED
- Wireless: None

## Pictures
TODO

## SMK Supported Features
TODO

## Code Options
TODO
101 changes: 101 additions & 0 deletions src/keyboards/eyooso-a68/kbdef.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#ifndef KBDEF_H
#define KBDEF_H

#include "sh68f90a.h"

#define MATRIX_ROWS 5
#define MATRIX_COLS 16

// Row Pin Bits
#define KB_R0_P7_1 _P7_1
#define KB_R1_P7_2 _P7_2
#define KB_R2_P7_3 _P7_3
#define KB_R3_P5_3 _P5_3
#define KB_R4_P5_4 _P5_4

// Row Pins
#define KB_R0 P7_1
#define KB_R1 P7_2
#define KB_R2 P7_3
#define KB_R3 P5_3
#define KB_R4 P5_4

// Column Pin Bits
#define KB_C0_P1_4 _P1_4
#define KB_C1_P1_5 _P1_5
#define KB_C2_P2_0 _P2_0
#define KB_C3_P2_1 _P2_1
#define KB_C4_P2_2 _P2_2
#define KB_C5_P2_3 _P2_3
#define KB_C6_P2_4 _P2_4
#define KB_C7_P2_5 _P2_5
#define KB_C8_P3_0 _P3_0
#define KB_C9_P3_1 _P3_1
#define KB_C10_P3_2 _P3_2
#define KB_C11_P3_3 _P3_3
#define KB_C12_P3_4 _P3_4
#define KB_C13_P3_5 _P3_5

#define KB14_P3_5 ???
#define KB15_P3_5 ???

// Column Pins
#define KB_C0 P1_4
#define KB_C1 P1_5
#define KB_C2 P2_0
#define KB_C3 P2_1
#define KB_C4 P2_2
#define KB_C5 P2_3
#define KB_C6 P2_4
#define KB_C7 P2_5
#define KB_C8 P3_0
#define KB_C9 P3_1
#define KB_C10 P3_2
#define KB_C11 P3_3
#define KB_C12 P3_4
#define KB_C13 P3_5

#define KB_C14 ???
#define KB_C15 ???

// LED PWM Registers
#define LED_PWM_C0 PWM24
#define LED_PWM_C1 PWM25
#define LED_PWM_C2 PWM10
#define LED_PWM_C3 PWM11
#define LED_PWM_C4 PWM12
#define LED_PWM_C5 PWM13
#define LED_PWM_C6 PWM14
#define LED_PWM_C7 PWM15
#define LED_PWM_C8 PWM00
#define LED_PWM_C9 PWM01
#define LED_PWM_C10 PWM02
#define LED_PWM_C11 PWM03
#define LED_PWM_C12 PWM04
#define LED_PWM_C13 PWM05

#define LED_PWM_C14 ???
#define LED_PWM_C15 ???

// LED Row Pin Bits
#define LED_R0_P6_1 _P6_1
#define LED_R1_P6_2 _P6_2
#define LED_R2_P6_3 _P6_3
#define LED_R3_P6_4 _P6_4
#define LED_R4_P6_5 _P6_5


// LED Row Pins
#define LED_R0 P6_1
#define LED_R1 P6_2
#define LED_R2 P6_3
#define LED_R3 P6_4
#define LED_R4 P6_5

// KC_CAPS LED Pin
#define LED_CAPS P0_3

// KC_CAPS LED Pin Bit
#define LED_CAPS_P0_3 _P0_3

#endif
125 changes: 125 additions & 0 deletions src/keyboards/eyooso-a68/layouts/default/indicators.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
#include "indicators.h"
#include "sh68f90a.h"
#include "kbdef.h"
#include "pwm.h"
#include <stdlib.h>

// TODO: move these defines out
#define PWM_CLK_DIV 0b010 // PWM_CLK = SYS_CLK / 4
#define PWM_SS_BIT (1 << 3)
#define PWM_MOD_BIT (1 << 4)
#define PWM_INT_ENABLE_BIT (1 << 6)
#define PWM_MODE_ENABLE_BIT (1 << 7)

void indicators_pwm_set_all_columns(uint16_t intensity);
void indicators_pwm_enable();
void indicators_pwm_disable();

void indicators_start()
{
indicators_pwm_enable();
}

void indicators_pre_update()
{
// set all rgb sinks to low (animation step will enable needed ones)
P6 &= ~(LED_R0_P6_1 | LED_R1_P6_2 | LED_R2_P6_3 | LED_R3_P6_4 | LED_R4_P6_5);

indicators_pwm_disable();
}

bool indicators_update_step(keyboard_state_t *keyboard, uint8_t current_step)
{
static uint16_t current_cycle = 0;

if (current_step == 0) {
if (current_cycle < 2048) {
current_cycle++;
} else {
current_cycle = 0;
}
}

uint16_t intensity = 0;

intensity = 1024 - (uint16_t)abs((int16_t)((current_cycle + 1024) % 2048) - 1024);

LED_CAPS = !(keyboard->led_state & (1 << 1));

// set pwm duty cycles to expected colors
indicators_pwm_set_all_columns(intensity);

return false;
}

void indicators_post_update()
{
// clear pwm isr flag
PWM00CON &= ~(1 << 5);

indicators_pwm_enable();
}

void indicators_pwm_set_all_columns(uint16_t intensity)
{
uint16_t adjusted = 0x0400 - intensity;

SET_PWM_DUTY_2(LED_PWM_C0, adjusted);
SET_PWM_DUTY_2(LED_PWM_C1, adjusted);
SET_PWM_DUTY_2(LED_PWM_C2, adjusted);
SET_PWM_DUTY_2(LED_PWM_C3, adjusted);
SET_PWM_DUTY_2(LED_PWM_C4, adjusted);
SET_PWM_DUTY_2(LED_PWM_C5, adjusted);
SET_PWM_DUTY_2(LED_PWM_C6, adjusted);
SET_PWM_DUTY_2(LED_PWM_C7, adjusted);
SET_PWM_DUTY_2(LED_PWM_C8, adjusted);
SET_PWM_DUTY_2(LED_PWM_C9, adjusted);
SET_PWM_DUTY_2(LED_PWM_C10, adjusted);
SET_PWM_DUTY_2(LED_PWM_C11, adjusted);
SET_PWM_DUTY_2(LED_PWM_C12, adjusted);
SET_PWM_DUTY_2(LED_PWM_C13, adjusted);
}

void indicators_pwm_enable()
{
// TODO: try abstracting individual banks away
PWM00CON = (uint8_t)(PWM_MODE_ENABLE_BIT | PWM_INT_ENABLE_BIT | PWM_SS_BIT | PWM_CLK_DIV);
PWM01CON = PWM_SS_BIT;
PWM02CON = PWM_SS_BIT;
PWM03CON = PWM_SS_BIT;
PWM04CON = PWM_SS_BIT;
PWM05CON = PWM_SS_BIT;

PWM10CON = (uint8_t)(PWM_MODE_ENABLE_BIT | PWM_SS_BIT | PWM_CLK_DIV);
PWM11CON = PWM_SS_BIT;
PWM12CON = PWM_SS_BIT;
PWM13CON = PWM_SS_BIT;
PWM14CON = PWM_SS_BIT;
PWM15CON = PWM_SS_BIT;

PWM20CON = (uint8_t)(PWM_MODE_ENABLE_BIT | PWM_SS_BIT | PWM_CLK_DIV);
PWM24CON = PWM_SS_BIT;
PWM25CON = PWM_SS_BIT;
}

void indicators_pwm_disable()
{
// TODO: try abstracting individual banks away
PWM00CON = (uint8_t)(PWM_CLK_DIV);
PWM01CON = 0;
PWM02CON = 0;
PWM03CON = 0;
PWM04CON = 0;
PWM05CON = 0;

PWM10CON = (uint8_t)(PWM_CLK_DIV);
PWM11CON = 0;
PWM12CON = 0;
PWM13CON = 0;
PWM14CON = 0;
PWM15CON = 0;

PWM20CON = (uint8_t)(PWM_CLK_DIV);
PWM24CON = 0;
PWM25CON = 0;
}
67 changes: 67 additions & 0 deletions src/keyboards/eyooso-a68/layouts/default/layout.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#include "kbdef.h"
#include "layout.h"
#include "user_layout.h"
#include "report.h"
#include <stdint.h>

// clang-format off

#define LAYOUT_68( \
K00_0, K01_0, K02_0, K03_0, K04_0, K05_0, K06_0, K07_0, K08_0, K09_0, K10_0, K11_0, K12_0, K13_0, \
K00_1, K01_1, K02_1, K03_1, K04_1, K05_1, K06_1, K07_1, K08_1, K09_1, K10_1, K11_1, K12_1, K13_1, \
K00_2, K01_2, K02_2, K03_2, K04_2, K05_2, K06_2, K07_2, K08_2, K09_2, K10_2, K11_2, K13_2, \
K00_3, K01_3, K02_3, K03_3, K04_3, K05_3, K06_3, K07_3, K08_3, K09_3, K10_3, K12_3, \
K00_4, K01_4, K02_4, K05_4, K08_4, K09_4, K10_4, K11_4 \
) { \
{ K00_0, K01_0, K02_0, K03_0, K04_0, K05_0, K06_0, K07_0, K08_0, K09_0, K10_0, K11_0, K12_0, K13_0 }, \
{ K00_1, K01_1, K02_1, K03_1, K04_1, K05_1, K06_1, K07_1, K08_1, K09_1, K10_1, K11_1, K12_1, K13_1 }, \
{ K00_2, K01_2, K02_2, K03_2, K04_2, K05_2, K06_2, K07_2, K08_2, K09_2, K10_2, K11_2, KC_NO, K13_2 }, \
{ K00_3, K01_3, K02_3, K03_3, K04_3, K05_3, K06_3, K07_3, K08_3, K09_3, K10_3, KC_NO, K12_3, KC_NO }, \
{ K00_4, K01_4, K02_4, KC_NO, KC_NO, K05_4, KC_NO, KC_NO, K08_4, K09_4, K10_4, K11_4, KC_NO, KC_NO } \
}

#define _BL 0
#define _FL 1

const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,-----------------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backsp| Del|
* |-----------------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| `|
* |-----------------------------------------------------------------|
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '| Return|PgUp|
* |-----------------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
* |-----------------------------------------------------------------|
* |Ctrl|Win |Alt | Space |Alt| Fn|Ctrl|Lef|Dow|Rig|
* `-----------------------------------------------------------------'
*/
[_BL] = LAYOUT_68(
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_BSPC, KC_DEL,
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_GRV,
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_PGUP,
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_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT,
),
/* Keymap _FL: (Base Layer) Function Layer
* ,----------------------------------------------------------------.
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| lght | |
* |----------------------------------------------------------------|
* | | | | | | | | | | | |HOME|END| | |
* |----------------------------------------------------------------|
* | | | | | | | | | | |PSCR|INS| |MOD|
* |----------------------------------------------------------------|
* | |VDN|VUP|MUT|STP|BCK|PLY|NXT| | | | | |BUP|COL|
* |----------------------------------------------------------------|
* | | | |LIGHT TOGGLE | |FN1|FN2|SDN|BDN|SUP|
* `----------------------------------------------------------------'
*/
[_FL] = LAYOUT_68(
_______, 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_HOME, KC_END, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_INS, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
Loading