You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							357 lines
						
					
					
						
							9.0 KiB
						
					
					
				
			
		
		
	
	
							357 lines
						
					
					
						
							9.0 KiB
						
					
					
				/*
 | 
						|
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/>.
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef CONFIG_H
 | 
						|
#define CONFIG_H
 | 
						|
 | 
						|
#include "config_common.h"
 | 
						|
 | 
						|
#define USB_VENDOR_ID_LENOVO            0x17ef
 | 
						|
#define USB_DEVICE_ID_LENOVO_TPKBD      0x6009
 | 
						|
#define USB_DEVICE_ID_LENOVO_CUSBKBD    0x6047
 | 
						|
#define USB_DEVICE_ID_LENOVO_CBTKBD     0x6048
 | 
						|
#define USB_DEVICE_ID_LENOVO_TPPRODOCK  0x6067
 | 
						|
 | 
						|
/* USB Device descriptor parameter */
 | 
						|
#define VENDOR_ID       USB_VENDOR_ID_LENOVO
 | 
						|
#define PRODUCT_ID      USB_DEVICE_ID_LENOVO_CBTKBD
 | 
						|
#define DEVICE_VER      0x0001
 | 
						|
#define MANUFACTURER    Priyadi
 | 
						|
#define PRODUCT         Promethium Keyboard
 | 
						|
#define DESCRIPTION
 | 
						|
 | 
						|
/* key matrix size */
 | 
						|
#define MATRIX_COLS 6
 | 
						|
#define MATRIX_ROWS 9
 | 
						|
 | 
						|
/* default pin-out */
 | 
						|
#define MATRIX_COL_PINS { F4, F1, F0, D6, D0, D1 }
 | 
						|
#define MATRIX_ROW_PINS { F5, F6, F7 }
 | 
						|
#define TRACKPOINT_PINS { B7, B6, D7 }
 | 
						|
#define UNUSED_PINS
 | 
						|
 | 
						|
/*
 | 
						|
 * Keyboard Matrix Assignments
 | 
						|
 *
 | 
						|
 * Change this to how you wired your keyboard
 | 
						|
 * COLS: AVR pins used for columns, left to right
 | 
						|
 * ROWS: AVR pins used for rows, top to bottom
 | 
						|
 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
 | 
						|
 *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
 | 
						|
 *
 | 
						|
*/
 | 
						|
#define DIODE_DIRECTION COL2ROW
 | 
						|
 | 
						|
// #define BACKLIGHT_PIN B7
 | 
						|
// #define BACKLIGHT_BREATHING
 | 
						|
// #define BACKLIGHT_LEVELS 3
 | 
						|
 | 
						|
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 | 
						|
#define DEBOUNCING_DELAY 5
 | 
						|
 | 
						|
/* define if matrix has ghost (lacks anti-ghosting diodes) */
 | 
						|
//#define MATRIX_HAS_GHOST
 | 
						|
 | 
						|
/* number of backlight levels */
 | 
						|
 | 
						|
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
						|
// #define LOCKING_SUPPORT_ENABLE
 | 
						|
/* Locking resynchronize hack */
 | 
						|
// #define LOCKING_RESYNC_ENABLE
 | 
						|
 | 
						|
/*
 | 
						|
 * Force NKRO
 | 
						|
 *
 | 
						|
 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
 | 
						|
 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
 | 
						|
 * makefile for this to work.)
 | 
						|
 *
 | 
						|
 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
 | 
						|
 * until the next keyboard reset.
 | 
						|
 *
 | 
						|
 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
 | 
						|
 * fully operational during normal computer usage.
 | 
						|
 *
 | 
						|
 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
 | 
						|
 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
 | 
						|
 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
 | 
						|
 * power-up.
 | 
						|
 *
 | 
						|
 */
 | 
						|
//#define FORCE_NKRO
 | 
						|
 | 
						|
/* key combination for command */
 | 
						|
#define IS_COMMAND() ( \
 | 
						|
    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
 | 
						|
)
 | 
						|
 | 
						|
/* control how magic key switches layers */
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS  true
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS  true
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
 | 
						|
 | 
						|
/* override magic key keymap */
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
 | 
						|
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
 | 
						|
