[Keyboard] add ASkeyboard Sono1 (#11114)

* handwired/sono1

* readme: addition

* Apply suggestions from code review

Co-authored-by: Ryan <fauxpark@gmail.com>

Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
Dmitry Nosachev
2020-12-22 21:10:56 +03:00
committed by GitHub
parent f40b564683
commit bf324c38e3
13 changed files with 2129 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,113 @@
/*
Copyright 2020 DmNosachev
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/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x515A // "QZ"
#define PRODUCT_ID 0x5331 // "S1"
#define DEVICE_VER 0x0001
#define MANUFACTURER ASKeyboard
#define PRODUCT Sono1
/* key matrix size */
#define MATRIX_ROWS 15
#define MATRIX_COLS 8
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { A5, B3, A9, A10, B13, B14, B15, A8, B7, B8, B9, C13, A15, A0, A1 }
#define MATRIX_COL_PINS { A4, A3, B11, B10, B1, B0, A7, A6 }
#define UNUSED_PINS { A5 }
#define LED_KANA_PIN A2
#define LED_CAPS_LOCK_PIN B5
#define LED_CTRL_XFER_PIN B6
#define LED_NUM_LOCK_PIN B4
#define LED_KB_LOCK_PIN B12
#define LED_PIN_ON_STATE 0
/* COL2ROW, ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
*/
//#define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
/* Bootmagic Lite key configuration */
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,120 @@
{
"keyboard_name": "sono1",
"url": "",
"maintainer": "DmNosachev",
"width": 22.5,
"height": 7.5,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"F11", "x":0, "y":0},
{"label":"F12", "x":1.25, "y":0},
{"label":"F1", "x":2.75, "y":0, "w":1.25},
{"label":"F2", "x":4, "y":0, "w":1.25},
{"label":"F3", "x":5.25, "y":0, "w":1.25},
{"label":"F4", "x":6.5, "y":0, "w":1.25},
{"label":"F5", "x":7.75, "y":0, "w":1.25},
{"label":"F6", "x":9.25, "y":0, "w":1.25},
{"label":"F7", "x":10.5, "y":0, "w":1.25},
{"label":"F8", "x":11.75, "y":0, "w":1.25},
{"label":"F9", "x":13, "y":0, "w":1.25},
{"label":"F10", "x":14.25, "y":0, "w":1.25},
{"label":"PgUp", "x":16, "y":0},
{"label":"PgDn", "x":17, "y":0},
{"label":"LOCK", "x":18.5, "y":0.5},
{"label":"Home", "x":16, "y":1},
{"label":"End", "x":17, "y":1},
{"label":"Esc", "x":0, "y":1.5, "w":1.25},
{"label":"!", "x":1.25, "y":1.5},
{"label":"@", "x":2.25, "y":1.5},
{"label":"#", "x":3.25, "y":1.5},
{"label":"$", "x":4.25, "y":1.5},
{"label":"%", "x":5.25, "y":1.5},
{"label":"^", "x":6.25, "y":1.5},
{"label":"&", "x":7.25, "y":1.5},
{"label":"*", "x":8.25, "y":1.5},
{"label":"(", "x":9.25, "y":1.5},
{"label":")", "x":10.25, "y":1.5},
{"label":"_", "x":11.25, "y":1.5},
{"label":"+", "x":12.25, "y":1.5},
{"label":"~", "x":13.25, "y":1.5},
{"label":"BksSpc", "x":14.25, "y":1.5, "w":1.25},
{"label":"/", "x":18.5, "y":1.5},
{"label":"*", "x":19.5, "y":1.5},
{"label":"-", "x":20.5, "y":1.5},
{"label":"+", "x":21.5, "y":1.5},
{"label":"Ins", "x":16, "y":2},
{"label":"Del", "x":17, "y":2},
{"label":"Tab", "x":0, "y":2.5, "w":1.5},
{"label":"Q", "x":1.5, "y":2.5},
{"label":"W", "x":2.5, "y":2.5},
{"label":"E", "x":3.5, "y":2.5},
{"label":"R", "x":4.5, "y":2.5},
{"label":"T", "x":5.5, "y":2.5},
{"label":"Y", "x":6.5, "y":2.5},
{"label":"U", "x":7.5, "y":2.5},
{"label":"I", "x":8.5, "y":2.5},
{"label":"O", "x":9.5, "y":2.5},
{"label":"P", "x":10.5, "y":2.5},
{"label":"{", "x":11.5, "y":2.5},
{"label":"}", "x":12.5, "y":2.5},
{"label":"Enter", "x":13.75, "y":2.5, "w":1.75, "h":2},
{"label":"7", "x":18.5, "y":2.5},
{"label":"8", "x":19.5, "y":2.5},
{"label":"9", "x":20.5, "y":2.5},
{"label":"+=", "x":21.5, "y":2.5},
{"label":"Ctrl", "x":0, "y":3.5, "w":1.75},
{"label":"A", "x":1.75, "y":3.5},
{"label":"S", "x":2.75, "y":3.5},
{"label":"D", "x":3.75, "y":3.5},
{"label":"F", "x":4.75, "y":3.5},
{"label":"G", "x":5.75, "y":3.5},
{"label":"H", "x":6.75, "y":3.5},
{"label":"J", "x":7.75, "y":3.5},
{"label":"K", "x":8.75, "y":3.5},
{"label":"L", "x":9.75, "y":3.5},
{"label":":", "x":10.75, "y":3.5},
{"label":"\"", "x":11.75, "y":3.5},
{"label":"|", "x":12.75, "y":3.5},
{"label":"Up", "x":16, "y":3.5, "w":2},
{"label":"4", "x":18.5, "y":3.5},
{"label":"5", "x":19.5, "y":3.5},
{"label":"6", "x":20.5, "y":3.5},
{"label":".", "x":21.5, "y":3.5},
{"label":"Shift", "x":0, "y":4.5, "w":2.5},
{"label":"Z", "x":2.5, "y":4.5},
{"label":"X", "x":3.5, "y":4.5},
{"label":"C", "x":4.5, "y":4.5},
{"label":"V", "x":5.5, "y":4.5},
{"label":"B", "x":6.5, "y":4.5},
{"label":"N", "x":7.5, "y":4.5},
{"label":"M", "x":8.5, "y":4.5},
{"label":"<", "x":9.5, "y":4.5},
{"label":">", "x":10.5, "y":4.5},
{"label":"?", "x":11.5, "y":4.5},
{"label":"MUS", "x":12.5, "y":4.5},
{"label":"Shift", "x":13.5, "y":4.5, "w":2},
{"label":"Left", "x":16, "y":4.5},
{"label":"Right", "x":17, "y":4.5},
{"label":"1", "x":18.5, "y":4.5},
{"label":"2", "x":19.5, "y":4.5},
{"label":"3", "x":20.5, "y":4.5},
{"label":"<", "x":21.5, "y":4.5},
{"label":"Caps", "x":0, "y":5.5},
{"label":"Alt", "x":1, "y":5.5},
{"label":"App", "x":2, "y":5.5, "w":1.25},
{"label":"GUI", "x":3.25, "y":5.5, "w":1.5},
{"label":"Space", "x":4.75, "y":5.5, "w":2.25},
{"label":"Space", "x":7, "y":5.5, "w":2.25},
{"label":"Enter", "x":9.25, "y":5.5, "w":3},
{"label":"Ctrl", "x":12.25, "y":5.5, "w":1.5},
{"label":"Alt", "x":14.5, "y":5.5},
{"label":"Down", "x":16, "y":5.5, "w":2},
{"label":"0", "x":18.5, "y":5.5},
{"label":"000", "x":19.5, "y":5.5},
{"label":"Enter", "x":20.5, "y":5.5, "w":2},
{"label":"Fn", "x":5.75, "y":6.5, "w":1.25},
{"label":"BkSpc", "x":7, "y":6.5, "w":1.25}]
}
}
}

