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

Model f labs f62 #21193

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
26b0526
fetch of upstearm
matthew-wolf-n4mtt Jun 9, 2023
aea1b35
initial stuff for f62
matthew-wolf-n4mtt Jun 9, 2023
240d8a7
forgotten items
matthew-wolf-n4mtt Jun 9, 2023
edbe9ab
added copyright
matthew-wolf-n4mtt Jun 9, 2023
8ef8e6e
revert submodule changes
matthew-wolf-n4mtt Jun 9, 2023
8989f16
simple removal
matthew-wolf-n4mtt Jul 5, 2023
db3a0c5
restore f62 via keymap config.h
matthew-wolf-n4mtt Jul 5, 2023
95c3f4a
picture image hosting
matthew-wolf-n4mtt Jul 5, 2023
7fac33a
post qmk migrate
matthew-wolf-n4mtt Jul 5, 2023
d1af7b1
remove ../../post_config.h
matthew-wolf-n4mtt Jul 6, 2023
684a3dc
Remove extra via layer
matthew-wolf-n4mtt Jul 6, 2023
1eb680b
correct image link
matthew-wolf-n4mtt Jul 6, 2023
867d79b
2nd set of updates for F62 pull
matthew-wolf-n4mtt Jul 15, 2023
cc0c8de
F62 wcass config.h and rules.mk update
matthew-wolf-n4mtt Aug 5, 2023
3648b62
F62 - removed wcass.h
matthew-wolf-n4mtt Sep 24, 2023
74930d9
F62: BootMagic conf cleanup
matthew-wolf-n4mtt Sep 24, 2023
c95d992
F62: Move Haptic enable to rules.mk
matthew-wolf-n4mtt Sep 24, 2023
eec663a
F62: Does the CI build like "HAPTIC_DRIVER = solenoid" in lower case?
matthew-wolf-n4mtt Sep 24, 2023
7d58907
F62: Comments removed, keymap formating
matthew-wolf-n4mtt Sep 25, 2023
7367ed3
qmk format-c
matthew-wolf-n4mtt Nov 24, 2023
e0b03ea
Merge branch 'master' into model_f_labs
matthew-wolf-n4mtt Dec 1, 2023
41f2eb9
Update source location in rules.mk
matthew-wolf-n4mtt Dec 5, 2023
5c46bb1
Merge branch 'master' into model_f_labs
matthew-wolf-n4mtt Dec 5, 2023
e8143c9
Clean up of make system files
matthew-wolf-n4mtt Dec 10, 2023
a0f23ff
fix haptic / solenoid
matthew-wolf-n4mtt Dec 18, 2023
e176cc6
restore correct haptic driver
matthew-wolf-n4mtt Dec 21, 2023
f591531
Merge remote-tracking branch 'origin/master' into model_f_labs
matthew-wolf-n4mtt Dec 21, 2023
ea28ab5
util header cleaning
matthew-wolf-n4mtt Dec 27, 2023
43af4f2
Second reviewer info.json clean up.
matthew-wolf-n4mtt Jan 1, 2024
fbc343d
Community Layout Names
matthew-wolf-n4mtt Jan 7, 2024
9f0b6d7
Boot loader details added to readme.md
matthew-wolf-n4mtt Mar 16, 2024
d53e767
Update VIA keymap to disable bootmagic
matthew-wolf-n4mtt Aug 7, 2024
d7017d7
Merge remote-tracking branch 'origin/master' into model_f_labs
matthew-wolf-n4mtt Sep 9, 2024
7092b75
wcass/info.json -> wcass/keyboard.json, community layout 60_tsangan_h…
matthew-wolf-n4mtt Sep 9, 2024
c88e43b
rm wcass/info.json
matthew-wolf-n4mtt Sep 9, 2024
a81f7ef
removed VIA keymap
matthew-wolf-n4mtt Sep 9, 2024
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
6 changes: 6 additions & 0 deletions keyboards/model_f_labs/f62/info.json
drashna marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"manufacturer": "Model F Labs",
"keyboard_name": "Reproduction IBM F62 Keyboard",
"maintainer": "Purdea Andrei",
"url": "https://www.modelfkeyboards.com/"
}
87 changes: 87 additions & 0 deletions keyboards/model_f_labs/f62/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/* Copyright 2022 Matthew J Wolf
*
* 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/>.
*
* -----
* Based on F62_-_HHKB_-_Split_Backspace.json from Joe of Model F Labs
*/
/* all
* - Base
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + │ \ │ ` │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────│
* │Lctl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │Ent │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
* │Lsft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Rsft │Fn1│
* ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┴┬───┬─┴───┤
* │Caps │GUI│Lalt │ Space │ │Ratl │Nlk│Rctl │
* └─────┴───┴─────┴──────────────────────┴────┴─────┴───┴─────┘
* - FN1
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Ins│Del│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │ │ │ │ │ │ │ │ │Psc│Skl│Pau│Up │ │Del │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────│
* │ │Vo-│Vo+│Mut│Ejc│ │Kp*│Kp/│Hom│PGu│Lef│Rgh│ │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
* │ │ │ │ │ │ │ │Kp+│Kp-│End│PGd│Dow│ │ │
* ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┴┬───┬─┴───┤
* │ │ │ │ Fn2 │ │ │ │ │
* └─────┴───┴─────┴──────────────────────┴────┴─────┴───┴─────┘
* - FN2
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │ │ │ │ │ │ │ │ │ │ │ │Dl-│Dl+│ │ │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │ │ │ │Epr│Res│HPt│ │ │ │ │ │ │ │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────│
* │ │ │ │Deb│ │ │ │ │ │ │ │ │ │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴─┬─┴──┬┴───┴┬───┬─┴───┤
* │ │ │ │ │ │ │ │ │
* └─────┴───┴─────┴──────────────────────┴────┴─────┴───┴─────┘
*/
#include QMK_KEYBOARD_H

