aboutsummaryrefslogtreecommitdiff
path: root/keyboards/le_chiffre
diff options
context:
space:
mode:
authortominabox1 <tom.campie@gmail.com>2020-05-08 17:54:55 -0500
committerGitHub <noreply@github.com>2020-05-08 23:54:55 +0100
commitfedd8e81d1a0033c11c2a733e31037d36c798c81 (patch)
tree531f4811894458f3cc0749a768622440de318707 /keyboards/le_chiffre
parentadda5d77707ea8f73d3d717f88802031b3f3fe27 (diff)
downloadqmk_firmware-fedd8e81d1a0033c11c2a733e31037d36c798c81.tar.gz
qmk_firmware-fedd8e81d1a0033c11c2a733e31037d36c798c81.zip
Add Le Chiffre keyboard (#8995)
* Initial * update json, added basic oled config, updated matrix to correct rotary location * disable oled by default * Tuned oled for release * Completed OLED function implementation Correct spelling error in readme * Fixed image in readme * Should not be in this branch * Incorporating recommended changes by zvecr * Update keyboards/le_chiffre/info.json Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/le_chiffre/readme.md Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com> Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Diffstat (limited to 'keyboards/le_chiffre')
-rw-r--r--keyboards/le_chiffre/config.h46
-rw-r--r--keyboards/le_chiffre/info.json15
-rw-r--r--keyboards/le_chiffre/keymaps/default/keymap.c142
-rw-r--r--keyboards/le_chiffre/keymaps/default/readme.md1
-rw-r--r--keyboards/le_chiffre/le_chiffre.c1
-rw-r--r--keyboards/le_chiffre/le_chiffre.h18
-rw-r--r--keyboards/le_chiffre/readme.md15
-rw-r--r--keyboards/le_chiffre/rules.mk22
8 files changed, 260 insertions, 0 deletions
diff --git a/keyboards/le_chiffre/config.h b/keyboards/le_chiffre/config.h
new file mode 100644
index 000000000..1ab07a645
--- /dev/null
+++ b/keyboards/le_chiffre/config.h
@@ -0,0 +1,46 @@
1#pragma once
2
3#include "config_common.h"
4
5/* USB Device descriptor parameter */
6#define VENDOR_ID 0xFEED
7#define PRODUCT_ID 0xD645
8#define DEVICE_VER 0x0001
9#define MANUFACTURER tominabox1
10#define PRODUCT Le Chiffre
11
12/* key matrix size */
13#define MATRIX_ROWS 4
14#define MATRIX_COLS 10
15
16/*
17 * Keyboard Matrix Assignments
18 *
19 * Change this to how you wired your keyboard
20 * COLS: AVR pins used for columns, left to right
21 * ROWS: AVR pins used for rows, top to bottom
22 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
23 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
24 *
25 */
26#define MATRIX_ROW_PINS { B3, D4, F1, C6 }
27#define MATRIX_COL_PINS { F4, F5, B0, B2, B1, B4, D7, C7, D2, F7 }
28#define UNUSED_PINS
29
30/* COL2ROW, ROW2COL*/
31#define DIODE_DIRECTION ROW2COL
32
33/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
34#define DEBOUNCE 5
35
36/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
37#define LOCKING_SUPPORT_ENABLE
38/* Locking resynchronize hack */
39#define LOCKING_RESYNC_ENABLE
40
41/* Define encoder pads */
42#define ENCODERS_PAD_A { D5 }
43#define ENCODERS_PAD_B { D3 }
44
45/* #define RGB_DI_PIN F0
46 #define RGBLED_NUM 1 */
diff --git a/keyboards/le_chiffre/info.json b/keyboards/le_chiffre/info.json
new file mode 100644
index 000000000..eda303ffc
--- /dev/null
+++ b/keyboards/le_chiffre/info.json
@@ -0,0 +1,15 @@
1{
2 "keyboard_name": "le_chiffre",
3 "url": "",
4 "maintainer": "tominabox1",
5 "width": 11,
6 "height": 4,
7 "layouts": {
8 "LAYOUT": {
9 "layout": [{"label":"Q", "x":0, "y":0}, {"label":"W", "x":1, "y":0}, {"label":"E", "x":2, "y":0}, {"label":"R", "x":3, "y":0}, {"label":"T", "x":4, "y":0}, {"label":"Rotary", "x":5, "y":0, "w":1}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0},
10 {"label":"A", "x":0, "y":1}, {"label":"S", "x":1, "y":1}, {"label":"D", "x":2, "y":1}, {"label":"F", "x":3, "y":1}, {"label":"G", "x":4, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1},
11 {"label":";", "x":10, "y":1}, {"label":"Z", "x":0, "y":2}, {"label":"X", "x":1, "y":2}, {"label":"C", "x":2, "y":2}, {"label":"V", "x":3, "y":2}, {"label":"B", "x":4, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":"<", "x":8, "y":2}, {"label":">", "x":9, "y":2}, {"label":"?", "x":10, "y":2},
12 {"label":"", "x":1.75, "y":3, "w":1.25}, {"label":"", "x":3, "y":3, "w":2}, {"label":"", "x":6, "y":3, "w":2}, {"label":"", "x":8, "y":3, "w":1.25}]
13 }
14 }
15}
diff --git a/keyboards/le_chiffre/keymaps/default/keymap.c b/keyboards/le_chiffre/keymaps/default/keymap.c
new file mode 100644
index 000000000..d5ca6969d
--- /dev/null
+++ b/keyboards/le_chiffre/keymaps/default/keymap.c
@@ -0,0 +1,142 @@
1#include QMK_KEYBOARD_H
2
3enum layers{
4 _BASE,
5 _NUM_SYM,
6 _NAV
7};
8
9#define KC_NUM_SPC LT(_NUM_SYM, KC_SPC)
10#define KC_GA LGUI_T(KC_A)
11#define KC_AS LALT_T(KC_S)
12#define KC_CD LCTL_T(KC_D)
13#define KC_SF LSFT_T(KC_F)
14#define KC_SJ RSFT_T(KC_J)
15#define KC_CK RCTL_T(KC_K)
16#define KC_AL RALT_T(KC_L)
17#define KC_GSCLN RGUI_T(KC_SCLN)
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [_BASE] = LAYOUT(
21 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MPLY, KC_Y, KC_U, KC_I, KC_O, KC_P,
22 KC_GA, KC_AS, KC_CD, KC_SF, KC_G, KC_H, KC_SJ, KC_CK, KC_AL, KC_GSCLN,
23 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
24 KC_LCTL, KC_ENT, KC_NUM_SPC, MO(_NAV)
25 ),
26
27 [_NUM_SYM] = LAYOUT(
28 KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0,
29 KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS,
30 KC_BSLS,KC_LCBR, KC_LBRC, KC_LPRN, KC_UNDS, KC_RPRN, KC_RBRC, KC_RCBR, KC_DOT, KC_GRV,
31 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS
32 ),
33
34 [_NAV] = LAYOUT(
35 RESET, _______, AG_NORM, AG_SWAP, DEBUG, KC_TRNS, KC_GRV, KC_PGDN, KC_UP, KC_PGUP, KC_SCLN,
36 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
37 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_MINS, KC_RO, KC_COMM, KC_DOT, KC_BSLS,
38 KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
39 ),
40};
41
42void encoder_update_user(uint8_t index, bool clockwise) {
43 if (index == 0) {
44 if (clockwise) {
45 tap_code(KC_MNXT);
46 } else {
47 tap_code(KC_MPRV);
48 }
49 }
50}
51
52#ifdef OLED_DRIVER_ENABLE
53oled_rotation_t oled_init_user(oled_rotation_t rotation) {
54 return OLED_ROTATION_90; // flips the display 180 degrees if offhand
55}
56
57void oled_task_user(void) {
58 static const char PROGMEM base_logo[] = {
59 // 'base', 32x128px
60 0x00, 0x00, 0x80, 0x7c, 0x02, 0x01, 0x01, 0x80, 0x00, 0xe0, 0x50, 0x28, 0x98, 0x00, 0x00, 0x00, 0x00,
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x40, 0x41, 0x41, 0x41, 0xc0, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0x40, 0x40, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x07, 0x02, 0x39, 0x27, 0x10, 0x00, 0x00, 0x00,
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x10, 0x00,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x13, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xfc,
75 0x22, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x60, 0x1f, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x90, 0x7e, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40,
81 0x30, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00, 0x08, 0xe4, 0x1c, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
87 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x54, 0x4a, 0x26, 0x00, 0x00, 0x00, 0x00,
88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
92 };
93
94static const char PROGMEM base_caps_logo[] = {
95 // 'caps', 32x128px
96 0x00, 0x00, 0x80, 0x7c, 0x02, 0x01, 0x01, 0x80, 0x00, 0xe0, 0x50, 0x28, 0x98, 0x00, 0x00, 0x00, 0x00,
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
98 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x40, 0x41, 0x41, 0x41, 0xc0, 0x00, 0x00, 0x00, 0x00,
99 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0x40, 0x40, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
104 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x07, 0x02, 0x39, 0x27, 0x10, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x10, 0x00,
107 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x13, 0x00, 0x00,
109 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xfc,
111 0x22, 0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
112 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x60, 0x1f, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
115 0x00, 0x90, 0x7e, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40,
117 0x30, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
119 0x00, 0x00, 0x00, 0x00, 0x08, 0xe4, 0x1c, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x54, 0x4a, 0x26, 0x00, 0x00, 0x00, 0x00,
124 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00, 0x80,
125 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x1e, 0x11, 0x09, 0x08,
127 0x1e, 0x11, 0x81, 0x7d, 0x13, 0x11, 0x08, 0x17, 0x11, 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00
128};
129
130 switch (get_highest_layer(layer_state)) {
131 case _BASE:
132 if (host_keyboard_led_state().caps_lock) {
133 oled_write_raw_P(base_caps_logo, sizeof(base_caps_logo));
134 } else {
135 oled_write_raw_P(base_logo, sizeof(base_logo));
136 }
137 break;
138 default:
139 oled_write_raw_P(base_logo, sizeof(base_logo));
140 }
141}
142#endif
diff --git a/keyboards/le_chiffre/keymaps/default/readme.md b/keyboards/le_chiffre/keymaps/default/readme.md
new file mode 100644
index 000000000..29f2d31f6
--- /dev/null
+++ b/keyboards/le_chiffre/keymaps/default/readme.md
@@ -0,0 +1 @@
# Default Le Chiffre Keymap
diff --git a/keyboards/le_chiffre/le_chiffre.c b/keyboards/le_chiffre/le_chiffre.c
new file mode 100644
index 000000000..2f28911b4
--- /dev/null
+++ b/keyboards/le_chiffre/le_chiffre.c
@@ -0,0 +1 @@
#include "le_chiffre.h"
diff --git a/keyboards/le_chiffre/le_chiffre.h b/keyboards/le_chiffre/le_chiffre.h
new file mode 100644
index 000000000..a95c0f262
--- /dev/null
+++ b/keyboards/le_chiffre/le_chiffre.h
@@ -0,0 +1,18 @@
1#pragma once
2
3#include "quantum.h"
4
5#define XXX KC_NO
6
7#define LAYOUT( \
8 K00, K01, K02, K03, K04, K38, K05, K06, K07, K08, K09, \
9 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
10 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
11 K32, K34, K35, K37 \
12) \
13{ \
14 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09 }, \
15 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19 }, \
16 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 }, \
17 { XXX, XXX, K32, XXX, K34, K35, XXX, K37, K38, XXX } \
18}
diff --git a/keyboards/le_chiffre/readme.md b/keyboards/le_chiffre/readme.md
new file mode 100644
index 000000000..ead6d88b3
--- /dev/null
+++ b/keyboards/le_chiffre/readme.md
@@ -0,0 +1,15 @@
1# Le Chiffre
2
3![Le Chiffre](https://i.imgur.com/X1WsUmdl.png)
4
5Le Chiffre (ironically, "the number" in French is a 30% keyboard designed by tominabox1. The purpose of the board is to provide a platform for MX and Choc ergo in one package for when ones wrists need a break. The board supports an RGB LED strip with DI on port F0. The board is also fitted with support for run-of-the-mill .91" OLED and EC11 rotary encoder.
6
7* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
8* Hardware Supported: Le Chiffre (source not available at this time)
9* Hardware Availability: Bring your own case.
10
11Make example for this keyboard (after setting up your build environment):
12
13 make le_chiffre:default
14
15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/le_chiffre/rules.mk b/keyboards/le_chiffre/rules.mk
new file mode 100644
index 000000000..d9d44e06e
--- /dev/null
+++ b/keyboards/le_chiffre/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
13
14BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
15MOUSEKEY_ENABLE = yes # Mouse keys
16EXTRAKEY_ENABLE = yes # Audio control and System control
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18NKRO_ENABLE = yes # USB Nkey Rollover
19RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
20TAP_DANCE_ENABLE = no
21ENCODER_ENABLE = yes
22OLED_DRIVER_ENABLE = no