//#define MAGIC_KEY_HELP1          H
 | 
						|
//#define MAGIC_KEY_HELP2          SLASH
 | 
						|
//#define MAGIC_KEY_DEBUG          D
 | 
						|
//#define MAGIC_KEY_DEBUG_MATRIX   X
 | 
						|
//#define MAGIC_KEY_DEBUG_KBD      K
 | 
						|
//#define MAGIC_KEY_DEBUG_MOUSE    M
 | 
						|
//#define MAGIC_KEY_VERSION        V
 | 
						|
//#define MAGIC_KEY_STATUS         S
 | 
						|
//#define MAGIC_KEY_CONSOLE        C
 | 
						|
//#define MAGIC_KEY_LAYER0_ALT1    ESC
 | 
						|
//#define MAGIC_KEY_LAYER0_ALT2    GRAVE
 | 
						|
//#define MAGIC_KEY_LAYER0         0
 | 
						|
//#define MAGIC_KEY_LAYER1         1
 | 
						|
//#define MAGIC_KEY_LAYER2         2
 | 
						|
//#define MAGIC_KEY_LAYER3         3
 | 
						|
//#define MAGIC_KEY_LAYER4         4
 | 
						|
//#define MAGIC_KEY_LAYER5         5
 | 
						|
//#define MAGIC_KEY_LAYER6         6
 | 
						|
//#define MAGIC_KEY_LAYER7         7
 | 
						|
//#define MAGIC_KEY_LAYER8         8
 | 
						|
//#define MAGIC_KEY_LAYER9         9
 | 
						|
//#define MAGIC_KEY_BOOTLOADER     PAUSE
 | 
						|
//#define MAGIC_KEY_LOCK           CAPS
 | 
						|
//#define MAGIC_KEY_EEPROM         E
 | 
						|
//#define MAGIC_KEY_NKRO           N
 | 
						|
//#define MAGIC_KEY_SLEEP_LED      Z
 | 
						|
 | 
						|
/*
 | 
						|
 * Feature disable options
 | 
						|
 *  These options are also useful to firmware size reduction.
 | 
						|
 */
 | 
						|
 | 
						|
/* disable debug print */
 | 
						|
// #define NO_DEBUG
 | 
						|
 | 
						|
/* disable print */
 | 
						|
// #define NO_PRINT
 | 
						|
 | 
						|
/* disable action features */
 | 
						|
//#define NO_ACTION_LAYER
 | 
						|
//#define NO_ACTION_TAPPING
 | 
						|
//#define NO_ACTION_ONESHOT
 | 
						|
//#define NO_ACTION_MACRO
 | 
						|
//#define NO_ACTION_FUNCTION
 | 
						|
 | 
						|
#define PS2_MOUSE_INIT_DELAY 2000
 | 
						|
#define BATTERY_PIN 9
 | 
						|
#define BATTERY_POLL 30000
 | 
						|
#define MAX_VOLTAGE 4.2
 | 
						|
#define MIN_VOLTAGE 3.2
 | 
						|
 | 
						|
#define ___ KC_NO
 | 
						|
 | 
						|
#define KEYMAP_CUSTOM( \
 | 
						|
    k11, k12, k13, k14, k15, k16,      k17, k18, k19, k1a, k1b, k1c, \
 | 
						|
    k21, k22, k23, k24, k25, k26,      k27, k28, k29, k2a, k2b, k2c, \
 | 
						|
    k31, k32, k33, k34, k35, k36,      k37, k38, k39, k3a, k3b, k3c, \
 | 
						|
    k41, k42, k43, k44, k45, k46,      k47, k48, k49, k4a, k4b, k4c, \
 | 
						|
                             tp1, tp2, tp3 \
 | 
						|
) \
 | 
						|
{ \
 | 
						|
    {k11, k12, k13, k14, k15, k16}, \
 | 
						|
    {k21, k22, k23, k24, k25, k26}, \
 | 
						|
    {k31, k32, k33, k34, k35, k36}, \
 | 
						|
    {k41, k42, k43, k44, k45, k46}, \
 | 
						|
    {k17, k18, k19, k1a, k1b, k1c}, \
 | 
						|
    {k27, k28, k29, k2a, k2b, k2c}, \
 | 
						|
    {k37, k38, k39, k3a, k3b, k3c}, \
 | 
						|
    {k47, k48, k49, k4a, k4b, k4c}, \
 | 
						|
    {tp1, tp2, tp3, ___, ___, ___}  \
 | 
						|
}
 | 
						|
 | 
						|