View File

@ -0,0 +1,45 @@
/* Copyright 2020 DmNosachev
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_debug(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("row: %u, col: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed);
#endif
return true;
}

View File

@ -0,0 +1 @@
# The default keymap for sono1

View File

@ -0,0 +1,168 @@
/* Copyright 2020 DmNosachev
*
* 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 QMK_KEYBOARD_H
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
_FN,
_MUS,
_LOCK
};
enum custom_keycodes {
MC3Z = SAFE_RANGE
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
,---------------------------------------------------------------------------------------------------------, ,-----,
| F11 | | F12 | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |PgUp |PgDn | |LOCK |
|-------------------------------------------------------------------------------------------| |-----------| |-----|-----------------,
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | += | ~` |BkSpc | |Home | End | | * | / | - | + |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| Tab | Q | W | E | R | T | Y | U | I | O | P | {[ | }] | Enter | | Ins | Del | | 7 | 8 | 9 | += |
|--------------------------------------------------------------------------------| | `-----------' |-----------------------|
| Ctrl | A | S | D | F | G | H | J | K | L | :; | "' | |\ | | | Up | | 4 | 5 | 6 | . |
|--------------------------------------------------------------------------------`----------' |-----------| |-----------------------|
| Shift | Z | X | C | V | B | N | M | <, | >. | ?/ | MUS | Shift | |Left |Right| | 1 | 2 | 3 | <, |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
|Caps | Alt | App | GUI | Space | Space | Enter | Ctrl | | Alt | | Down | | 0 | 000 | Enter |
`-------------------------------------------------------------------------------------------' `-----------' '-----------------------'
| FN | BackSp|
`--------------'
*/
[_BASE] = LAYOUT(
KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PGUP, KC_PGDN, MO(_LOCK),
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_GRV, KC_BSPC, KC_HOME, KC_END, KC_PAST, KC_PSLS, KC_PMNS, KC_PPLS,
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_ENT, KC_INS, KC_DEL, KC_P7, KC_P8, KC_P9, KC_EQL,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_PDOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_MUS), KC_RSFT, KC_LEFT, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_COMM,
KC_CAPS, KC_LALT, KC_APP, KC_LGUI, KC_SPACE, KC_SPACE, KC_ENT, KC_RCTL, KC_RALT, KC_DOWN, KC_P0, MC3Z, KC_PENT,
MO(_FN), KC_BSPC
),
/*
,---------------------------------------------------------------------------------------------------------, ,-----,
|Reset| | | | | | | | | | | |PrnSc |ScrLk |Pause | | |NumLk| | |
|-------------------------------------------------------------------------------------------| |-----------| |-----|-----------------,
| | | | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| | | | | | | | | Up | |Home |PgUp | | | | | | | | | | |
|--------------------------------------------------------------------------------| | `-----------' |-----------------------|
| | | | | | | |Left |Down |Right| End |PgDn | | | | | | | | | |
|--------------------------------------------------------------------------------`----------' |-----------| |-----------------------|
| | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| | | | | | | BackSpace | | | | | | | | | |
`-------------------------------------------------------------------------------------------' `-----------' '-----------------------'
| |Delete|
`-------------'
*/
[_FN] = LAYOUT(
RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_LSCR, KC_PAUS, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, KC_PGDN, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, _______, _______, _______,
_______, KC_DEL
),
/*
,---------------------------------------------------------------------------------------------------------, ,-----,
| | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----|-----------------,
| | | | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| |MWh+ | M1 | MUp | M2 | | | | | | | | | | | | | | | | | |
|--------------------------------------------------------------------------------| | `-----------' |-----------------------|
| |MWh- | ML | MDn | MR | | | | | | | | | | | | | | | | |
|--------------------------------------------------------------------------------`----------' |-----------| |-----------------------|
| | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| | | | | | | | | | | | | | | | |
`-------------------------------------------------------------------------------------------' `-----------' '-----------------------'
| | |
`-------------'
*/
[_MUS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______
),
/*
,---------------------------------------------------------------------------------------------------------, ,-----,
| | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----|-----------------,
| | | | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| | | | | | | | | | | | | | | | | | | | | | |
|--------------------------------------------------------------------------------| | `-----------' |-----------------------|
| | | | | | | | | | | | | | | | | | | | | |
|--------------------------------------------------------------------------------`----------' |-----------| |-----------------------|
| | | | | | | | | | | | | | | | | | | | | |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| | | | | | | | | | | | | | | | |
`-------------------------------------------------------------------------------------------' `-----------' '-----------------------'
| | |
`-------------'
*/
[_LOCK] = LAYOUT(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, _______,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case MC3Z:
if (record->event.pressed) {
SEND_STRING("000");
} else {
}
break;
}
return true;
}
layer_state_t layer_state_set_user(layer_state_t state) {
/* Use LED0 and 4 (Kana and KB Lock as layer indicators) */
switch (get_highest_layer(state)) {
case _FN:
writePinLow(LED_KANA_PIN);
break;
case _MUS:
writePinLow(LED_KB_LOCK_PIN);
break;
case _LOCK:
writePinLow(LED_KANA_PIN);
writePinLow(LED_KB_LOCK_PIN);
break;
default: // for any other layers, or the default layer
writePinHigh(LED_KANA_PIN);
writePinHigh(LED_KB_LOCK_PIN);
break;
}
return state;
}

