[Keyboard] Refactor FaceW for new BMC changes (#5575)
* use #pragma once for guards * update readme and fix pyusb install instructions * replace custom i2c code with QMK i2c_master * remove unneeded code from config.h * fix keyboard name * remove custom matrix and i2c driver * turn off bootmagic, turn on leds * remove keymap in favor of userspace/community layouts keymap * remove custom matrix * update readme
This commit is contained in:
parent
5c1ef2bddc
commit
0231caa25a
11 changed files with 20 additions and 346 deletions
|
@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FACEW_CONFIG_H
|
#pragma once
|
||||||
#define FACEW_CONFIG_H
|
|
||||||
|
|
||||||
#include "config_common.h"
|
#include "config_common.h"
|
||||||
|
|
||||||
|
@ -40,7 +39,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define NO_BACKLIGHT_CLOCK
|
#define NO_BACKLIGHT_CLOCK
|
||||||
#define BACKLIGHT_LEVELS 1
|
#define BACKLIGHT_LEVELS 1
|
||||||
#define RGBLIGHT_ANIMATIONS
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|
||||||
#define NO_UART 1
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
#include "action_layer.h"
|
#include "action_layer.h"
|
||||||
#include "i2c.h"
|
#include "i2c_master.h"
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
@ -42,7 +42,7 @@ void rgblight_set(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
i2c_init();
|
i2c_init();
|
||||||
i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
|
i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef FACEW_H
|
#pragma once
|
||||||
#define FACEW_H
|
|
||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
|
|
||||||
|
@ -53,5 +52,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
{ KC_NO, K61, KC_NO, KC_NO, K64, K65, K66, KC_NO, K68, K69, K60}, \
|
{ KC_NO, K61, KC_NO, KC_NO, K64, K65, K66, KC_NO, K68, K69, K60}, \
|
||||||
{ KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, KC_NO, KC_NO}, \
|
{ KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, KC_NO, KC_NO}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,106 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Please do not modify this file
|
|
||||||
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <util/twi.h>
|
|
||||||
|
|
||||||
#include "i2c.h"
|
|
||||||
|
|
||||||
void i2c_set_bitrate(uint16_t bitrate_khz) {
|
|
||||||
uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
|
|
||||||
if (bitrate_div >= 16) {
|
|
||||||
bitrate_div = (bitrate_div - 16) / 2;
|
|
||||||
}
|
|
||||||
TWBR = bitrate_div;
|
|
||||||
}
|
|
||||||
|
|
||||||
void i2c_init(void) {
|
|
||||||
// set pull-up resistors on I2C bus pins
|
|
||||||
PORTC |= 0b11;
|
|
||||||
|
|
||||||
i2c_set_bitrate(400);
|
|
||||||
|
|
||||||
// enable TWI (two-wire interface)
|
|
||||||
TWCR |= (1 << TWEN);
|
|
||||||
|
|
||||||
// enable TWI interrupt and slave address ACK
|
|
||||||
TWCR |= (1 << TWIE);
|
|
||||||
TWCR |= (1 << TWEA);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t i2c_start(uint8_t address) {
|
|
||||||
// reset TWI control register
|
|
||||||
TWCR = 0;
|
|
||||||
|
|
||||||
// begin transmission and wait for it to end
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
|
||||||
while (!(TWCR & (1<<TWINT)));
|
|
||||||
|
|
||||||
// check if the start condition was successfully transmitted
|
|
||||||
if ((TWSR & 0xF8) != TW_START) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// transmit address and wait
|
|
||||||
TWDR = address;
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
|
||||||
while (!(TWCR & (1<<TWINT)));
|
|
||||||
|
|
||||||
// check if the device has acknowledged the READ / WRITE mode
|
|
||||||
uint8_t twst = TW_STATUS & 0xF8;
|
|
||||||
if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void i2c_stop(void) {
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t i2c_write(uint8_t data) {
|
|
||||||
TWDR = data;
|
|
||||||
|
|
||||||
// transmit data and wait
|
|
||||||
TWCR = (1<<TWINT) | (1<<TWEN);
|
|
||||||
while (!(TWCR & (1<<TWINT)));
|
|
||||||
|
|
||||||
if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
|
|
||||||
if (i2c_start(address)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint16_t i = 0; i < length; i++) {
|
|
||||||
if (i2c_write(data[i])) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i2c_stop();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Please do not modify this file
|
|
||||||
|
|
||||||
#ifndef __I2C_H__
|
|
||||||
#define __I2C_H__
|
|
||||||
|
|
||||||
void i2c_init(void);
|
|
||||||
void i2c_set_bitrate(uint16_t bitrate_khz);
|
|
||||||
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
|
|
||||||
|
|
||||||
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] = {
|
|
||||||
[0] = LAYOUT_all(
|
|
||||||
KC_GESC, 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_NO, KC_BSPC,
|
|
||||||
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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
|
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(2),
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL
|
|
||||||
),
|
|
||||||
[1] = 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_NO, KC_DEL,
|
|
||||||
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_CAPS, 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,
|
|
||||||
MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
|
||||||
),
|
|
||||||
[2] = LAYOUT_all(
|
|
||||||
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_UP, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
|
|
||||||
),
|
|
||||||
|
|
||||||
[3] = LAYOUT_all(
|
|
||||||
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, RESET, 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
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
MechMerlin's FaceW Sprit Edition Layout
|
|
||||||
======================
|
|
||||||
|
|
||||||
This is the preferred 60% layout used by u/merlin36, host of the [MechMerlin YouTube channel](www.youtube.com/mechmerlin).
|
|
||||||
|
|
||||||
## Keyboard Notes
|
|
||||||
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
|
|
||||||
- Uses ps2avru instead of ps2avrgb
|
|
||||||
- To put in reset mode hold `q` while inserting the USB cable
|
|
||||||
- Use flashing instructions from ps2avrgb QMK port
|
|
||||||
|
|
||||||
## Keymap Notes
|
|
||||||
- Does not support any form of inswitch lighting as Merlin hates them.
|
|
||||||
- Arrow toggle switch to the right of right shift
|
|
||||||
- Reset is FN + Left Shift + R
|
|
||||||
|
|
||||||
### Build
|
|
||||||
To build this keymap, simply run `make facew:mechmerlin` from the qmk_firmware directory.
|
|
|
@ -1,106 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
|
|
||||||
|
|
||||||
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 <avr/io.h>
|
|
||||||
#include <util/delay.h>
|
|
||||||
|
|
||||||
#include "matrix.h"
|
|
||||||
|
|
||||||
#ifndef DEBOUNCE
|
|
||||||
#define DEBOUNCE 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static uint8_t debouncing = DEBOUNCE;
|
|
||||||
|
|
||||||
static matrix_row_t matrix[MATRIX_ROWS];
|
|
||||||
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
|
||||||
|
|
||||||
void matrix_init(void) {
|
|
||||||
// all outputs for rows high
|
|
||||||
DDRB = 0xFF;
|
|
||||||
PORTB = 0xFF;
|
|
||||||
// all inputs for columns
|
|
||||||
DDRA = 0x00;
|
|
||||||
DDRC &= ~(0x111111<<2);
|
|
||||||
DDRD &= ~(1<<PIND7);
|
|
||||||
// all columns are pulled-up
|
|
||||||
PORTA = 0xFF;
|
|
||||||
PORTC |= (0b111111<<2);
|
|
||||||
PORTD |= (1<<PIND7);
|
|
||||||
|
|
||||||
// initialize matrix state: all keys off
|
|
||||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
|
||||||
matrix[row] = 0x00;
|
|
||||||
matrix_debouncing[row] = 0x00;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_set_row_status(uint8_t row) {
|
|
||||||
DDRB = (1 << row);
|
|
||||||
PORTB = ~(1 << row);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t bit_reverse(uint8_t x) {
|
|
||||||
x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
|
|
||||||
x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
|
|
||||||
x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t matrix_scan(void) {
|
|
||||||
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
|
||||||
matrix_set_row_status(row);
|
|
||||||
_delay_us(5);
|
|
||||||
|
|
||||||
matrix_row_t cols = (
|
|
||||||
// cols 0..7, PORTA 0 -> 7
|
|
||||||
(~PINA) & 0xFF
|
|
||||||
) | (
|
|
||||||
// cols 8..13, PORTC 7 -> 0
|
|
||||||
bit_reverse((~PINC) & 0xFF) << 8
|
|
||||||
) | (
|
|
||||||
// col 14, PORTD 7
|
|
||||||
((~PIND) & (1 << PIND7)) << 7
|
|
||||||
);
|
|
||||||
|
|
||||||
if (matrix_debouncing[row] != cols) {
|
|
||||||
matrix_debouncing[row] = cols;
|
|
||||||
debouncing = DEBOUNCE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debouncing) {
|
|
||||||
if (--debouncing) {
|
|
||||||
_delay_ms(1);
|
|
||||||
} else {
|
|
||||||
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
|
||||||
matrix[i] = matrix_debouncing[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
matrix_scan_user();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline matrix_row_t matrix_get_row(uint8_t row) {
|
|
||||||
return matrix[row];
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_print(void) {
|
|
||||||
}
|
|
|
@ -2,20 +2,12 @@
|
||||||
|
|
||||||
A 60% no frills keyboard.
|
A 60% no frills keyboard.
|
||||||
|
|
||||||
The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs
|
The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It is designed and manufactured in Korea.
|
||||||
but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It
|
|
||||||
is designed and manufactured in Korea. It originally uses BootMapperClient for programming but
|
|
||||||
can now also use QMK.
|
|
||||||
|
|
||||||
Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
|
Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
|
||||||
Hardware Supported: FaceW Sprit Edition PCB
|
Hardware Supported: FaceW Sprit Edition PCB
|
||||||
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
|
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
|
||||||
|
|
||||||
## Keyboard Notes
|
|
||||||
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
|
|
||||||
- Uses ps2avru instead of ps2avrgb
|
|
||||||
- To put in reset mode hold `q` while inserting the USB cable
|
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make facew:default
|
make facew:default
|
||||||
|
@ -24,6 +16,8 @@ Flashing
|
||||||
|
|
||||||
ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
|
ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
|
||||||
|
|
||||||
|
**Reset Key:** To put the FaceW into reset, hold `q` (`K01`) while plugging in.
|
||||||
|
|
||||||
Windows:
|
Windows:
|
||||||
1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
|
1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
|
||||||
2. Place your keyboard into reset.
|
2. Place your keyboard into reset.
|
||||||
|
@ -42,12 +36,12 @@ macOS:
|
||||||
```
|
```
|
||||||
3. Install the following packages:
|
3. Install the following packages:
|
||||||
```
|
```
|
||||||
brew install python
|
brew install python3
|
||||||
brew install pyusb
|
pip3 install pyusb
|
||||||
brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
|
brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
|
||||||
|
|
||||||
4. Place your keyboard into reset.
|
4. Place your keyboard into reset.
|
||||||
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
|
5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
|
||||||
|
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
|
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).
|
||||||
|
|
|
@ -31,20 +31,19 @@ F_CPU = 12000000
|
||||||
BOOTLOADER = bootloadHID
|
BOOTLOADER = bootloadHID
|
||||||
|
|
||||||
# build options
|
# build options
|
||||||
BOOTMAGIC_ENABLE = yes
|
BOOTMAGIC_ENABLE = no
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes
|
||||||
EXTRAKEY_ENABLE = yes
|
EXTRAKEY_ENABLE = yes
|
||||||
CONSOLE_ENABLE = yes
|
CONSOLE_ENABLE = yes
|
||||||
COMMAND_ENABLE = yes
|
COMMAND_ENABLE = yes
|
||||||
BACKLIGHT_ENABLE = no
|
BACKLIGHT_ENABLE = yes
|
||||||
RGBLIGHT_ENABLE = no
|
RGBLIGHT_ENABLE = yes
|
||||||
RGBLIGHT_CUSTOM_DRIVER = yes
|
RGBLIGHT_CUSTOM_DRIVER = yes
|
||||||
|
|
||||||
OPT_DEFS = -DDEBUG_LEVEL=0
|
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||||
|
|
||||||
# custom matrix setup
|
# custom matrix setup
|
||||||
CUSTOM_MATRIX = yes
|
SRC = i2c_master.c
|
||||||
SRC = matrix.c i2c.c
|
|
||||||
|
|
||||||
# programming options
|
# programming options
|
||||||
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
|
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
|
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __usbconfig_h_included__
|
#pragma once
|
||||||
#define __usbconfig_h_included__
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
@ -241,8 +240,8 @@ section at the end of this file).
|
||||||
#define USB_CFG_DEVICE_VERSION 0x00, 0x02
|
#define USB_CFG_DEVICE_VERSION 0x00, 0x02
|
||||||
/* Version number of the device: Minor number first, then major number.
|
/* Version number of the device: Minor number first, then major number.
|
||||||
*/
|
*/
|
||||||
#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
|
#define USB_CFG_VENDOR_NAME 'S', 'p', 'r', 'i', 't'
|
||||||
#define USB_CFG_VENDOR_NAME_LEN 13
|
#define USB_CFG_VENDOR_NAME_LEN 5
|
||||||
/* These two values define the vendor name returned by the USB device. The name
|
/* These two values define the vendor name returned by the USB device. The name
|
||||||
* must be given as a list of characters under single quotes. The characters
|
* must be given as a list of characters under single quotes. The characters
|
||||||
* are interpreted as Unicode (UTF-16) entities.
|
* are interpreted as Unicode (UTF-16) entities.
|
||||||
|
@ -251,8 +250,8 @@ section at the end of this file).
|
||||||
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
|
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
|
||||||
* details.
|
* details.
|
||||||
*/
|
*/
|
||||||
#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
|
#define USB_CFG_DEVICE_NAME 'F', 'a', 'c', 'e', 'W'
|
||||||
#define USB_CFG_DEVICE_NAME_LEN 8
|
#define USB_CFG_DEVICE_NAME_LEN 5
|
||||||
/* Same as above for the device name. If you don't want a device name, undefine
|
/* Same as above for the device name. If you don't want a device name, undefine
|
||||||
* the macros. See the file USB-IDs-for-free.txt before you assign a name if
|
* the macros. See the file USB-IDs-for-free.txt before you assign a name if
|
||||||
* you use a shared VID/PID.
|
* you use a shared VID/PID.
|
||||||
|
@ -392,5 +391,3 @@ section at the end of this file).
|
||||||
/* #define USB_INTR_PENDING EIFR */
|
/* #define USB_INTR_PENDING EIFR */
|
||||||
#define USB_INTR_PENDING_BIT INTF1
|
#define USB_INTR_PENDING_BIT INTF1
|
||||||
#define USB_INTR_VECTOR INT1_vect
|
#define USB_INTR_VECTOR INT1_vect
|
||||||
|
|
||||||
#endif /* __usbconfig_h_included__ */
|
|
||||||
|
|
Loading…
Reference in a new issue