Merge pull request #37 from Wraul/update_phantom

Polishing the Phantom project
master
tmk 2013-05-27 15:57:30 -07:00
commit ce950736a2
12 changed files with 467 additions and 92 deletions

View File

@ -120,3 +120,18 @@ VPATH += $(TOP_DIR)
include $(TOP_DIR)/protocol/lufa.mk include $(TOP_DIR)/protocol/lufa.mk
include $(TOP_DIR)/common.mk include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk include $(TOP_DIR)/rules.mk
ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all
ansi_150: OPT_DEFS += -DLAYOUT_ANSI_150
ansi_150: all
iso: OPT_DEFS += -DLAYOUT_ISO
iso: all
iso_150: OPT_DEFS += -DLAYOUT_ISO_150
iso_150: all
7bit: OPT_DEFS += -DLAYOUT_7BIT
7bit: all

View File

@ -91,3 +91,18 @@ VPATH += $(TOP_DIR)
include $(TOP_DIR)/protocol/pjrc.mk include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk include $(TOP_DIR)/rules.mk
ansi: OPT_DEFS += -DLAYOUT_ANSI
ansi: all
ansi_150: OPT_DEFS += -DLAYOUT_ANSI_150
ansi_150: all
iso: OPT_DEFS += -DLAYOUT_ISO
iso: all
iso_150: OPT_DEFS += -DLAYOUT_ISO_150
iso_150: all
7bit: OPT_DEFS += -DLAYOUT_7BIT
7bit: all

View File