View File

@ -0,0 +1 @@
# The default keymap for sono1

View File

@ -0,0 +1,209 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _MCUCONF_H_
#define _MCUCONF_H_
#define STM32F103_MCUCONF
/*
* STM32F103 drivers configuration.
* The following settings override the default settings present in
* the various device driver implementation headers.
* Note that the settings for each driver only have effect if the whole
* driver is enabled in halconf.h.
*
* IRQ priorities:
* 15...0 Lowest...Highest.
*
* DMA priorities:
* 0...3 Lowest...Highest.
*/
/*
* HAL driver system settings.
*/
#define STM32_NO_INIT FALSE
#define STM32_HSI_ENABLED TRUE
#define STM32_LSI_ENABLED FALSE
#define STM32_HSE_ENABLED TRUE
#define STM32_LSE_ENABLED FALSE
#define STM32_SW STM32_SW_PLL
#define STM32_PLLSRC STM32_PLLSRC_HSE
#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
#define STM32_PLLMUL_VALUE 9
#define STM32_HPRE STM32_HPRE_DIV1
#define STM32_PPRE1 STM32_PPRE1_DIV2
#define STM32_PPRE2 STM32_PPRE2_DIV2
#define STM32_ADCPRE STM32_ADCPRE_DIV4
#define STM32_USB_CLOCK_REQUIRED TRUE
#define STM32_USBPRE STM32_USBPRE_DIV1P5
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
#define STM32_PVD_ENABLE FALSE
#define STM32_PLS STM32_PLS_LEV0
/*
* ADC driver system settings.
*/
#define STM32_ADC_USE_ADC1 FALSE
#define STM32_ADC_ADC1_DMA_PRIORITY 2
#define STM32_ADC_ADC1_IRQ_PRIORITY 6
/*
* CAN driver system settings.
*/
#define STM32_CAN_USE_CAN1 FALSE
#define STM32_CAN_CAN1_IRQ_PRIORITY 11
/*
* EXT driver system settings.
*/
#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
/*
* GPT driver system settings.
*/
#define STM32_GPT_USE_TIM1 FALSE
#define STM32_GPT_USE_TIM2 FALSE
#define STM32_GPT_USE_TIM3 FALSE
#define STM32_GPT_USE_TIM4 FALSE
#define STM32_GPT_USE_TIM5 FALSE
#define STM32_GPT_USE_TIM8 FALSE
#define STM32_GPT_TIM1_IRQ_PRIORITY 7
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
#define STM32_GPT_TIM3_IRQ_PRIORITY 7
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
#define STM32_GPT_TIM5_IRQ_PRIORITY 7
#define STM32_GPT_TIM8_IRQ_PRIORITY 7
/*
* I2C driver system settings.
*/
#define STM32_I2C_USE_I2C1 FALSE
#define STM32_I2C_USE_I2C2 FALSE
#define STM32_I2C_BUSY_TIMEOUT 50
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
#define STM32_I2C_I2C1_DMA_PRIORITY 3
#define STM32_I2C_I2C2_DMA_PRIORITY 3
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
/*
* ICU driver system settings.
*/
#define STM32_ICU_USE_TIM1 FALSE
#define STM32_ICU_USE_TIM2 FALSE
#define STM32_ICU_USE_TIM3 FALSE
#define STM32_ICU_USE_TIM4 FALSE
#define STM32_ICU_USE_TIM5 FALSE
#define STM32_ICU_USE_TIM8 FALSE
#define STM32_ICU_TIM1_IRQ_PRIORITY 7
#define STM32_ICU_TIM2_IRQ_PRIORITY 7
#define STM32_ICU_TIM3_IRQ_PRIORITY 7
#define STM32_ICU_TIM4_IRQ_PRIORITY 7
#define STM32_ICU_TIM5_IRQ_PRIORITY 7
#define STM32_ICU_TIM8_IRQ_PRIORITY 7
/*
* PWM driver system settings.
*/
#define STM32_PWM_USE_ADVANCED FALSE
#define STM32_PWM_USE_TIM1 FALSE
#define STM32_PWM_USE_TIM2 TRUE
#define STM32_PWM_USE_TIM3 FALSE
#define STM32_PWM_USE_TIM4 FALSE
#define STM32_PWM_USE_TIM5 FALSE
#define STM32_PWM_USE_TIM8 FALSE
#define STM32_PWM_TIM1_IRQ_PRIORITY 7
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
#define STM32_PWM_TIM5_IRQ_PRIORITY 7
#define STM32_PWM_TIM8_IRQ_PRIORITY 7
/*
* RTC driver system settings.
*/
#define STM32_RTC_IRQ_PRIORITY 15
/*
* SERIAL driver system settings.
*/
#define STM32_SERIAL_USE_USART1 FALSE
#define STM32_SERIAL_USE_USART2 FALSE
#define STM32_SERIAL_USE_USART3 FALSE
#define STM32_SERIAL_USE_UART4 FALSE
#define STM32_SERIAL_USE_UART5 FALSE
#define STM32_SERIAL_USART1_PRIORITY 12
#define STM32_SERIAL_USART2_PRIORITY 12
#define STM32_SERIAL_USART3_PRIORITY 12
#define STM32_SERIAL_UART4_PRIORITY 12
#define STM32_SERIAL_UART5_PRIORITY 12
/*
* SPI driver system settings.
*/
#define STM32_SPI_USE_SPI1 FALSE
#define STM32_SPI_USE_SPI2 FALSE
#define STM32_SPI_USE_SPI3 FALSE
#define STM32_SPI_SPI1_DMA_PRIORITY 1
#define STM32_SPI_SPI2_DMA_PRIORITY 1
#define STM32_SPI_SPI3_DMA_PRIORITY 1
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
#define STM32_SPI_SPI3_IRQ_PRIORITY 10
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
/*
* ST driver system settings.
*/
#define STM32_ST_IRQ_PRIORITY 8
#define STM32_ST_USE_TIMER 2
/*
* UART driver system settings.
*/
#define STM32_UART_USE_USART1 FALSE
#define STM32_UART_USE_USART2 FALSE
#define STM32_UART_USE_USART3 FALSE
#define STM32_UART_USART1_IRQ_PRIORITY 12
#define STM32_UART_USART2_IRQ_PRIORITY 12
#define STM32_UART_USART3_IRQ_PRIORITY 12
#define STM32_UART_USART1_DMA_PRIORITY 0
#define STM32_UART_USART2_DMA_PRIORITY 0
#define STM32_UART_USART3_DMA_PRIORITY 0
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
/*
* USB driver system settings.
*/
#define STM32_USB_USE_USB1 TRUE
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
#endif /* _MCUCONF_H_ */