#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file
 | 
						|
enum led_sequence {
 | 
						|
  LED_IND_LINUX,
 | 
						|
  LED_IND_APPLE,
 | 
						|
  LED_IND_WINDOWS,
 | 
						|
  LED_IND_QWERTY,
 | 
						|
  LED_IND_ALT,
 | 
						|
  LED_IND_AUDIO,
 | 
						|
  LED_IND_BLUETOOTH,
 | 
						|
  LED_IND_USB,
 | 
						|
 | 
						|
  LED_IND_BATTERY,
 | 
						|
  LED_IND_CAPSLOCK,
 | 
						|
  LED_IND_GUI,
 | 
						|
  LED_IND_FUN,
 | 
						|
  LED_IND_NUM,
 | 
						|
  LED_IND_PUNC,
 | 
						|
  LED_IND_EMOJI,
 | 
						|
  LED_IND_GREEK,
 | 
						|
 | 
						|
  LED_BKSP,
 | 
						|
  LED_ENT,
 | 
						|
  LED_RSFT,
 | 
						|
  LED_RCTL,
 | 
						|
 | 
						|
  LED_RALT,
 | 
						|
  LED_SLSH,
 | 
						|
  LED_SCLN,
 | 
						|
  LED_P,
 | 
						|
 | 
						|
  LED_O,
 | 
						|
  LED_L,
 | 
						|
  LED_DOT,
 | 
						|
  LED_RGUI,
 | 
						|
 | 
						|
  LED_GREEK,
 | 
						|
  LED_COMM,
 | 
						|
  LED_K,
 | 
						|
  LED_I,
 | 
						|
 | 
						|
  LED_U,
 | 
						|
  LED_J,
 | 
						|
  LED_M,
 | 
						|
  LED_FUN,
 | 
						|
 | 
						|
  LED_RSPC,
 | 
						|
  LED_N,
 | 
						|
  LED_HH,
 | 
						|
  LED_Y,
 | 
						|
 | 
						|
  LED_TRACKPOINT3,
 | 
						|
  LED_TRACKPOINT2,
 | 
						|
  LED_TRACKPOINT1,
 | 
						|
 | 
						|
  LED_T,
 | 
						|
  LED_G,
 | 
						|
  LED_B,
 | 
						|
  LED_LSPC,
 | 
						|
 | 
						|
  LED_NUM,
 | 
						|
  LED_V,
 | 
						|
  LED_F,
 | 
						|
  LED_R,
 | 
						|
 | 
						|
  LED_E,
 | 
						|
  LED_D,
 | 
						|
  LED_C,
 | 
						|
  LED_EMPTY,
 | 
						|
 | 
						|
  LED_LGUI,
 | 
						|
  LED_X,
 | 
						|
  LED_S,
 | 
						|
  LED_W,
 | 
						|
 | 
						|
  LED_Q,
 | 
						|
  LED_A,
 | 
						|
  LED_Z,
 | 
						|
  LED_LALT,
 | 
						|
 | 
						|
  LED_LCTL,
 | 
						|
  LED_LSFT,
 | 
						|
  LED_ESC,
 | 
						|
  LED_TAB,
 | 
						|
 | 
						|
  LED_TOTAL
 | 
						|
};
 | 
						|
 | 
						|
#define RGB_DI_PIN B5
 | 
						|
#define RGBSPS_NUM LED_TOTAL
 | 
						|
#endif
 | 
						|
 | 
						|
/* PS/2 mouse */
 | 
						|
#ifdef PS2_USE_BUSYWAIT
 | 
						|
#   define PS2_CLOCK_PORT  PORTD
 | 
						|
#   define PS2_CLOCK_PIN   PIND
 | 
						|
#   define PS2_CLOCK_DDR   DDRD
 | 
						|
#   define PS2_CLOCK_BIT   3
 | 
						|