@ -0,0 +1,247 @@
Phantom keyboard firmware
======================
DIY keyboard developed by Geekhack and Deskthority communities.
The PCB was engineered by bpiphany from the original idea of HaveANiceDay.
## Wiki on Deskthority.net
- [Info](http://deskthority.net/wiki/Phantom)
- [Assembly Instructions](http://deskthority.net/wiki/Phantom)
Build
-----
Move to this directory then just run `make` like:
$ make -f Makefile.[pjrc|lufa] [ansi|ansi_150|iso|iso_150|7bit]
Use `Makefile.pjrc` if you want to use PJRC stack or use `Makefile.lufa` for LUFA stack.
LEDs
----
It is possible to configure the LEDs in 2 different ways.
### 1. LED Brightness
The brightness of the LEDs can be controlled by software.
To select brightness edit [config.h](config.h) and set `LED_BRIGHTNESS` to a value
between 0 and 255:
#define LED_BRIGHTNESS 250
### 2. Sleep LED
It is possible to have the LEDs fade in and out when the computer is suspended.
To enable this feature, uncoment the `SLEEP_LED_ENABLE` line in the makefile you are using:
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
*Note that this will set the LEDs to full brightness as this feature can't be combined with the brightness control.*
Keymap
------
The PCB supports multiple physical layouts.
Each layout have their own keymap file.
*Note that only the ANSI keymap is tested on actual hardware.*
To customize a keymap:
1. Edit the file that corresponds to your layout.
2. Specify your layout when building.
See [keymap.c](keymap.c) to define your own custom layout.
### 1. ANSI
This is the default keymap.
See [keymap_ansi.h](keymap_ansi.h) for detail.
#### 1.0. ANSI Default Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
|~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
|-----------------------------------------------------------| |-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
|-----------------------------------------------------------| '-----------'
|Fn0 | A| S| D| F| G| H| J| K| L| ;| '|Return |
|-----------------------------------------------------------| ,---.
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
|-----------------------------------------------------------| ,-----------.
|Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
#### 1.1. ANSI Media Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | |Slp|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | |Mut|V- |V+ | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | |Stp|Ply|Prv|Nxt|Media| | | | |
|-----------------------------------------------------------| '-----------'
| | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---.
| | | |Clc| | | | | | | |Caps | | |
|-----------------------------------------------------------| ,-----------.
| | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'
### 2. ANSI 150
Layout with 1.5 unit modifiers.
See [keymap_ansi_150.h](keymap_ansi_150.h) for detail.
#### 2.0. ANSI 150 Default Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
|~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
|-----------------------------------------------------------| |-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
|-----------------------------------------------------------| '-----------'
|Fn0 | A| S| D| F| G| H| J| K| L| ;| '|Return |
|-----------------------------------------------------------| ,---.
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
|-----------------------------------------------------------| ,-----------.
|Ctl |Gui|Alt | Space |Alt |Gui|Ctl | |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
#### 2.1. ANSI 150 Media Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | |Slp|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | |Mut|V- |V+ | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | |Stp|Ply|Prv|Nxt|Media| | | | |
|-----------------------------------------------------------| '-----------'
| | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---.
| | | |Clc| | | | | | | |Caps | | |
|-----------------------------------------------------------| ,-----------.
| | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'
### 3. ISO
ISO layout.
See [keymap_iso.h](keymap_iso.h) for detail.
#### 3.0. ISO Default Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
|~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
|-----------------------------------------------------------| |-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |Del|End|PgD|
|------------------------------------------------------` Ret| '-----------'
|Fn0 | A| S| D| F| G| H| J| K| L| ;| '| #| |
|-----------------------------------------------------------| ,---.
|Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
|-----------------------------------------------------------| ,-----------.
|Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
#### 3.1. ISO Media Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | |Slp|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | |Mut|V- |V+ | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | |Stp|Ply|Prv|Nxt| | | | | |
|------------------------------------------------------` Med| '-----------'
| | | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---.
| | | | |Clc| | | | | | | |Caps | | |
|-----------------------------------------------------------| ,-----------.
| | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'
### 4. ISO 150
ISO layout with 1.5 unit modifiers.
See [keymap_iso_150.h](keymap_iso_150.h) for detail.
#### 4.0. ISO 150 Default Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
|~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU|
|-----------------------------------------------------------| |-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | |Del|End|PgD|
|------------------------------------------------------` Ret| '-----------'
|Fn0 | A| S| D| F| G| H| J| K| L| ;| '| #| |
|-----------------------------------------------------------| ,---.
|Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
|-----------------------------------------------------------| ,-----------.
|Ctl |Gui|Alt | Space |Alt |Gui|Ctl | |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
#### 4.1. ISO 150 Media Layer
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | |Slp|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | |Mut|V- |V+ | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | |Stp|Ply|Prv|Nxt| | | | | |
|------------------------------------------------------` Med| '-----------'
| | | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---.
| | | | |Clc| | | | | | | |Caps | | |
|-----------------------------------------------------------| ,-----------.
| | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'
### 5. 7bit
Layout using all the available keys on the PCB.
This keymap is only provided as an example of what can be done using this layout.
No real thought has been put into this keymap.
See [keymap_7bit.h](keymap_7bit.h) for detail.
#### 5.0. 7bit Default Layer
,-----------------------------------------------------------. ,-----------.
|Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|V- |V+ | |PrS|ScL|Pau|
`-----------------------------------------------------------' `-----------'
,-----------------------------------------------------------. ,-----------.
|~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| (| )| |Ins|Hom|PgU|
|-----------------------------------------------------------| |-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs| |Del|End|PgD|
|-----------------------------------------------------------| |-----------|
|Fn0 | A| S| D| F| G| H| J| K| L| ;| '| \| Ret| |Stp|Ply|Med|
|-----------------------------------------------------------| |-----------|
|Cap|Shif| Z| X| C| V| B| N| M| ,| .| /|Shift |Cap| |Prv|Up |Nxt|
|-----------------------------------------------------------| |-----------|
|Ctrl |Gui|Alt |Spc |Bspc |Del|Ret |Alt |Gui |App|Ctrl | |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
#### 5.1. 7bit Media Layer
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | | | | | | | | | |Slp|
`-----------------------------------------------------------' `-----------'
,-----------------------------------------------------------. ,-----------.
| | | | | | | | | | |Mut|V- |V+ | | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | |Stp|Ply|Prv|Nxt|Media| | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| |-----------|
| | | | | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'

View File

@ -39,6 +39,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if need no debouncing */ /* Set 0 if need no debouncing */
#define DEBOUNCE 7 #define DEBOUNCE 7
/* Set LED brightness 0-255.
* This have no effect if sleep LED is enabled. */
#define LED_BRIGHTNESS 250
/* key combination for command */ /* key combination for command */
#define IS_COMMAND() ( \ #define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \

View File

@ -26,13 +26,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "action_macro.h" #include "action_macro.h"
#include "report.h" #include "report.h"
#include "host.h" #include "host.h"
#include "print.h"
#include "debug.h" #include "debug.h"
#include "keymap.h" #include "keymap.h"
// Convert physical keyboard layout to matrix array. // Convert physical keyboard layout to matrix array.
// This is a macro to define keymap easily in keyboard layout form. // This is a macro to define keymap easily in keyboard layout form.
// Use this for 7bit layout.
#define KEYMAP( \ #define KEYMAP( \
K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, \ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, \
K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, \ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, \
@ -42,12 +40,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K0A, K0B, K0C, K0D, K0F, K0G, K0H, K0K, K0L, K0M, K0N, K0P, K0Q, K0R \ K0A, K0B, K0C, K0D, K0F, K0G, K0H, K0K, K0L, K0M, K0N, K0P, K0Q, K0R \
) { \ ) { \
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */ \ /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */ \
/* 0 */ { KC_##K0A, KC_##K0B, KC_##K0C, KC_##K5B, KC_##K0D, KC_##K0F, KC_##K5G, KC_##K0G, KC_##K0H, KC_NO, KC_##K0K, KC_##K0L, KC_##K0M, KC_##K0N, KC_##K0P, KC_##K0Q, KC_##K0R}, \ /* 5 */ { KC_##K5A, KC_##K4A, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F, KC_##K5H, KC_##K5I, KC_##K5J, KC_##K5K, KC_##K5L, KC_##K5M, KC_##K5N, KC_##K5O, KC_##K5P, KC_##K5Q, KC_##K5R}, \
/* 1 */ { KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F, KC_##K1G, KC_##K1H, KC_##K1I, KC_##K1J, KC_##K1K, KC_##K1L, KC_##K1M, KC_##K1N, KC_##K1P, KC_##K1Q, KC_##K1R}, \
/* 2 */ { KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F, KC_##K2G, KC_##K2H, KC_##K2I, KC_##K2J, KC_##K2K, KC_##K2L, KC_##K2M, KC_##K2N, KC_##K2P, KC_##K2Q, KC_##K2R}, \
/* 3 */ { KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F, KC_##K3G, KC_##K3H, KC_##K3I, KC_##K3J, KC_##K3K, KC_##K3L, KC_##K3M, KC_##K3N, KC_##K3P, KC_##K3Q, KC_##K3R}, \
/* 4 */ { KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F, KC_##K4G, KC_##K4H, KC_##K4I, KC_##K4J, KC_##K4K, KC_##K4L, KC_##K4M, KC_##K4N, KC_##K4O, KC_##K4P, KC_##K4Q, KC_##K4R}, \ /* 4 */ { KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F, KC_##K4G, KC_##K4H, KC_##K4I, KC_##K4J, KC_##K4K, KC_##K4L, KC_##K4M, KC_##K4N, KC_##K4O, KC_##K4P, KC_##K4Q, KC_##K4R}, \
/* 5 */ { KC_##K5A, KC_##K4A, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F, KC_##K5H, KC_##K5I, KC_##K5J, KC_##K5K, KC_##K5L, KC_##K5M, KC_##K5N, KC_##K5O, KC_##K5P, KC_##K5Q, KC_##K5R} \ /* 3 */ { KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F, KC_##K3G, KC_##K3H, KC_##K3I, KC_##K3J, KC_##K3K, KC_##K3L, KC_##K3M, KC_##K3N, KC_##K3P, KC_##K3Q, KC_##K3R}, \
/* 2 */ { KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F, KC_##K2G, KC_##K2H, KC_##K2I, KC_##K2J, KC_##K2K, KC_##K2L, KC_##K2M, KC_##K2N, KC_##K2P, KC_##K2Q, KC_##K2R}, \
/* 1 */ { KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F, KC_##K1G, KC_##K1H, KC_##K1I, KC_##K1J, KC_##K1K, KC_##K1L, KC_##K1M, KC_##K1N, KC_##K1P, KC_##K1Q, KC_##K1R}, \
/* 0 */ { KC_##K0A, KC_##K0B, KC_##K0C, KC_##K5B, KC_##K0D, KC_##K0F, KC_##K5G, KC_##K0G, KC_##K0H, KC_NO, KC_##K0K, KC_##K0L, KC_##K0M, KC_##K0N, KC_##K0P, KC_##K0Q, KC_##K0R} \
} }
#define KEYMAP_ANSI( \ #define KEYMAP_ANSI( \
@ -114,68 +112,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K0A, K0B, K0C, NO, NO, K0G, NO, NO, K0L, K0M, K0N, K0P, K0Q, K0R \ K0A, K0B, K0C, NO, NO, K0G, NO, NO, K0L, K0M, K0N, K0P, K0Q, K0R \
) )
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #if defined(LAYOUT_7BIT)
/* Layer 0: Default Layer #include "keymap_7bit.h"
* #elif defined(LAYOUT_ISO_150)
* ANSI: #include "keymap_iso_150.h"
* #elif defined(LAYOUT_ISO)
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. #include "keymap_iso.h"
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| #elif defined(LAYOUT_ANSI_150)
* `---' `---------------' `---------------' `---------------' `-----------' #include "keymap_ansi_150.h"
* ,-----------------------------------------------------------. ,-----------. #else
* |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU| #include "keymap_ansi.h"
* |-----------------------------------------------------------| |-----------| #endif
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD|
* |-----------------------------------------------------------| '-----------'
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,---.
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
* |-----------------------------------------------------------| ,-----------.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
* `-----------------------------------------------------------' `-----------'
*/
KEYMAP_ANSI(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT),
/* Overlay 1
*
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* | | | | | | | | | | | | | | | | | | | |Slp|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------.
* | | | | | | | | | | |Mut|V- |V+ | | | | | |
* |-----------------------------------------------------------| |-----------|
* | | | | | | | | | |MSt|Ply|Prv|Nxt|Media| | | | |
* |-----------------------------------------------------------| '-----------'
* | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,---.
* | | | |Clc| | | | | | | |Caps | | |
* |-----------------------------------------------------------| ,-----------.
* | | | | | | | | | | | | |
* `-----------------------------------------------------------' `-----------'
*/
KEYMAP_ANSI(\
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS, TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
/*
* Fn action definition
*/
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1)
};
#define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0])) #define KEYMAPS_SIZE (sizeof(keymaps) / sizeof(keymaps[0]))
#define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0])) #define FN_ACTIONS_SIZE (sizeof(fn_actions) / sizeof(fn_actions[0]))

View File

@ -0,0 +1,42 @@
// Phantom 7bit
/*
* 7bit:
*
* ,-----------------------------------------------------------. ,-----------.
* |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|V- |V+ | |PrS|ScL|Pau|
* `-----------------------------------------------------------' `-----------'
* ,-----------------------------------------------------------. ,-----------.
* |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| (| )| |Ins|Hom|PgU|
* |-----------------------------------------------------------| |-----------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs| |Del|End|PgD|
* |-----------------------------------------------------------| |-----------|
* |Fn0 | A| S| D| F| G| H| J| K| L| ;| '| \| Ret| |MSt|Ply|Med|
* |-----------------------------------------------------------| |-----------|
* |Cap|Shif| Z| X| C| V| B| N| M| ,| .| /|Shift |Cap| |Prv|Up |Nxt|
* |-----------------------------------------------------------| |-----------|
* |Ctrl |Gui|Alt |Spc |Bspc |Del|Ret |Alt |Gui |App|Ctrl | |Lef|Dow|Rig|
* `-----------------------------------------------------------' `-----------'
*/
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty + a few media keys */
KEYMAP(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, VOLD,VOLU, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, FN1, FN2, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT,BSLS,ENT, MSTP,MPLY,MSEL, \
CAPS,LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,CAPS, MPRV,UP, MNXT, \
LCTL,LGUI,LALT,SPC, BSPC,DEL, ENT, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT),
/* 1: media keys */
KEYMAP(\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU,TRNS,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1),
[1] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
[2] = ACTION_MODS_KEY(MOD_LSFT, KC_0)
};

View File

@ -0,0 +1,22 @@
// Phantom ANSI
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP_ANSI(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT),
/* 1: media keys */
KEYMAP_ANSI(\
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS, TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1)
};

View File

@ -0,0 +1,22 @@
// Phantom ANSI 150
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP_ANSI_150(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,RCTL, LEFT,DOWN,RGHT),
/* 1: media keys */
KEYMAP_ANSI_150(\
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU,TRNS, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS, TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1)
};

View File

@ -0,0 +1,22 @@
// Phantom ISO
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP_ISO(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT),
/* 1: media keys */
KEYMAP_ISO(\
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1)
};

View File

@ -0,0 +1,22 @@
// Phantom ISO 150
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP_ISO_150(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, DEL, END, PGDN, \
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, \
LCTL,LGUI,LALT, SPC, RALT,RGUI,RCTL, LEFT,DOWN,RGHT),
/* 1: media keys */
KEYMAP_ISO_150(\
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,SLEP, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MUTE,VOLD,VOLU, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,MSTP,MPLY,MPRV,MNXT,MSEL, TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,CALC,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS)
};
static const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1)
};