View File

@ -0,0 +1,57 @@
# QMK-based firmware for ASkeyboard Sono1 keyboard with additional Sono2 numpad
![Sono1](https://i.imgur.com/eb046DOh.jpeg)
ASkeyboard Sono1 keyboard conversion project: direct connection of Black Pill to the matrix.
* Keyboard Maintainer: [DmNosachev](https://github.com/DmNosachev)
* Hardware Supported: [ASkeyboard Sono1](http://www5f.biglobe.ne.jp/~silencium/keyboard/html/alps.html), Black Pill STM32F103C8T6 MCU board. Alternatively you can use any MCU which is supported by QMK and has 28 IO pins or more (15x8 matrix and 5 LEDs): Teensy 2.0++, Blue Pill, etc.
Make example for this keyboard (after setting up your build environment):
make handwired/sono1:default
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).
# Modding
## Matrix
ASkeyboard Sono1 has 15x8 matrix. Sono2 numpad connects directly to the main matrix.
Rows (R0-RE) and columns (R0-C7):
![Sono1 rows and columns](https://i.imgur.com/5Owazg6h.jpeg)
## LEDs
Keyboard has 5 LEDs with common anode. Their cathodes are connected to R10R14 resistors (you may want to replace them to adjust LED brightness for 3.3V voltage). Add 5 wire jumpers to connect them to the corresponding traces.
![Sono1 LEDs](https://i.imgur.com/opxc2A3h.jpeg)
## Black Pill
Suggested mount position for the Black Pill (view from the bottom side of the PCB):
```
R8 R9 RA RB RC RD RE L0 Vcc C7 C6 C5 C4 C3 C2 C1 C0 Vcc
* | | | * | | | | | | | | | * * *
,------------------------------------------------------------------------,
,---|GND B8 B9 C13 RST A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B10 B11 3V3| A3 A4 3V3
| | B7 A15 A13|
|USB| A14|
| | B12 A10 GND|
'---|GND 3V3 B7 B6 B5 B4 B3 A15 A12 A11 A10 A9 A8 B15 B14 B13 B12 |
'------------------------------------------------------------------------' A9 B3 A5
| | | | * | | | | * * * *
GND L2 L1 L3 L4 R7 R6 R5 R4 R3 R2 R1 R0
```
Asterisk sign designates pins of the Black Pill that don't align properly with PCB and need to be rewired.
![Black Pill](https://i.imgur.com/KQjTWVbh.jpeg)
1. Desolder all ICs, capacitors and resistors except R10R14.
1. Solder 4-pin SWD header to Black Pill.
2. Burn [STM32duino bootloader](https://github.com/rogerclarkmelbourne/STM32duino-bootloader/blob/master/bootloader_only_binaries/generic_boot20_pb12.bin) to Black Pill.
3. Compile and flash the firmware: `make handwired/sono1:default:flash`
4. Connect rows, columns and LED pads to the corresponding pins of the Black Pill.
## Keymap
'CUR LOCK' key on Sono2 numpad has locking switch by default (Alps SKCL lock). QMK [supports mechanical locking switches](https://docs.qmk.fm/#/faq_keymap?id=mechanical-lock-switch-support) for CapsLock, NumLock and ScrollLock keycodes.

View File

@ -0,0 +1,25 @@
# MCU name
MCU = STM32F103
# Bootloader selection
BOOTLOADER = stm32duino
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output

View File

@ -0,0 +1,44 @@
/* Copyright 2020 DmNosachev
*
* 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 "sono1.h"
void matrix_init_kb(void) {
/* LED pins setup */
setPinOutput(LED_KANA_PIN);
setPinOutput(LED_CAPS_LOCK_PIN);
setPinOutput(LED_CTRL_XFER_PIN);
setPinOutput(LED_NUM_LOCK_PIN);
setPinOutput(LED_KB_LOCK_PIN);
writePinHigh(LED_KANA_PIN);
writePinHigh(LED_CAPS_LOCK_PIN);
writePinHigh(LED_CTRL_XFER_PIN);
writePinHigh(LED_NUM_LOCK_PIN);
writePinHigh(LED_KB_LOCK_PIN);
matrix_init_user();
}
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
writePin(LED_NUM_LOCK_PIN, !led_state.num_lock);
writePin(LED_CAPS_LOCK_PIN, !led_state.caps_lock);
writePin(LED_CTRL_XFER_PIN, !led_state.scroll_lock);
}
return res;
}

View File

@ -0,0 +1,107 @@
/* Copyright 2020 DmNosachev
*
* 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/>.
*/
#pragma once
#include "quantum.h"
#define XXX KC_NO
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
/*
,---------------------------------------------------------------------------------------------------------, ,-----,
| < | |NumLk| | f1 | f2 | f3 | f4 | f5 | | f6 | f7 | f8 | f9 | f10 | |RlUp |RlDn | |CurLk|
|-------------------------------------------------------------------------------------------| |-----------| |-----|-----------------,
| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = - | ^ | ^ | BS | |Home |Help | | * | / | - | + |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
| Tab | Q | W | E | R | T | Y | U | I | O | P | ~@ | {[ | Return | | Ins | Del | | 7 | 8 | 9 | = |
|--------------------------------------------------------------------------------| | `-----------' |-----------------------|
| Ctrl | A | S | D | F | G | H | J | K | L | +; | *: | }] | | | Up | | 4 | 5 | 6 | . |
|--------------------------------------------------------------------------------`----------' |-----------| |-----------------------|
| Shift | Z | X | C | V | B | N | M | , | . | ?/ | -- | Shift | |Left |Right| | 1 | 2 | 3 | , |
|-------------------------------------------------------------------------------------------| |-----------| |-----------------------|
|Caps | Opt |Kana | Cmd | Space1 | Space2 | Space3 | Enter | | Alt | | Down | | 0 | 000 | Enter |
`-------------------------------------------------------------------------------------------' `-----------' '-----------------------'
|Thumb1|Thumb2|
`-------------'
*/
#define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K10, K11, K12, K13, K97, KA0, KD6, \
K14, K15, K16, K17, K20, K21, K22, K23, K24, K25, K26, K27, K30, K31, K74, KA1, KA2, KC0, KD0, KE0, KC1, \
K75, K32, K33, K34, K35, K36, K37, K40, K41, K42, K43, K44, K45, K76, KA3, KA4, KD1, KE1, KC2, KD2, \
K77, K47, K50, K51, K52, K53, K54, K55, K56, K57, K60, K80, K81, KB0, KE2, KC3, KD3, KE3, \
K82, K61, K62, K63, K64, K65, K66, K67, K70, K71, K72, K73, K83, KB1, KB2, KC4, KD4, KE4, KC5,\
K84, K85, K86, K87, K90, K91, K92, K93, K94, KB3, KD5, KE5, KC6, \
K95, K96 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
{ K40, K41, K42, K43, K44, K45, XXX, K47 }, \
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ K80, K81, K82, K83, K84, K85, K86, K87 }, \
{ K90, K91, K92, K93, K94, K95, K96, K97 }, \
{ KA0, KA1, KA2, KA3, KA4, XXX, XXX, XXX }, \
{ KB0, KB1, KB2, KB3, XXX, XXX, XXX, XXX }, \
{ KC0, KC1, KC2, KC3, KC4, KC5, KC6, XXX }, \
{ KD0, KD1, KD2, KD3, KD4, KD5, KD6, XXX }, \
{ KE0, KE1, KE2, KE3, KE4, KE5, XXX, XXX } \
}
#define LAYOUT_debug( \
K00, K01, K02, K03, K04, K05, K06, K07, \
K10, K11, K12, K13, K14, K15, K16, K17, \
K20, K21, K22, K23, K24, K25, K26, K27, \
K30, K31, K32, K33, K34, K35, K36, K37, \
K40, K41, K42, K43, K44, K45, K46, K47, \
K50, K51, K52, K53, K54, K55, K56, K57, \
K60, K61, K62, K63, K64, K65, K66, K67, \
K70, K71, K72, K73, K74, K75, K76, K77, \
K80, K81, K82, K83, K84, K85, K86, K87, \
K90, K91, K92, K93, K94, K95, K96, K97, \
KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7, \
KB0, KB1, KB2, KB3, KB4, KB5, KB6, KB7, \
KC0, KC1, KC2, KC3, KC4, KC5, KC6, KC7, \
KD0, KD1, KD2, KD3, KD4, KD5, KD6, KD7, \
KE0, KE1, KE2, KE3, KE4, KE5, KE6, KE7 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
{ K40, K41, K42, K43, K44, K45, K46, K47 }, \
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ K80, K81, K82, K83, K84, K85, K86, K87 }, \
{ K90, K91, K92, K93, K94, K95, K96, K97 }, \
{ KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7 }, \
{ KB0, KB1, KB2, KB3, KB4, KB5, KB6, KB7 }, \
{ KC0, KC1, KC2, KC3, KC4, KC5, KC6, KC7 }, \
{ KD0, KD1, KD2, KD3, KD4, KD5, KD6, KD7 }, \
{ KE0, KE1, KE2, KE3, KE4, KE5, KE6, KE7 } \
}