#   define PS2_DATA_PORT   PORTD
 | 
						|
#   define PS2_DATA_PIN    PIND
 | 
						|
#   define PS2_DATA_DDR    DDRD
 | 
						|
#   define PS2_DATA_BIT    2
 | 
						|
#endif
 | 
						|
 | 
						|
/* PS/2 mouse interrupt version */
 | 
						|
#ifdef PS2_USE_INT
 | 
						|
/* uses INT1 for clock line(ATMega32U4) */
 | 
						|
#define PS2_CLOCK_PORT  PORTD
 | 
						|
#define PS2_CLOCK_PIN   PIND
 | 
						|
#define PS2_CLOCK_DDR   DDRD
 | 
						|
#define PS2_CLOCK_BIT   3
 | 
						|
#define PS2_DATA_PORT   PORTD
 | 
						|
#define PS2_DATA_PIN    PIND
 | 
						|
#define PS2_DATA_DDR    DDRD
 | 
						|
#define PS2_DATA_BIT    2
 | 
						|
 | 
						|
#define PS2_INT_INIT()  do {    \
 | 
						|
    EICRA |= ((1<<ISC31) |      \
 | 
						|
              (0<<ISC30));      \
 | 
						|
} while (0)
 | 
						|
#define PS2_INT_ON()  do {      \
 | 
						|
    EIMSK |= (1<<INT3);         \
 | 
						|
} while (0)
 | 
						|
#define PS2_INT_OFF() do {      \
 | 
						|
    EIMSK &= ~(1<<INT3);        \
 | 
						|
} while (0)
 | 
						|
#define PS2_INT_VECT    INT3_vect
 | 
						|
#endif
 | 
						|
 | 
						|
/* PS/2 mouse USART version */
 | 
						|
#ifdef PS2_USE_USART
 | 
						|
/* XCK for clock line and RXD for data line */
 | 
						|
#define PS2_CLOCK_PORT  PORTD
 | 
						|
#define PS2_CLOCK_PIN   PIND
 | 
						|
#define PS2_CLOCK_DDR   DDRD
 | 
						|
#define PS2_CLOCK_BIT   5
 | 
						|
#define PS2_DATA_PORT   PORTD
 | 
						|
#define PS2_DATA_PIN    PIND
 | 
						|
#define PS2_DATA_DDR    DDRD
 | 
						|
#define PS2_DATA_BIT    2
 | 
						|
 | 
						|
/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
 | 
						|
/* set DDR of CLOCK as input to be slave */
 | 
						|
#define PS2_USART_INIT() do {   \
 | 
						|
    PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);   \
 | 
						|
    PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);     \
 | 
						|
    UCSR1C = ((1 << UMSEL10) |  \
 | 
						|
              (3 << UPM10)   |  \
 | 
						|
              (0 << USBS1)   |  \
 | 
						|
              (3 << UCSZ10)  |  \
 | 
						|
              (0 << UCPOL1));   \
 | 
						|
    UCSR1A = 0;                 \
 | 
						|
    UBRR1H = 0;                 \
 | 
						|
    UBRR1L = 0;                 \
 | 
						|
} while (0)
 | 
						|
#define PS2_USART_RX_INT_ON() do {  \
 | 
						|
    UCSR1B = ((1 << RXCIE1) |       \
 | 
						|
              (1 << RXEN1));        \
 | 
						|
} while (0)
 | 
						|
#define PS2_USART_RX_POLL_ON() do { \
 | 
						|
    UCSR1B = (1 << RXEN1);          \
 | 
						|
} while (0)
 | 
						|
#define PS2_USART_OFF() do {    \
 | 
						|
    UCSR1C = 0;                 \
 | 
						|
    UCSR1B &= ~((1 << RXEN1) |  \
 | 
						|
                (1 << TXEN1));  \
 | 
						|
} while (0)
 | 
						|
#define PS2_USART_RX_READY      (UCSR1A & (1<<RXC1))
 | 
						|
#define PS2_USART_RX_DATA       UDR1
 | 
						|
#define PS2_USART_ERROR         (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
 | 
						|
#define PS2_USART_RX_VECT       USART1_RX_vect
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
#endif
 |