Backlight abstraction and other changes (#439)
* redoes matrix pins, abstracts backlight code for B5,6,7 * slimming down keyboard stuff, backlight breathing implemented * don't call backlight init when no pin * cleans up user/kb/quantum calls, keyboard files * fix pvc atomic * replaces CHANNEL with correct var in breathing * removes .hexs, updates readmes, updates template * cleans-up clueboards, readmes to lowercase * updates readme
This commit is contained in:
parent
ba116ceb49
commit
13bb6b4b7f
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,12 +1,10 @@
|
|||||||
keyboards/planck/dfu-programmer.exe
|
|
||||||
.dep
|
.dep
|
||||||
*.o
|
*.o
|
||||||
*.eep
|
*.eep
|
||||||
*.elf
|
*.elf
|
||||||
/*.hex
|
*.hex
|
||||||
/keyboards/**/*.hex
|
!util/bootloader.hex
|
||||||
/keyboards/**/keymaps/**/*.hex
|
!quantum/tools/eeprom_reset.hex
|
||||||
!/keyboards/**/keymaps/**/compiled.hex
|
|
||||||
*.log
|
*.log
|
||||||
*.lss
|
*.lss
|
||||||
*.lst
|
*.lst
|
||||||
|
3
Makefile
3
Makefile
@ -81,8 +81,7 @@ SRC += $(KEYBOARD_FILE) \
|
|||||||
$(KEYMAP_FILE) \
|
$(KEYMAP_FILE) \
|
||||||
$(QUANTUM_DIR)/quantum.c \
|
$(QUANTUM_DIR)/quantum.c \
|
||||||
$(QUANTUM_DIR)/keymap.c \
|
$(QUANTUM_DIR)/keymap.c \
|
||||||
$(QUANTUM_DIR)/keycode_config.c \
|
$(QUANTUM_DIR)/keycode_config.c
|
||||||
$(QUANTUM_DIR)/led.c
|
|
||||||
|
|
||||||
ifndef CUSTOM_MATRIX
|
ifndef CUSTOM_MATRIX
|
||||||
SRC += $(QUANTUM_DIR)/matrix.c
|
SRC += $(QUANTUM_DIR)/matrix.c
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Build Guide
|
# This guide has now been included in the main readme - please reference that one instead.
|
||||||
|
|
||||||
## Build Environment Setup
|
## Build Environment Setup
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ If you have any problems building the firmware, you can try using a tool called
|
|||||||
## Verify Your Installation
|
## Verify Your Installation
|
||||||
1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
|
||||||
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
|
2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
|
||||||
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `README.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
|
3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
|
||||||
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
|
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
|
||||||
|
|
||||||
## Customizing, Building, and Deploying Your Firmware
|
## Customizing, Building, and Deploying Your Firmware
|
||||||
@ -49,7 +49,7 @@ If you have any problems building the firmware, you can try using a tool called
|
|||||||
|
|
||||||
The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
|
The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
|
||||||
|
|
||||||
By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Your .hex file will also be copied into your keymap folder as `compiled.hex`, which isn't ignored by git - this is included in case first-time users are having trouble compiling, and just want to flash a layout via `make dfu-no-build` or using the Teensy loader.
|
By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests.
|
||||||
|
|
||||||
* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc.
|
* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc.
|
||||||
* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`.
|
* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`.
|
||||||
@ -63,7 +63,6 @@ Below is a list of the useful `make` commands in QMK:
|
|||||||
* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles)
|
* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles)
|
||||||
* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ.
|
* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ.
|
||||||
* `keyboard=` and `keymap=` are compatible with this
|
* `keyboard=` and `keymap=` are compatible with this
|
||||||
* `make dfu-no-build` - (requires dfu-programmer) same as `make dfu`, but doesn't build and uses the included `compiled.hex` to flash the keyboard
|
|
||||||
* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root)
|
* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root)
|
||||||
* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root)
|
* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root)
|
||||||
* `make all-keymaps [keyboard=<keyboard>]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `<keyboard>`
|
* `make all-keymaps [keyboard=<keyboard>]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `<keyboard>`
|
||||||
|
@ -306,7 +306,7 @@ If you've done all of these things, keep in mind that sometimes you might have h
|
|||||||
|
|
||||||
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
Now that you have a working board, it's time to get things in their permanent positions. I've often used liberal amounts of hot glue to secure and insulate things, so if that's your style, start spreading that stuff like butter. Otherwise, double-sided tape is always an elegant solution, and electrical tape is a distant second. Due to the nature of these builds, a lot of this part is up to you and how you planned (or didn't plan) things out.
|
||||||
|
|
||||||
There are a lot of possibilities inside the firmware - check out the [README](https://github.com/jackhumbert/qmk_firmware/blob/master/README.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
There are a lot of possibilities inside the firmware - check out the [readme](https://github.com/jackhumbert/qmk_firmware/blob/master/readme.md) for a full feature list, and dive into the different project (Planck, Ergodox EZ, etc) to see how people use all of them. You can always stop by [the OLKB subreddit for help!](http://reddit.com/r/olkb)
|
||||||
|
|
||||||
## Trouble-shooting compiling
|
## Trouble-shooting compiling
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv
|
|||||||
|
|
||||||
Build Firmware and Program Controller
|
Build Firmware and Program Controller
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
See [doc/build.md](tmk_core/doc/build.md), or the README in the particular keyboards/* folder.
|
See [doc/build.md](tmk_core/doc/build.md), or the readme in the particular keyboards/* folder.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Other than having Vagrant and Virtualbox installed and possibly a restart of you
|
|||||||
|
|
||||||
Build Firmware and Program Controller
|
Build Firmware and Program Controller
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
See [/doc/BUIDE_GUIDE.md](/doc/BUILD_GUIDE.md), or the README in the particular keyboards/* folder.
|
See [/doc/BUIDE_GUIDE.md](/doc/BUILD_GUIDE.md), or the readme in the particular keyboards/* folder.
|
||||||
|
|
||||||
Change your keymap
|
Change your keymap
|
||||||
------------------
|
------------------
|
||||||
|
@ -20,15 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define LED_OFF() do { DDRC &= ~(1<<5); PORTC &= ~(1<<5); } while (0)
|
#define LED_OFF() do { DDRC &= ~(1<<5); PORTC &= ~(1<<5); } while (0)
|
||||||
#define LED_TGL() do { DDRC |= (1<<5); PINC |= (1<<5); } while (0)
|
#define LED_TGL() do { DDRC |= (1<<5); PINC |= (1<<5); } while (0)
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
LED_ON();
|
LED_ON();
|
||||||
@ -37,7 +28,3 @@ void matrix_init_kb(void) {
|
|||||||
|
|
||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
Binary file not shown.
@ -1,114 +1 @@
|
|||||||
#include "arrow_pad.h"
|
#include "arrow_pad.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
};
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
bool process_action_user(keyrecord_t *record) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
// put your keyboard start-up code here
|
|
||||||
// runs once when the firmware starts up
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
backlight_init_ports();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
matrix_init_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
// put your looping keyboard code here
|
|
||||||
// runs every cycle (a lot)
|
|
||||||
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool process_action_kb(keyrecord_t *record) {
|
|
||||||
// put your per-action keyboard code here
|
|
||||||
// runs for every action, just before processing by the firmware
|
|
||||||
|
|
||||||
return process_action_user(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
|
||||||
|
|
||||||
led_set_user(usb_led);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
#define CHANNEL OCR1C
|
|
||||||
|
|
||||||
void backlight_init_ports()
|
|
||||||
{
|
|
||||||
|
|
||||||
// Setup PB7 as output and output low.
|
|
||||||
DDRB |= (1<<7);
|
|
||||||
PORTB &= ~(1<<7);
|
|
||||||
|
|
||||||
// Use full 16-bit resolution.
|
|
||||||
ICR1 = 0xFFFF;
|
|
||||||
|
|
||||||
// I could write a wall of text here to explain... but TL;DW
|
|
||||||
// Go read the ATmega32u4 datasheet.
|
|
||||||
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
|
|
||||||
|
|
||||||
// Pin PB7 = OCR1C (Timer 1, Channel C)
|
|
||||||
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
|
|
||||||
// (i.e. start high, go low when counter matches.)
|
|
||||||
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
|
|
||||||
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
|
|
||||||
|
|
||||||
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
|
|
||||||
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
|
|
||||||
|
|
||||||
backlight_init();
|
|
||||||
}
|
|
||||||
|
|
||||||
void backlight_set(uint8_t level)
|
|
||||||
{
|
|
||||||
if ( level == 0 )
|
|
||||||
{
|
|
||||||
// Turn off PWM control on PB7, revert to output low.
|
|
||||||
TCCR1A &= ~(_BV(COM1C1));
|
|
||||||
CHANNEL = 0x0;
|
|
||||||
// Prevent backlight blink on lowest level
|
|
||||||
PORTB &= ~(_BV(PORTB7));
|
|
||||||
}
|
|
||||||
else if ( level == BACKLIGHT_LEVELS )
|
|
||||||
{
|
|
||||||
// Prevent backlight blink on lowest level
|
|
||||||
PORTB &= ~(_BV(PORTB7));
|
|
||||||
// Turn on PWM control of PB7
|
|
||||||
TCCR1A |= _BV(COM1C1);
|
|
||||||
// Set the brightness
|
|
||||||
CHANNEL = 0xFFFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Prevent backlight blink on lowest level
|
|
||||||
PORTB &= ~(_BV(PORTB7));
|
|
||||||
// Turn on PWM control of PB7
|
|
||||||
TCCR1A |= _BV(COM1C1);
|
|
||||||
// Set the brightness
|
|
||||||
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef ARROW_PAD_H
|
#ifndef ARROW_PAD_H
|
||||||
#define ARROW_PAD_H
|
#define ARROW_PAD_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "keymap.h"
|
#include "keymap.h"
|
||||||
#ifdef BACKLIGHT_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
@ -9,10 +10,4 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
bool process_action_user(keyrecord_t *record);
|
|
||||||
void led_set_user(uint8_t usb_led);
|
|
||||||
void backlight_init_ports(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -46,6 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_COL_PINS { B0, B1, B2, B3 }
|
#define MATRIX_COL_PINS { B0, B1, B2, B3 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION ROW2COL
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -46,6 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_COL_PINS { B0, B1, B2, B3 }
|
#define MATRIX_COL_PINS { B0, B1, B2, B3 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION ROW2COL
|
#define DIODE_DIRECTION ROW2COL
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ arrow_pad keyboard firmware
|
|||||||
|
|
||||||
## Quantum MK Firmware
|
## Quantum MK Firmware
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent README.md](/README.md).
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ Depending on which keymap you would like to use, you will have to compile slight
|
|||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
```
|
```
|
@ -1,26 +1,5 @@
|
|||||||
#include "atomic.h"
|
#include "atomic.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
};
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
bool process_action_user(keyrecord_t *record) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void led_set_user(uint8_t usb_led) {
|
|
||||||
// leave this function blank - it can be defined in a keymap file
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
@ -28,298 +7,9 @@ void matrix_init_kb(void) {
|
|||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
backlight_init_ports();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Turn status LED on
|
// Turn status LED on
|
||||||
DDRE |= (1<<6);
|
DDRE |= (1<<6);
|
||||||
PORTE |= (1<<6);
|
PORTE |= (1<<6);
|
||||||
|
|
||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
// put your looping keyboard code here
|
|
||||||
// runs every cycle (a lot)
|
|
||||||
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool process_action_kb(keyrecord_t *record) {
|
|
||||||
// put your per-action keyboard code here
|
|
||||||
// runs for every action, just before processing by the firmware
|
|
||||||
|
|
||||||
return process_action_user(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
|
|
||||||
|
|
||||||
led_set_user(usb_led);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
#define CHANNEL OCR1C
|
|
||||||
#define BREATHING_NO_HALT 0
|
|
||||||
#define BREATHING_HALT_OFF 1
|
|
||||||
#define BREATHING_HALT_ON 2
|
|
||||||
|
|
||||||
static uint8_t breath_intensity;
|
|
||||||
static uint8_t breath_speed;
|
|
||||||
static uint16_t breathing_index;
|
|
||||||
static uint8_t breathing_halt;
|
|
||||||
|
|
||||||
void backlight_init_ports()
|
|
||||||
{
|
|
||||||
|
|
||||||
// Setup PB7 as output and output low.
|
|
||||||
DDRB |= (1<<7);
|
|
||||||
PORTB &= ~(1<<7);
|
|
||||||
|
|
||||||
// Use full 16-bit resolution.
|
|
||||||
ICR1 = 0xFFFF;
|
|
||||||
|
|
||||||
// I could write a wall of text here to explain... but TL;DW
|
|
||||||
// Go read the ATmega32u4 datasheet.
|
|
||||||
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
|
|
||||||
|
|
||||||
// Pin PB7 = OCR1C (Timer 1, Channel C)
|
|
||||||
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
|
|
||||||
// (i.e. start high, go low when counter matches.)
|
|
||||||
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
|
|
||||||
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
|
|
||||||
|
|
||||||
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
|
|
||||||
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
|
|
||||||
|
|
||||||
backlight_init();
|
|
||||||
breathing_defaults();
|
|
||||||
}
|
|
||||||
|
|
||||||
void backlight_set(uint8_t level)
|
|
||||||
{
|
|
||||||
// Prevent backlight blink on lowest level
|
|
||||||
PORTB &= ~(_BV(PORTB7));
|
|
||||||
|
|
||||||
if ( level == 0 )
|
|
||||||
{
|
|
||||||
// Turn off PWM control on PB7, revert to output low.
|
|
||||||
TCCR1A &= ~(_BV(COM1C1));
|
|
||||||
|
|
||||||
// Set the brightness to 0
|
|
||||||
CHANNEL = 0x0;
|
|
||||||
}
|
|
||||||
else if ( level >= BACKLIGHT_LEVELS )
|
|
||||||
{
|
|
||||||
// Turn on PWM control of PB7
|
|
||||||
TCCR1A |= _BV(COM1C1);
|
|
||||||
|
|
||||||
// Set the brightness to max
|
|
||||||
CHANNEL = 0xFFFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Turn on PWM control of PB7
|
|
||||||
TCCR1A |= _BV(COM1C1);
|
|
||||||
|
|
||||||
// Set the brightness
|
|
||||||
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
|
|
||||||
}
|
|
||||||
breathing_intensity_default();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void breathing_enable(void)
|
|
||||||
{
|
|
||||||
if (get_backlight_level() == 0)
|
|
||||||
{
|
|
||||||
breathing_index = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Set breathing_index to be at the midpoint (brightest point)
|
|
||||||
breathing_index = 0x20 << breath_speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
breathing_halt = BREATHING_NO_HALT;
|
|
||||||
|
|
||||||
// Enable breathing interrupt
|
|
||||||
TIMSK1 |= _BV(OCIE1A);
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_pulse(void)
|
|
||||||
{
|
|
||||||
if (get_backlight_level() == 0)
|
|
||||||
{
|
|
||||||
breathing_index = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Set breathing_index to be at the midpoint + 1 (brightest point)
|
|
||||||
breathing_index = 0x21 << breath_speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
breathing_halt = BREATHING_HALT_ON;
|
|
||||||
|
|
||||||
// Enable breathing interrupt
|
|
||||||
TIMSK1 |= _BV(OCIE1A);
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_disable(void)
|
|
||||||
{
|
|
||||||
// Disable breathing interrupt
|
|
||||||
TIMSK1 &= ~_BV(OCIE1A);
|
|
||||||
backlight_set(get_backlight_level());
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_self_disable(void)
|
|
||||||
{
|
|
||||||
if (get_backlight_level() == 0)
|
|
||||||
{
|
|
||||||
breathing_halt = BREATHING_HALT_OFF;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
breathing_halt = BREATHING_HALT_ON;
|
|
||||||
}
|
|
||||||
|
|
||||||
//backlight_set(get_backlight_level());
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_toggle(void)
|
|
||||||
{
|
|
||||||
if (!is_breathing())
|
|
||||||
{
|
|
||||||
if (get_backlight_level() == 0)
|
|
||||||
{
|
|
||||||
breathing_index = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Set breathing_index to be at the midpoint + 1 (brightest point)
|
|
||||||
breathing_index = 0x21 << breath_speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
breathing_halt = BREATHING_NO_HALT;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Toggle breathing interrupt
|
|
||||||
TIMSK1 ^= _BV(OCIE1A);
|
|
||||||
|
|
||||||
// Restore backlight level
|
|
||||||
if (!is_breathing())
|
|
||||||
{
|
|
||||||
backlight_set(get_backlight_level());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_breathing(void)
|
|
||||||
{
|
|
||||||
return (TIMSK1 && _BV(OCIE1A));
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_intensity_default(void)
|
|
||||||
{
|
|
||||||
//breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
|
|
||||||
breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_intensity_set(uint8_t value)
|
|
||||||
{
|
|
||||||
breath_intensity = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_speed_default(void)
|
|
||||||
{
|
|
||||||
breath_speed = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_speed_set(uint8_t value)
|
|
||||||
{
|
|
||||||
bool is_breathing_now = is_breathing();
|
|
||||||
uint8_t old_breath_speed = breath_speed;
|
|
||||||
|
|
||||||
if (is_breathing_now)
|
|
||||||
{
|
|
||||||
// Disable breathing interrupt
|
|
||||||
TIMSK1 &= ~_BV(OCIE1A);
|
|
||||||
}
|
|
||||||
|
|
||||||
breath_speed = value;
|
|
||||||
|
|
||||||
if (is_breathing_now)
|
|
||||||
{
|
|
||||||
// Adjust index to account for new speed
|
|
||||||
breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
|
|
||||||
|
|
||||||
// Enable breathing interrupt
|
|
||||||
TIMSK1 |= _BV(OCIE1A);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_speed_inc(uint8_t value)
|
|
||||||
{
|
|
||||||
if ((uint16_t)(breath_speed - value) > 10 )
|
|
||||||
{
|
|
||||||
breathing_speed_set(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
breathing_speed_set(breath_speed - value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_speed_dec(uint8_t value)
|
|
||||||
{
|
|
||||||
if ((uint16_t)(breath_speed + value) > 10 )
|
|
||||||
{
|
|
||||||
breathing_speed_set(10);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
breathing_speed_set(breath_speed + value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void breathing_defaults(void)
|
|
||||||
{
|
|
||||||
breathing_intensity_default();
|
|
||||||
breathing_speed_default();
|
|
||||||
breathing_halt = BREATHING_NO_HALT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Breathing Sleep LED brighness(PWM On period) table
|
|
||||||
* (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
|
|
||||||
*
|
|
||||||
* http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
|
|
||||||
* (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
|
|
||||||
*/
|
|
||||||
static const uint8_t breathing_table[64] PROGMEM = {
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
|
|
||||||
15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
|
|
||||||
255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
|
|
||||||
15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
ISR(TIMER1_COMPA_vect)
|
|
||||||
{
|
|
||||||
// CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
|
|
||||||
|
|
||||||
if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
|
|
||||||
{
|
|
||||||
// Disable breathing interrupt
|
|
||||||
TIMSK1 &= ~_BV(OCIE1A);
|
|
||||||
}
|
|
||||||
|
|
||||||
CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -24,26 +24,4 @@
|
|||||||
{ K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
|
{ K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
bool process_action_user(keyrecord_t *record);
|
|
||||||
void led_set_user(uint8_t usb_led);
|
|
||||||
void backlight_init_ports(void);
|
|
||||||
|
|
||||||
void breathing_enable(void);
|
|
||||||
void breathing_pulse(void);
|
|
||||||
void breathing_disable(void);
|
|
||||||
void breathing_self_disable(void);
|
|
||||||
void breathing_toggle(void);
|
|
||||||
bool is_breathing(void);
|
|
||||||
|
|
||||||
|
|
||||||
void breathing_defaults(void);
|
|
||||||
void breathing_intensity_default(void);
|
|
||||||
void breathing_speed_default(void);
|
|
||||||
void breathing_speed_set(uint8_t value);
|
|
||||||
void breathing_speed_inc(uint8_t value);
|
|
||||||
void breathing_speed_dec(uint8_t value);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -46,6 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
|
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -46,6 +46,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
|
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define BACKLIGHT_PIN B7
|
||||||
|
#define BACKLIGHT_BREATHING
|
||||||
|
|
||||||
/* COL2ROW or ROW2COL */
|
/* COL2ROW or ROW2COL */
|
||||||
#define DIODE_DIRECTION COL2ROW
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ DIY/Assembled ortholinear 60% keyboard by [Ortholinear Keyboards](http://ortholi
|
|||||||
|
|
||||||
## Quantum MK Firmware
|
## Quantum MK Firmware
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent README.md](/README.md).
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ Depending on which keymap you would like to use, you will have to compile slight
|
|||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
```
|
```
|
@ -1,29 +1 @@
|
|||||||
#include "atreus.h"
|
#include "atreus.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
// put your keyboard start-up code here
|
|
||||||
// runs once when the firmware starts up
|
|
||||||
|
|
||||||
if (matrix_init_user) {
|
|
||||||
(*matrix_init_user)();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
// put your looping keyboard code here
|
|
||||||
// runs every cycle (a lot)
|
|
||||||
|
|
||||||
if (matrix_scan_user) {
|
|
||||||
(*matrix_scan_user)();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef ATREUS_H
|
#ifndef ATREUS_H
|
||||||
#define ATREUS_H
|
#define ATREUS_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "keymap.h"
|
|
||||||
#include "backlight.h"
|
#include "backlight.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
@ -22,7 +22,4 @@
|
|||||||
{ k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
|
{ k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -177,7 +177,7 @@ Depending on which keymap you would like to use, you will have to compile slight
|
|||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
```
|
```
|
@ -1,25 +1 @@
|
|||||||
#include "bantam44.h"
|
#include "bantam44.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
// put your keyboard start-up code here
|
|
||||||
// runs once when the firmware starts up
|
|
||||||
|
|
||||||
matrix_init_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
// put your looping keyboard code here
|
|
||||||
// runs every cycle (a lot)
|
|
||||||
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
#ifndef BANTAM44_H
|
#ifndef BANTAM44_H
|
||||||
#define BANTAM44_H
|
#define BANTAM44_H
|
||||||
|
|
||||||
#include "matrix.h"
|
#include "quantum.h"
|
||||||
#include "keymap.h"
|
|
||||||
#include "backlight.h"
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
// This a shortcut to help you visually see your layout.
|
// This a shortcut to help you visually see your layout.
|
||||||
// The following is an example using the Planck MIT layout
|
// The following is an example using the Planck MIT layout
|
||||||
@ -23,7 +20,4 @@
|
|||||||
{ K30, K31, K32, KC_NO, K33, KC_NO, K34, KC_NO, K35, K36, K37, K38 }, \
|
{ K30, K31, K32, KC_NO, K33, KC_NO, K34, KC_NO, K35, K36, K37, K38 }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -3,7 +3,7 @@ Bantam44 keyboard firmware
|
|||||||
|
|
||||||
## Quantum MK Firmware
|
## Quantum MK Firmware
|
||||||
|
|
||||||
For the full Quantum feature list, see [the parent README.md](/README.md).
|
For the full Quantum feature list, see [the parent readme.md](/readme.md).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ Depending on which keymap you would like to use, you will have to compile slight
|
|||||||
To build with the default keymap, simply run `make`.
|
To build with the default keymap, simply run `make`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
|
||||||
|
|
||||||
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
|
||||||
```
|
```
|
@ -1,8 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
# # project specific files
|
|
||||||
SRC = led.c
|
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
@ -1,19 +1,12 @@
|
|||||||
#include "clueboard1.h"
|
#include "clueboard1.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
void led_set_kb(uint8_t usb_led) {
|
||||||
void matrix_init_user(void) {
|
DDRF |= (1<<0);
|
||||||
// leave these blank
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
}
|
// Turn capslock on
|
||||||
|
PORTF |= (1<<0);
|
||||||
__attribute__ ((weak))
|
} else {
|
||||||
void matrix_scan_user(void) {
|
// Turn capslock off
|
||||||
// leave these blank
|
PORTF &= ~(1<<0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
|
||||||
matrix_init_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
#ifndef CLUEBOARD1_H
|
#ifndef CLUEBOARD1_H
|
||||||
#define CLUEBOARD1_H
|
#define CLUEBOARD1_H
|
||||||
|
|
||||||
#include "matrix.h"
|
#include "quantum.h"
|
||||||
#include "keymap.h"
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Clueboard matrix layout
|
/* Clueboard matrix layout
|
||||||
@ -46,7 +44,4 @@
|
|||||||
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
|
{ k40, k41, k42, k43, KC_NO, k45, k46, KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D, k4E, k4F } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2012 Jun Wako <wakojun@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 "stdint.h"
|
|
||||||
#include "led.h"
|
|
||||||
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
DDRF |= (1<<0);
|
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
|
||||||
// Turn capslock on
|
|
||||||
PORTF |= (1<<0);
|
|
||||||
} else {
|
|
||||||
// Turn capslock off
|
|
||||||
PORTF &= ~(1<<0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
SRC = led.c
|
|
||||||
|
|
||||||
# MCU name
|
# MCU name
|
||||||
#MCU = at90usb1287
|
#MCU = at90usb1287
|
||||||
MCU = atmega32u4
|
MCU = atmega32u4
|
||||||
@ -68,10 +66,6 @@ AUDIO_ENABLE ?= no
|
|||||||
UNICODE_ENABLE ?= no # Unicode
|
UNICODE_ENABLE ?= no # Unicode
|
||||||
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
SRC := backlight.c $(SRC)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ifndef QUANTUM_DIR
|
ifndef QUANTUM_DIR
|
||||||
include ../../Makefile
|
include ../../Makefile
|
||||||
endif
|
endif
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include "backlight.h"
|
|
||||||
#include "print.h"
|
|
||||||
|
|
||||||
/* Clueboard 2.0 LED locations:
|
|
||||||
*
|
|
||||||
* Capslock: B4, pull high to turn on
|
|
||||||
* LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
|
|
||||||
* Page Up: B7, pull high to turn on
|
|
||||||
* Escape: D6, pull high to turn on
|
|
||||||
* Arrows: D4, pull high to turn on
|
|
||||||
*/
|
|
||||||
|
|
||||||
void init_backlight_pin(void) {
|
|
||||||
print("init_backlight_pin()\n");
|
|
||||||
// Set our LED pins as output
|
|
||||||
DDRD |= (1<<6); // Esc
|
|
||||||
DDRB |= (1<<7); // Page Up
|
|
||||||
DDRD |= (1<<4); // Arrows
|
|
||||||
|
|
||||||
// Set our LED pins low
|
|
||||||
PORTD &= ~(1<<6); // Esc
|
|
||||||
PORTB &= ~(1<<7); // Page Up
|
|
||||||
PORTD &= ~(1<<4); // Arrows
|
|
||||||
}
|
|
||||||
|
|
||||||
void backlight_set(uint8_t level) {
|
|
||||||
if ( level == 0 ) {
|
|
||||||
// Turn off light
|
|
||||||
PORTD |= (1<<6); // Esc
|
|
||||||
PORTB |= (1<<7); // Page Up
|
|
||||||
PORTD |= (1<<4); // Arrows
|
|
||||||
} else {
|
|
||||||
// Turn on light
|
|
||||||
PORTD &= ~(1<<6); // Esc
|
|
||||||
PORTB &= ~(1<<7); // Page Up
|
|
||||||
PORTD &= ~(1<<4); // Arrows
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,40 +1,63 @@
|
|||||||
#include "clueboard2.h"
|
#include "clueboard2.h"
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
#include "backlight.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
if (matrix_init_user) {
|
matrix_init_user();
|
||||||
(*matrix_init_user)();
|
|
||||||
}
|
|
||||||
led_init_ports();
|
led_init_ports();
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
|
||||||
init_backlight_pin();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// JTAG disable for PORT F. write JTD bit twice within four cycles.
|
// JTAG disable for PORT F. write JTD bit twice within four cycles.
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
};
|
};
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
void led_init_ports() {
|
||||||
// put your looping keyboard code here
|
// * Set our LED pins as output
|
||||||
// runs every cycle (a lot)
|
DDRB |= (1<<4);
|
||||||
if (matrix_scan_user) {
|
}
|
||||||
(*matrix_scan_user)();
|
|
||||||
}
|
void led_set_kb(uint8_t usb_led) {
|
||||||
};
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
// Turn capslock on
|
||||||
|
PORTB |= (1<<4);
|
||||||
|
} else {
|
||||||
|
// Turn capslock off
|
||||||
|
PORTB &= ~(1<<4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clueboard 2.0 LED locations:
|
||||||
|
*
|
||||||
|
* Capslock: B4, pull high to turn on
|
||||||
|
* LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
|
||||||
|
* Page Up: B7, pull high to turn on
|
||||||
|
* Escape: D6, pull high to turn on
|
||||||
|
* Arrows: D4, pull high to turn on
|
||||||
|
*/
|
||||||
|
|
||||||
|
void backlight_init_ports(void) {
|
||||||
|
print("init_backlight_pin()\n");
|
||||||
|
// Set our LED pins as output
|
||||||
|
DDRD |= (1<<6); // Esc
|
||||||
|
DDRB |= (1<<7); // Page Up
|
||||||
|
DDRD |= (1<<4); // Arrows
|
||||||
|
|
||||||
|
// Set our LED pins low
|
||||||
|
PORTD &= ~(1<<6); // Esc
|
||||||
|
PORTB &= ~(1<<7); // Page Up
|
||||||
|
PORTD &= ~(1<<4); // Arrows
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
if ( level == 0 ) {
|
||||||
|
// Turn off light
|
||||||
|
PORTD |= (1<<6); // Esc
|
||||||
|
PORTB |= (1<<7); // Page Up
|
||||||
|
PORTD |= (1<<4); // Arrows
|
||||||
|
} else {
|
||||||
|
// Turn on light
|
||||||
|
PORTD &= ~(1<<6); // Esc
|
||||||
|
PORTB &= ~(1<<7); // Page Up
|
||||||
|
PORTD &= ~(1<<4); // Arrows
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
#ifndef CLUEBOARD2_H
|
#ifndef CLUEBOARD2_H
|
||||||
#define CLUEBOARD2_H
|
#define CLUEBOARD2_H
|
||||||
|
|
||||||
#include "matrix.h"
|
#include "quantum.h"
|
||||||
#include "keymap.h"
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
/* Clueboard matrix layout
|
/* Clueboard matrix layout
|
||||||
@ -51,7 +49,4 @@
|
|||||||
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
|
{ k90, KC_NO, k92, k93, k94, k95, k96, k97 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -1,9 +1,5 @@
|
|||||||
#include "clueboard2.h"
|
#include "clueboard2.h"
|
||||||
|
|
||||||
#ifdef RGBLIGHT_ENABLE
|
|
||||||
#include "rgblight.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
// Used for SHIFT_ESC
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1,9 +1,5 @@
|
|||||||
#include "clueboard2.h"
|
#include "clueboard2.h"
|
||||||
|
|
||||||
#ifdef ENABLE_RGBLIGHT
|
|
||||||
#include "rgblight.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
// Used for SHIFT_ESC
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2012 Jun Wako <wakojun@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 "stdint.h"
|
|
||||||
#include "led.h"
|
|
||||||
|
|
||||||
|
|
||||||
void led_init_ports() {
|
|
||||||
// * Set our LED pins as output
|
|
||||||
DDRB |= (1<<4);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
|
||||||
// Turn capslock on
|
|
||||||
PORTB |= (1<<4);
|
|
||||||
} else {
|
|
||||||
// Turn capslock off
|
|
||||||
PORTB &= ~(1<<4);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +1,9 @@
|
|||||||
#include "cluepad.h"
|
#include "cluepad.h"
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
// leave these blank
|
|
||||||
};
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// put your keyboard start-up code here
|
// put your keyboard start-up code here
|
||||||
// runs once when the firmware starts up
|
// runs once when the firmware starts up
|
||||||
if (matrix_init_user) {
|
matrix_init_user();
|
||||||
(*matrix_init_user)();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef BACKLIGHT_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
init_backlight_pin();
|
init_backlight_pin();
|
||||||
@ -25,11 +13,3 @@ void matrix_init_kb(void) {
|
|||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
MCUCR |= (1<<JTD);
|
MCUCR |= (1<<JTD);
|
||||||
};
|
};
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
// put your looping keyboard code here
|
|
||||||
// runs every cycle (a lot)
|
|
||||||
if (matrix_scan_user) {
|
|
||||||
(*matrix_scan_user)();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
@ -35,7 +35,4 @@
|
|||||||
{ k40, KC_NO, k42, KC_NO } \
|
{ k40, KC_NO, k42, KC_NO } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
@ -4,16 +4,6 @@
|
|||||||
bool i2c_initialized = 0;
|
bool i2c_initialized = 0;
|
||||||
uint8_t mcp23018_status = 0x20;
|
uint8_t mcp23018_status = 0x20;
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_init_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((weak))
|
|
||||||
void matrix_scan_user(void) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void matrix_init_kb(void) {
|
void matrix_init_kb(void) {
|
||||||
// keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
|
// keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
|
||||||
TCCR1A = 0b10101001; // set and configure fast PWM
|
TCCR1A = 0b10101001; // set and configure fast PWM
|
||||||
@ -37,11 +27,6 @@ void matrix_init_kb(void) {
|
|||||||
matrix_init_user();
|
matrix_init_user();
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_scan_kb(void) {
|
|
||||||
matrix_scan_user();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ergodox_blink_all_leds(void)
|
void ergodox_blink_all_leds(void)
|
||||||
{
|
{
|
||||||
ergodox_led_all_off();
|
ergodox_led_all_off();
|
||||||
|
@ -119,9 +119,4 @@ inline void ergodox_led_all_set(uint8_t n)
|
|||||||
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
|
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_init_user(void);
|
|
||||||
void matrix_scan_user(void);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
/compiled.hex
|
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* algernon's ErgoDox EZ layout, please see the README.md file!
|
* algernon's ErgoDox EZ layout, please see the readme.md file!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ergodox_ez.h"
|
#include "ergodox_ez.h"
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
# BEPO keymap for the ErgoDox
|
# BEPO keymap for the ErgoDox
|
||||||
|
|
||||||
This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this README will be in french.
|
This keymap has been made for the BEPO layout (http://bepo.fr), which is an ergonomic french keyboard layout based on Dvorak rules. As it's made for french people, the following of this readme will be in french.
|
||||||
|
|
||||||
# Disposition BÉPO pour l'ErgoDox
|
# Disposition BÉPO pour l'ErgoDox
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user