View File

@ -16,19 +16,34 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <avr/io.h> #include <avr/io.h>
#include "stdint.h"
#include "led.h" #include "led.h"
void led_set(uint8_t usb_led) void led_set(uint8_t usb_led)
{ {
if (!(usb_led & (1<<USB_LED_CAPS_LOCK))) if (usb_led & (1<<USB_LED_CAPS_LOCK))
DDRB &= ~(1<<6); {
else // Output high.
DDRB |= (1<<6); DDRB |= (1<<6);
PORTB |= (1<<6);
if (!(usb_led & (1<<USB_LED_SCROLL_LOCK))) }
DDRB &= ~(1<<7);
else else
DDRB |= (1<<7); {
// Output low.
DDRB &= ~(1<<6);
PORTB &= ~(1<<6);
}
if (usb_led & (1<<USB_LED_SCROLL_LOCK))
{
// Output high.
DDRB &= ~(1<<7);
PORTB |= (1<<7);
}
else
{
// Output low.
DDRB &= ~(1<<7);
PORTB &= ~(1<<7);
}
} }

View File

@ -32,6 +32,7 @@ static void init_rows(void);
static void unselect_cols(void); static void unselect_cols(void);
static void select_col(uint8_t col); static void select_col(uint8_t col);
#ifndef SLEEP_LED_ENABLE
/* LEDs are on output compare pins OC1B OC1C /* LEDs are on output compare pins OC1B OC1C
This activates fast PWM mode on them. This activates fast PWM mode on them.
Prescaler 256 and 8-bit counter results in Prescaler 256 and 8-bit counter results in
@ -51,12 +52,13 @@ void setup_leds(void)
TCCR1B |= // Timer control register 1B TCCR1B |= // Timer control register 1B
(1<<WGM12) | // Fast PWM 8-bit (1<<WGM12) | // Fast PWM 8-bit
(1<<CS12); // Prescaler 256 (1<<CS12); // Prescaler 256
OCR1B = 250; // Output compare register 1B OCR1B = LED_BRIGHTNESS; // Output compare register 1B
OCR1C = 250; // Output compare register 1C OCR1C = LED_BRIGHTNESS; // Output compare register 1C
// LEDs: LED_A -> PORTB6, LED_B -> PORTB7 // LEDs: LED_A -> PORTB6, LED_B -> PORTB7
DDRB &= 0x3F; DDRB |= (1<<6) | (1<<7);
PORTB &= 0x3F; PORTB &= ~((1<<6) | (1<<7));
} }
#endif
inline inline
uint8_t matrix_rows(void) uint8_t matrix_rows(void)
@ -79,7 +81,9 @@ void matrix_init(void)
// initialize row and col // initialize row and col
unselect_cols(); unselect_cols();
init_rows(); init_rows();
#ifndef SLEEP_LED_ENABLE
setup_leds(); setup_leds();
#endif
// initialize matrix state: all keys off // initialize matrix state: all keys off
for (uint8_t i = 0; i < MATRIX_ROWS; i++) { for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
@ -100,7 +104,7 @@ uint8_t matrix_scan(void)
if (prev_bit != curr_bit) { if (prev_bit != curr_bit) {
matrix_debouncing[row] ^= ((matrix_row_t)1<<col); matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
if (debouncing) { if (debouncing) {
debug("bounce!: "); debug_hex(debouncing); print("\n"); dprint("bounce!: "); dprintf("%02X", debouncing); dprintln();
} }
debouncing = DEBOUNCE; debouncing = DEBOUNCE;
} }
@ -143,9 +147,7 @@ void matrix_print(void)
{ {
print("\nr/c 0123456789ABCDEF\n"); print("\nr/c 0123456789ABCDEF\n");
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
phex(row); print(": "); xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
print_bin_reverse32(matrix_get_row(row));
print("\n");
} }
} }
@ -160,7 +162,7 @@ uint8_t matrix_key_count(void)
/* Row pin configuration /* Row pin configuration
* row: 0 1 2 3 4 5 * row: 0 1 2 3 4 5
* pin: B0 B1 B2 B3 B4 B5 * pin: B5 B4 B3 B2 B1 B0
*/ */
static void init_rows(void) static void init_rows(void)
{ {
@ -171,12 +173,12 @@ static void init_rows(void)
static uint8_t read_rows(void) static uint8_t read_rows(void)
{ {
return (PINB&(1<<0) ? 0 : (1<<0)) | return (PINB&(1<<5) ? 0 : (1<<0)) |
(PINB&(1<<1) ? 0 : (1<<1)) | (PINB&(1<<4) ? 0 : (1<<1)) |
(PINB&(1<<2) ? 0 : (1<<2)) | (PINB&(1<<3) ? 0 : (1<<2)) |
(PINB&(1<<3) ? 0 : (1<<3)) | (PINB&(1<<2) ? 0 : (1<<3)) |
(PINB&(1<<4) ? 0 : (1<<4)) | (PINB&(1<<1) ? 0 : (1<<4)) |
(PINB&(1<<5) ? 0 : (1<<5)); (PINB&(1<<0) ? 0 : (1<<5));
} }
/* Column pin configuration /* Column pin configuration