enum layer_names {
_BASE,
_FN1,
_FN2
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_all(
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_BSLS, KC_GRV,
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_BSPC,
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_NUHS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN1),
KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, _______, KC_RALT, KC_NUM, KC_RCTL
),
[_FN1] = LAYOUT_all(
KC_GRV, 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_INS, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, _______, KC_DEL,
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
_______, _______, _______, MO(_FN2), _______, _______, _______, _______
),
[_FN2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, HF_DWLD,HF_DWLU, _______, _______,
_______, _______, _______, EE_CLR, QK_BOOT, HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, DB_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};
3 changes: 3 additions & 0 deletions keyboards/model_f_labs/f62/keymaps/default/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# A keymap for model_f_labs/f62/$(CONTROLLER)

Keymap for the HHKB Split Shift and Split Backspace.
35 changes: 35 additions & 0 deletions keyboards/model_f_labs/f62/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# model_f_labs/f62

![model_f_labs/f62](https://images2.imgbox.com/e5/97/1hPUzXct_o.jpg)

A short description of the keyboard/project

* Keyboard Maintainer: [Purdea Andrei](https://github.com/purdeaandrei)
* Build Maintainer: Matthew J Wolf
* Hardware Supported: Supports the brand new Model F reproductions from https://www.modelfkeyboards.com/, using the smaller xwhatsit controller developed by wcass.
* Hardware Availability: https://www.modelfkeyboards.com/

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

make model_f_labs/f62: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).
drashna marked this conversation as resolved.
Show resolved Hide resolved


## How do you enter the boot loader?

There are three ways to enter the boot loader.
* **Command**: At the same time hold down both shift key and the B key.
Left Shift + Right Shift + B
* **Keycode in Layout**: Press the key mapped to `QK_BOOT`.
The default location is the R key on the second layer.
FN + Spacebar + R
* **Physical Reset PCB Pad**: Short pads of the PCB.
The description and image below are from the
Model F Labs manual web page.

At the very worst you have to open up the keyboard to short PROG on the actual xwhatsit controller (unscrew the 2 controller screws to see the components side of the board, make a connection with a conductive metal object like an uncoated metal paper clip, then connect the USB cable to the controller and within a split second remove the paper clip). Per pandrew: “You might think that a screwdriver is gonna be enough, but due to surface oxidation it is likely not gonna be good enough. I like to use sharp metal tweezers, because they can dig into the pad a little bit, breaking up the surface oxidation, and I can actually be sure it’s shorting. Apply constant strong pressure on the pads while plugging in the keyboard to make sure they’re perfectly shorted. If you hear the windows USB plug-in sound (assuming the sound effect is enabled), then you know you have succeeded. I’ve even seen people tell me they tried everything to short the pads with, and then I asked them to solder the pads together and it suddenly works. There’s something about the size of those pads, or about the fact that they need to be shorted in the perfect moment when the chip leaves reset, that make people think they are perfectly shorted and yet they aren’t. This affects me too, sometimes it takes me up to 3 tries to get it into bootloader mode. Another thing to double check that you are indeed shorting the PROG pad and not the reset pad. I believe in some versions of the wcass controller there is a reset pad on the opposite side of the board. So don’t be like ‘I see some pads, those must be it’, make sure to be shorting the correct ones.” [1]

![PCB PADS](https://images2.imgbox.com/ef/20/C9zUfX1h_o.jpg)

1. “Brand New Model F and Beam Spring keyboards manual,” Brand New Model F Keyboards, https://www.modelfkeyboards.com/manual/ (accessed Mar. 16, 2024).
2 changes: 2 additions & 0 deletions keyboards/model_f_labs/f62/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DEFAULT_FOLDER = model_f_labs/f62/wcass
# Brand new model f keyboards by default come with the wcass controller.
117 changes: 117 additions & 0 deletions keyboards/model_f_labs/f62/wcass/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
Copyright 2020 Purdea Andrei
Copyright 2021-2023 Matthew J Wolf

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

/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 9
// Note: physical column are 16, but only 11 are ever used. Column 0..9 match the physical column. Column 10 is physical column 15.

/*
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
*/

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

/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/

#define HOLD_ON_OTHER_KEY_PRESS

/* XWHATSIT CONTROLLER TYPE */
#define CONTROLLER_IS_XWHATSIT_MODEL_F_OR_WCASS_MODEL_F

#define CAPSENSE_KEYBOARD_SETTLE_TIME_US 8
#define CAPSENSE_DAC_SETTLE_TIME_US 8
#define CAPSENSE_HARDCODED_SAMPLE_TIME 4

#define CAPSENSE_CAL_ENABLED 1
#define CAPSENSE_CAL_DEBUG 0
#define CAPSENSE_CAL_INIT_REPS 16
#define CAPSENSE_CAL_EACHKEY_REPS 16
#define CAPSENSE_CAL_BINS 5
#define CAPSENSE_CAL_THRESHOLD_OFFSET 24

#if !CAPSENSE_CAL_ENABLED
#define CAPSENSE_HARDCODED_THRESHOLD 142
#endif

#define CAPSENSE_KEYMAP_COL_TO_PHYSICAL_COL(col) (((col) == 8)?15:(col))

// By default we set up for support of xwhatsit's solenoid driver board.
// Comment out HAPTIC_ENABLE_PIN if you don't have an enable pin:
#define HAPTIC_ENABLE_PIN B7
// We disable haptic feedbeck during USB low power conditions:
#define HAPTIC_OFF_IN_LOW_POWER 1
// Change this if you are using a different pin for the solenoid:
#define SOLENOID_PIN B6
// If you are not using a solenoid then comment out the above, and also in rules.mk, remove "HAPTIC_ENABLE += SOLENOID"
// You can also tune the following for your solenoid:
#define SOLENOID_DEFAULT_DWELL 4
#define SOLENOID_MIN_DWELL 4
#define NO_HAPTIC_MOD

// ----- xwhatsit hardware configuration (type_f) -----

#define CAPSENSE_DAC_SCLK B1
#define CAPSENSE_DAC_DIN B2
#define CAPSENSE_DAC_SYNC_N B0
#define CAPSENSE_DAC_MAX 1023

#define CAPSENSE_SHIFT_DIN D4
#define CAPSENSE_SHIFT_OE D5
#define CAPSENSE_SHIFT_SHCP D7
#define CAPSENSE_SHIFT_STCP D6
#define CAPSENSE_SHIFT_STCP_IO _SFR_IO_ADDR(PORTD)
#define CAPSENSE_SHIFT_STCP_BIT 6

#define SETUP_ROW_GPIOS() \
do { \
PORTC |= 0xF0; \
PORTD |= 0x0F; \
} while (0)

#define SETUP_UNUSED_PINS() do {} while (0)

#define CAPSENSE_READ_ROWS_NUMBER_OF_BYTES_PER_SAMPLE 2
#define CAPSENSE_READ_ROWS_PIN_1 _SFR_IO_ADDR(PINC)
#define CAPSENSE_READ_ROWS_PIN_2 _SFR_IO_ADDR(PIND)
#define CAPSENSE_READ_ROWS_ASM_INSTRUCTIONS "in %[dest_row_1], %[ioreg_row_1]\n\tin %[dest_row_2], %[ioreg_row_2]"
#define CAPSENSE_READ_ROWS_STORE_TO_ARRAY_INSTRUCTIONS \
"st %a[arr]+, %[dest_row_1]" "\n\t" \
"st %a[arr]+, %[dest_row_2]"
#define CAPSENSE_READ_ROWS_STORE_TO_ARRAY_INSTRUCTIONS_FAKE \
"st %a[arr], %[dest_row_1]" "\n\t" \
"st %a[arr], %[dest_row_2]"
#define CAPSENSE_READ_ROWS_OUTPUT_CONSTRAINTS [dest_row_1] "=&r" (dest_row_1), [dest_row_2] "=&r" (dest_row_2)
#define CAPSENSE_READ_ROWS_INPUT_CONSTRAINTS [ioreg_row_1] "I" (CAPSENSE_READ_ROWS_PIN_1), [ioreg_row_2] "I" (CAPSENSE_READ_ROWS_PIN_2)
#define CAPSENSE_READ_ROWS_LOCAL_VARS uint8_t dest_row_1, dest_row_2
#define CAPSENSE_READ_ROWS_EXTRACT_FROM_ARRAY do { dest_row_1 = array[p0++]; dest_row_2 = array[p0++]; } while (0)

#if (!defined(CAPSENSE_CONDUCTIVE_PLASTIC_IS_PUSHED_DOWN_ON_KEYPRESS)) && (!defined(CAPSENSE_CONDUCTIVE_PLASTIC_IS_PULLED_UP_ON_KEYPRESS))
#define CAPSENSE_CONDUCTIVE_PLASTIC_IS_PUSHED_DOWN_ON_KEYPRESS
#endif
#define CAPSENSE_KEYMAP_ROW_TO_PHYSICAL_ROW(row) (7-(row))
#define CAPSENSE_PHYSICAL_ROW_TO_KEYMAP_ROW(row) (7-(row))
#define CAPSENSE_READ_ROWS_VALUE ((dest_row_1 >> 4) | (dest_row_2 << 4))
Loading