aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSid Carter <sidcarter@users.noreply.github.com>2019-11-14 21:30:29 -0500
committerfauxpark <fauxpark@gmail.com>2019-11-15 13:30:29 +1100
commit43889326fcaa6623e264e95aeeb279a8540938bb (patch)
treec8afd0cd383cb129d15a00b4985f013e4d85e7cc
parentf98750de6edf97559ed53be4b5b5c1b4851acf3e (diff)
downloadqmk_firmware-43889326fcaa6623e264e95aeeb279a8540938bb.tar.gz
qmk_firmware-43889326fcaa6623e264e95aeeb279a8540938bb.zip
Adding new pcb with default keymap and personal keymap (#7314)
* adding new pcb with default keymap and personal keymap * Update keyboards/leeku/finger65/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Change to newer DEBOUNCE format Co-Authored-By: fauxpark <fauxpark@gmail.com> * switch to pragma Co-Authored-By: fauxpark <fauxpark@gmail.com> * remove unused define keyboards/leeku/finger65/config.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * some cleanup after debounce and other changes * Remove no_suspend_power_down from keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * move to newer format and remove unused stuff * ensure default has no leds for now * change default layout name * clean up the keymap a bit * want grave not tilde * a minor change and cleanup * more stuff removed cause I don't care for LEDs * remove some remaining stuff * add RGBLED stuff * Update keyboards/leeku/finger65/usbconfig.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/usbconfig.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/usbconfig.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/usbconfig.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * update USB information * Update keyboards/leeku/finger65/usbconfig.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/keymaps/default/keymap.c Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/keymaps/default/keymap.c Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/keymaps/madhatter/keymap.c Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/keymaps/madhatter/keymap.c Co-Authored-By: fauxpark <fauxpark@gmail.com> * cleanup and conform to existing standard * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * remove stuff that doesn't work * add a JSON for the QMK configurator * list the layouts only available * let's just make it the 65 ansi layout with split backspace, eh? * remove extra space * Update keyboards/leeku/finger65/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/leeku/finger65/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * update readme * remove redundant title * Monica Bellucci ruined my life * I'm having a RELIGIOUS EXPERIENCE ... and I don't take any DRUGS * Update keyboards/leeku/finger65/rules.mk Co-Authored-By: fauxpark <fauxpark@gmail.com> * add a URL to the username * fix readme and make it simpler with links this time * Update keyboards/leeku/finger65/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * Update keyboards/leeku/finger65/readme.md Co-Authored-By: James Young <18669334+noroadsleft@users.noreply.github.com> * incorporate suggested changes * update usb stuff for some stuff coming in the future * update layout for LAYOUT_ALL * USB power changes
-rw-r--r--keyboards/leeku/finger65/config.h45
-rw-r--r--keyboards/leeku/finger65/finger65.h61
-rw-r--r--keyboards/leeku/finger65/info.json1095
-rw-r--r--keyboards/leeku/finger65/keymaps/default/keymap.c36
-rw-r--r--keyboards/leeku/finger65/keymaps/madhatter/keymap.c54
-rw-r--r--keyboards/leeku/finger65/keymaps/madhatter/rules.mk1
-rw-r--r--keyboards/leeku/finger65/readme.md16
-rw-r--r--keyboards/leeku/finger65/rules.mk25
-rw-r--r--keyboards/leeku/finger65/usbconfig.h364
9 files changed, 1697 insertions, 0 deletions
diff --git a/keyboards/leeku/finger65/config.h b/keyboards/leeku/finger65/config.h
new file mode 100644
index 000000000..3e6eebb32
--- /dev/null
+++ b/keyboards/leeku/finger65/config.h
@@ -0,0 +1,45 @@
1/*
2Copyright 2018 Rasmus Schults <rasmusx@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x6050
25#define DEVICE_VER 0x0100
26#define MANUFACTURER LeeKu
27#define PRODUCT L3
28#define DESCRIPTION QMK keyboard firmware for L3
29
30#define RGBLED_NUM 12
31
32/* key matrix size */
33#define MATRIX_ROWS 5
34#define MATRIX_COLS 16
35
36#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, B2, B3, B4, B5, B6, B7 }
37#define MATRIX_ROW_PINS { C3, C4, C5, C6, C7 }
38#define UNUSED_PINS
39
40/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
41#define DEBOUNCE 5
42
43/* number of backlight levels */
44#define BACKLIGHT_LEVELS 1
45
diff --git a/keyboards/leeku/finger65/finger65.h b/keyboards/leeku/finger65/finger65.h
new file mode 100644
index 000000000..3d2ef2db4
--- /dev/null
+++ b/keyboards/leeku/finger65/finger65.h
@@ -0,0 +1,61 @@
1/* Copyright 2018 Rasmus Schults <rasmusx@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define LAYOUT_all( \
22 K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, \
23 K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
24 K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, K2P, \
25 K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
26 K0A, K0B, K0C, K0D, K0G, K0I, K0J, K0M, K0N, K0O, K0P \
27) { \
28 { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P }, \
29 { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
30 { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2N, KC_NO, K2P }, \
31 { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
32 { K0A, K0B, K0C, K0D, KC_NO, KC_NO, K0G, KC_NO, K0I, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
33}
34
35#define LAYOUT_65_ansi( \
36 K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, \
37 K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
38 K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
39 K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
40 K0A, K0B, K0C, K0G, K0J, K0M, K0N, K0O, K0P \
41) { \
42 { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P }, \
43 { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
44 { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
45 { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
46 { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
47}
48
49#define LAYOUT_65_ansi_split_bs( \
50 K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, \
51 K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
52 K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
53 K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1O, K1P, \
54 K0A, K0B, K0C, K0G, K0J, K0M, K0N, K0O, K0P \
55) { \
56 { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P }, \
57 { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
58 { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
59 { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, KC_NO, K1O, K1P }, \
60 { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, KC_NO, KC_NO, K0M, K0N, K0O, K0P } \
61}
diff --git a/keyboards/leeku/finger65/info.json b/keyboards/leeku/finger65/info.json
new file mode 100644
index 000000000..f78d7098b
--- /dev/null
+++ b/keyboards/leeku/finger65/info.json
@@ -0,0 +1,1095 @@
1{
2 "keyboard_name": "Leeku Finger65",
3 "url": "",
4 "maintainer": "sidcarter",
5 "width": 16,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_all": {
9 "layout": [
10 {
11 "label": "K4A",
12 "x": 0,
13 "y": 0
14 },
15 {
16 "label": "K4B",
17 "x": 1,
18 "y": 0
19 },
20 {
21 "label": "K4C",
22 "x": 2,
23 "y": 0
24 },
25 {
26 "label": "K4D",
27 "x": 3,
28 "y": 0
29 },
30 {
31 "label": "K4E",
32 "x": 4,
33 "y": 0
34 },
35 {
36 "label": "K4F",
37 "x": 5,
38 "y": 0
39 },
40 {
41 "label": "K4G",
42 "x": 6,
43 "y": 0
44 },
45 {
46 "label": "K4H",
47 "x": 7,
48 "y": 0
49 },
50 {
51 "label": "K4I",
52 "x": 8,
53 "y": 0
54 },
55 {
56 "label": "K4J",
57 "x": 9,
58 "y": 0
59 },
60 {
61 "label": "K4K",
62 "x": 10,
63 "y": 0
64 },
65 {
66 "label": "K4L",
67 "x": 11,
68 "y": 0
69 },
70 {
71 "label": "K4M",
72 "x": 12,
73 "y": 0
74 },
75 {
76 "label": "K4N",
77 "x": 13,
78 "y": 0
79 },
80 {
81 "label": "K4O",
82 "x": 14,
83 "y": 0
84 },
85 {
86 "label": "K4P",
87 "x": 15,
88 "y": 0
89 },
90 {
91 "label": "K3A",
92 "x": 0,
93 "y": 1,
94 "w": 1.5
95 },
96 {
97 "label": "K3B",
98 "x": 1.5,
99 "y": 1
100 },
101 {
102 "label": "K3C",
103 "x": 2.5,
104 "y": 1
105 },
106 {
107 "label": "K3D",
108 "x": 3.5,
109 "y": 1
110 },
111 {
112 "label": "K3E",
113 "x": 4.5,
114 "y": 1
115 },
116 {
117 "label": "K3F",
118 "x": 5.5,
119 "y": 1
120 },
121 {
122 "label": "K3G",
123 "x": 6.5,
124 "y": 1
125 },
126 {
127 "label": "K3H",
128 "x": 7.5,
129 "y": 1
130 },
131 {
132 "label": "K3I",
133 "x": 8.5,
134 "y": 1
135 },
136 {
137 "label": "K3J",
138 "x": 9.5,
139 "y": 1
140 },
141 {
142 "label": "K3K",
143 "x": 10.5,
144 "y": 1
145 },
146 {
147 "label": "K3L",
148 "x": 11.5,
149 "y": 1
150 },
151 {
152 "label": "K3M",
153 "x": 12.5,
154 "y": 1
155 },
156 {
157 "label": "K3N",
158 "x": 13.5,
159 "y": 1,
160 "w": 1.5
161 },
162 {
163 "label": "K3P",
164 "x": 15,
165 "y": 1
166 },
167 {
168 "label": "K2A",
169 "x": 0,
170 "y": 2,
171 "w": 1.75
172 },
173 {
174 "label": "K2B",
175 "x": 1.75,
176 "y": 2
177 },
178 {
179 "label": "K2C",
180 "x": 2.75,
181 "y": 2
182 },
183 {
184 "label": "K2D",
185 "x": 3.75,
186 "y": 2
187 },
188 {
189 "label": "K2E",
190 "x": 4.75,
191 "y": 2
192 },
193 {
194 "label": "K2F",
195 "x": 5.75,
196 "y": 2
197 },
198 {
199 "label": "K2G",
200 "x": 6.75,
201 "y": 2
202 },
203 {
204 "label": "K2H",
205 "x": 7.75,
206 "y": 2
207 },
208 {
209 "label": "K2I",
210 "x": 8.75,
211 "y": 2
212 },
213 {
214 "label": "K2J",
215 "x": 9.75,
216 "y": 2
217 },
218 {
219 "label": "K2K",
220 "x": 10.75,
221 "y": 2
222 },
223 {
224 "label": "K2L",
225 "x": 11.75,
226 "y": 2
227 },
228 {
229 "label": "K2M",
230 "x": 12.75,
231 "y": 2
232 },
233 {
234 "label": "K2N",
235 "x": 13.75,
236 "y": 2,
237 "w": 1.25
238 },
239 {
240 "label": "K2P",
241 "x": 15,
242 "y": 2
243 },
244 {
245 "label": "K1A",
246 "x": 0,
247 "y": 3,
248 "w": 1.25
249 },
250 {
251 "label": "K1B",
252 "x": 1.25,
253 "y": 3
254 },
255 {
256 "label": "K1C",
257 "x": 2.25,
258 "y": 3
259 },
260 {
261 "label": "K1D",
262 "x": 3.25,
263 "y": 3
264 },
265 {
266 "label": "K1E",
267 "x": 4.25,
268 "y": 3
269 },
270 {
271 "label": "K1F",
272 "x": 5.25,
273 "y": 3
274 },
275 {
276 "label": "K1G",
277 "x": 6.25,
278 "y": 3
279 },
280 {
281 "label": "K1H",
282 "x": 7.25,
283 "y": 3
284 },
285 {
286 "label": "K1I",
287 "x": 8.25,
288 "y": 3
289 },
290 {
291 "label": "K1J",
292 "x": 9.25,
293 "y": 3
294 },
295 {
296 "label": "K1K",
297 "x": 10.25,
298 "y": 3
299 },
300 {
301 "label": "K1L",
302 "x": 11.25,
303 "y": 3
304 },
305 {
306 "label": "K1M",
307 "x": 12.25,
308 "y": 3,
309 "w": 1.75
310 },
311 {
312 "label": "K1O",
313 "x": 14,
314 "y": 3
315 },
316 {
317 "label": "K1P",
318 "x": 15,
319 "y": 3
320 },
321 {
322 "label": "K0A",
323 "x": 0,
324 "y": 4,
325 "w": 1.25
326 },
327 {
328 "label": "K0B",
329 "x": 1.25,
330 "y": 4,
331 "w": 1.25
332 },
333 {
334 "label": "K0C",
335 "x": 2.5,
336 "y": 4,
337 "w": 1.25
338 },
339 {
340 "label": "K0D",
341 "x": 3.75,
342 "y": 4,
343 "w": 2.25
344 },
345 {
346 "label": "K0G",
347 "x": 6,
348 "y": 4,
349 "w": 1.25
350 },
351 {
352 "label": "K0I",
353 "x": 7.25,
354 "y": 4,
355 "w": 2.75
356 },
357 {
358 "label": "K0J",
359 "x": 10,
360 "y": 4,
361 "w": 1.5
362 },
363 {
364 "label": "K0M",
365 "x": 11.5,
366 "y": 4,
367 "w": 1.5
368 },
369 {
370 "label": "K0N",
371 "x": 13,
372 "y": 4
373 },
374 {
375 "label": "K0O",
376 "x": 14,
377 "y": 4
378 },
379 {
380 "label": "K0P",
381 "x": 15,
382 "y": 4
383 }
384 ]
385 },
386 "LAYOUT_65_ansi": {
387 "layout": [
388 {
389 "label": "K4A",
390 "x": 0,
391 "y": 0
392 },
393 {
394 "label": "K4B",
395 "x": 1,
396 "y": 0
397 },
398 {
399 "label": "K4C",
400 "x": 2,
401 "y": 0
402 },
403 {
404 "label": "K4D",
405 "x": 3,
406 "y": 0
407 },
408 {
409 "label": "K4E",
410 "x": 4,
411 "y": 0
412 },
413 {
414 "label": "K4F",
415 "x": 5,
416 "y": 0
417 },
418 {
419 "label": "K4G",
420 "x": 6,
421 "y": 0
422 },
423 {
424 "label": "K4H",
425 "x": 7,
426 "y": 0
427 },
428 {
429 "label": "K4I",
430 "x": 8,
431 "y": 0
432 },
433 {
434 "label": "K4J",
435 "x": 9,
436 "y": 0
437 },
438 {
439 "label": "K4K",
440 "x": 10,
441 "y": 0
442 },
443 {
444 "label": "K4L",
445 "x": 11,
446 "y": 0
447 },
448 {
449 "label": "K4M",
450 "x": 12,
451 "y": 0
452 },
453 {
454 "label": "K4O",
455 "x": 13,
456 "y": 0,
457 "w": 2
458 },
459 {
460 "label": "K4P",
461 "x": 15,
462 "y": 0
463 },
464 {
465 "label": "K3A",
466 "x": 0,
467 "y": 1,
468 "w": 1.5
469 },
470 {
471 "label": "K3B",
472 "x": 1.5,
473 "y": 1
474 },
475 {
476 "label": "K3C",
477 "x": 2.5,
478 "y": 1
479 },
480 {
481 "label": "K3D",
482 "x": 3.5,
483 "y": 1
484 },
485 {
486 "label": "K3E",
487 "x": 4.5,
488 "y": 1
489 },
490 {
491 "label": "K3F",
492 "x": 5.5,
493 "y": 1
494 },
495 {
496 "label": "K3G",
497 "x": 6.5,
498 "y": 1
499 },
500 {
501 "label": "K3H",
502 "x": 7.5,
503 "y": 1
504 },
505 {
506 "label": "K3I",
507 "x": 8.5,
508 "y": 1
509 },
510 {
511 "label": "K3J",
512 "x": 9.5,
513 "y": 1
514 },
515 {
516 "label": "K3K",
517 "x": 10.5,
518 "y": 1
519 },
520 {
521 "label": "K3L",
522 "x": 11.5,
523 "y": 1
524 },
525 {
526 "label": "K3M",
527 "x": 12.5,
528 "y": 1
529 },
530 {
531 "label": "K4N",
532 "x": 13.5,
533 "y": 1,
534 "w": 1.5
535 },
536 {
537 "label": "K3P",
538 "x": 15,
539 "y": 1
540 },
541 {
542 "label": "K2A",
543 "x": 0,
544 "y": 2,
545 "w": 1.75
546 },
547 {
548 "label": "K2B",
549 "x": 1.75,
550 "y": 2
551 },
552 {
553 "label": "K2C",
554 "x": 2.75,
555 "y": 2
556 },
557 {
558 "label": "K2D",
559 "x": 3.75,
560 "y": 2
561 },
562 {
563 "label": "K2E",
564 "x": 4.75,
565 "y": 2
566 },
567 {
568 "label": "K2F",
569 "x": 5.75,
570 "y": 2
571 },
572 {
573 "label": "K2G",
574 "x": 6.75,
575 "y": 2
576 },
577 {
578 "label": "K2H",
579 "x": 7.75,
580 "y": 2
581 },
582 {
583 "label": "K2I",
584 "x": 8.75,
585 "y": 2
586 },
587 {
588 "label": "K2J",
589 "x": 9.75,
590 "y": 2
591 },
592 {
593 "label": "K2K",
594 "x": 10.75,
595 "y": 2
596 },
597 {
598 "label": "K2L",
599 "x": 11.75,
600 "y": 2
601 },
602 {
603 "label": "K2N",
604 "x": 12.75,
605 "y": 2,
606 "w": 2.25
607 },
608 {
609 "label": "K2P",
610 "x": 15,
611 "y": 2
612 },
613 {
614 "label": "K1A",
615 "x": 0,
616 "y": 3,
617 "w": 2.25
618 },
619 {
620 "label": "K1B",
621 "x": 2.25,
622 "y": 3
623 },
624 {
625 "label": "K1C",
626 "x": 3.25,
627 "y": 3
628 },
629 {
630 "label": "K1D",
631 "x": 4.25,
632 "y": 3
633 },
634 {
635 "label": "K1E",
636 "x": 5.25,
637 "y": 3
638 },
639 {
640 "label": "K1F",
641 "x": 6.25,
642 "y": 3
643 },
644 {
645 "label": "K1G",
646 "x": 7.25,
647 "y": 3
648 },
649 {
650 "label": "K1H",
651 "x": 8.25,
652 "y": 3
653 },
654 {
655 "label": "K1J",
656 "x": 9.25,
657 "y": 3
658 },
659 {
660 "label": "K1K",
661 "x": 10.25,
662 "y": 3
663 },
664 {
665 "label": "K1L",
666 "x": 11.25,
667 "y": 3
668 },
669 {
670 "label": "K1M",
671 "x": 12.25,
672 "y": 3,
673 "w": 1.75
674 },
675 {
676 "label": "K1O",
677 "x": 14,
678 "y": 3
679 },
680 {
681 "label": "K1P",
682 "x": 15,
683 "y": 3
684 },
685 {
686 "label": "K0A",
687 "x": 0,
688 "y": 4,
689 "w": 1.25
690 },
691 {
692 "label": "K0B",
693 "x": 1.25,
694 "y": 4,
695 "w": 1.25
696 },
697 {
698 "label": "K0C",
699 "x": 2.5,
700 "y": 4,
701 "w": 1.25
702 },
703 {
704 "label": "K0G",
705 "x": 3.75,
706 "y": 4,
707 "w": 6.25
708 },
709 {
710 "label": "K0J",
711 "x": 10,
712 "y": 4,
713 "w": 1.5
714 },
715 {
716 "label": "K0M",
717 "x": 11.5,
718 "y": 4,
719 "w": 1.5
720 },
721 {
722 "label": "K0N",
723 "x": 13,
724 "y": 4
725 },
726 {
727 "label": "K0O",
728 "x": 14,
729 "y": 4
730 },
731 {
732 "label": "K0P",
733 "x": 15,
734 "y": 4
735 }
736 ]
737 },
738 "LAYOUT_65_ansi_split_bs": {
739 "layout": [
740 {
741 "label": "K4A",
742 "x": 0,
743 "y": 0
744 },
745 {
746 "label": "K4B",
747 "x": 1,
748 "y": 0
749 },
750 {
751 "label": "K4C",
752 "x": 2,
753 "y": 0
754 },
755 {
756 "label": "K4D",
757 "x": 3,
758 "y": 0
759 },
760 {
761 "label": "K4E",
762 "x": 4,
763 "y": 0
764 },
765 {
766 "label": "K4F",
767 "x": 5,
768 "y": 0
769 },
770 {
771 "label": "K4G",
772 "x": 6,
773 "y": 0
774 },
775 {
776 "label": "K4H",
777 "x": 7,
778 "y": 0
779 },
780 {
781 "label": "K4I",
782 "x": 8,
783 "y": 0
784 },
785 {
786 "label": "K4J",
787 "x": 9,
788 "y": 0
789 },
790 {
791 "label": "K4K",
792 "x": 10,
793 "y": 0
794 },
795 {
796 "label": "K4L",
797 "x": 11,
798 "y": 0
799 },
800 {
801 "label": "K4M",
802 "x": 12,
803 "y": 0
804 },
805 {
806 "label": "K4N",
807 "x": 13,
808 "y": 0
809 },
810 {
811 "label": "K4O",
812 "x": 14,
813 "y": 0
814 },
815 {
816 "label": "K4P",
817 "x": 15,
818 "y": 0
819 },
820 {
821 "label": "K3A",
822 "x": 0,
823 "y": 1,
824 "w": 1.5
825 },
826 {
827 "label": "K3B",
828 "x": 1.5,
829 "y": 1
830 },
831 {
832 "label": "K3C",
833 "x": 2.5,
834 "y": 1
835 },
836 {
837 "label": "K3D",
838 "x": 3.5,
839 "y": 1
840 },
841 {
842 "label": "K3E",
843 "x": 4.5,
844 "y": 1
845 },
846 {
847 "label": "K3F",
848 "x": 5.5,
849 "y": 1
850 },
851 {
852 "label": "K3G",
853 "x": 6.5,
854 "y": 1
855 },
856 {
857 "label": "K3H",
858 "x": 7.5,
859 "y": 1
860 },
861 {
862 "label": "K3I",
863 "x": 8.5,
864 "y": 1
865 },
866 {
867 "label": "K3J",
868 "x": 9.5,
869 "y": 1
870 },
871 {
872 "label": "K3K",
873 "x": 10.5,
874 "y": 1
875 },
876 {
877 "label": "K3L",
878 "x": 11.5,
879 "y": 1
880 },
881 {
882 "label": "K3M",
883 "x": 12.5,
884 "y": 1
885 },
886 {
887 "label": "K4N",
888 "x": 13.5,
889 "y": 1,
890 "w": 1.5
891 },
892 {
893 "label": "K3P",
894 "x": 15,
895 "y": 1
896 },
897 {
898 "label": "K2A",
899 "x": 0,
900 "y": 2,
901 "w": 1.75
902 },
903 {
904 "label": "K2B",
905 "x": 1.75,
906 "y": 2
907 },
908 {
909 "label": "K2C",
910 "x": 2.75,
911 "y": 2
912 },
913 {
914 "label": "K2D",
915 "x": 3.75,
916 "y": 2
917 },
918 {
919 "label": "K2E",
920 "x": 4.75,
921 "y": 2
922 },
923 {
924 "label": "K2F",
925 "x": 5.75,
926 "y": 2
927 },
928 {
929 "label": "K2G",
930 "x": 6.75,
931 "y": 2
932 },
933 {
934 "label": "K2H",
935 "x": 7.75,
936 "y": 2
937 },
938 {
939 "label": "K2I",
940 "x": 8.75,
941 "y": 2
942 },
943 {
944 "label": "K2J",
945 "x": 9.75,
946 "y": 2
947 },
948 {
949 "label": "K2K",
950 "x": 10.75,
951 "y": 2
952 },
953 {
954 "label": "K2L",
955 "x": 11.75,
956 "y": 2
957 },
958 {
959 "label": "K2N",
960 "x": 12.75,
961 "y": 2,
962 "w": 2.25
963 },
964 {
965 "label": "K2P",
966 "x": 15,
967 "y": 2
968 },
969 {
970 "label": "K1A",
971 "x": 0,
972 "y": 3,
973 "w": 2.25
974 },
975 {
976 "label": "K1B",
977 "x": 2.25,
978 "y": 3
979 },
980 {
981 "label": "K1C",
982 "x": 3.25,
983 "y": 3
984 },
985 {
986 "label": "K1D",
987 "x": 4.25,
988 "y": 3
989 },
990 {
991 "label": "K1E",
992 "x": 5.25,
993 "y": 3
994 },
995 {
996 "label": "K1F",
997 "x": 6.25,
998 "y": 3
999 },
1000 {
1001 "label": "K1G",
1002 "x": 7.25,
1003 "y": 3
1004 },
1005 {
1006 "label": "K1H",
1007 "x": 8.25,
1008 "y": 3
1009 },
1010 {
1011 "label": "K1J",
1012 "x": 9.25,
1013 "y": 3
1014 },
1015 {
1016 "label": "K1K",
1017 "x": 10.25,
1018 "y": 3
1019 },
1020 {
1021 "label": "K1L",
1022 "x": 11.25,
1023 "y": 3
1024 },
1025 {
1026 "label": "K1M",
1027 "x": 12.25,
1028 "y": 3,
1029 "w": 1.75
1030 },
1031 {
1032 "label": "K1O",
1033 "x": 14,
1034 "y": 3
1035 },
1036 {
1037 "label": "K1P",
1038 "x": 15,
1039 "y": 3
1040 },
1041 {
1042 "label": "K0A",
1043 "x": 0,
1044 "y": 4,
1045 "w": 1.25
1046 },
1047 {
1048 "label": "K0B",
1049 "x": 1.25,
1050 "y": 4,
1051 "w": 1.25
1052 },
1053 {
1054 "label": "K0C",
1055 "x": 2.5,
1056 "y": 4,
1057 "w": 1.25
1058 },
1059 {
1060 "label": "K0G",
1061 "x": 3.75,
1062 "y": 4,
1063 "w": 6.25
1064 },
1065 {
1066 "label": "K0J",
1067 "x": 10,
1068 "y": 4,
1069 "w": 1.5
1070 },
1071 {
1072 "label": "K0M",
1073 "x": 11.5,
1074 "y": 4,
1075 "w": 1.5
1076 },
1077 {
1078 "label": "K0N",
1079 "x": 13,
1080 "y": 4
1081 },
1082 {
1083 "label": "K0O",
1084 "x": 14,
1085 "y": 4
1086 },
1087 {
1088 "label": "K0P",
1089 "x": 15,
1090 "y": 4
1091 }
1092 ]
1093 }
1094 }
1095}
diff --git a/keyboards/leeku/finger65/keymaps/default/keymap.c b/keyboards/leeku/finger65/keymaps/default/keymap.c
new file mode 100644
index 000000000..14a0f0c5c
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
1#include QMK_KEYBOARD_H
2
3enum layers {
4 _BASE,
5 _FN,
6};
7
8/*
9 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
10 * │ESC│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ( │ ) │ ` │BS │HOM│
11 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
12 * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PGU│
13 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┼───┤
14 * │ FUNC │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ENT │PGD│
15 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┼───┤
16 * │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SHIFT │UP │END│
17 * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
18 * │CTRL│GUI │ALT │ SPACE (6.25u) │ ALT │CTRL │LFT│DWN│RGT│
19 * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
20 */
21
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 [_BASE] = LAYOUT_all(
24 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_HOME,
25 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
26 TG(_FN), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
27 KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
28 KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
29
30 [_FN] = LAYOUT_all(
31 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_DEL,
32 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_INS,
33 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR,
34 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PAUS,
35 _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
36};
diff --git a/keyboards/leeku/finger65/keymaps/madhatter/keymap.c b/keyboards/leeku/finger65/keymaps/madhatter/keymap.c
new file mode 100644
index 000000000..f8d5a0f7b
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/madhatter/keymap.c
@@ -0,0 +1,54 @@
1#include QMK_KEYBOARD_H
2
3enum layers {
4 _QWERTY,
5 _FNMS,
6};
7
8#define FNMS MO(_FNMS)
9
10/*
11 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
12 * │ESC│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ( │ ) │ \ │ \ │HOM│
13 * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┼───┼───┤
14 * │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BKSPC│PGU│
15 * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
16 * │ ` │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ ENTER │PGD│
17 * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
18 * │ SHIFT │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SHIFT │UP │END│
19 * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤
20 * │CTRL │GUI│ ALT │ SPACE (6.25u) │ ALT │CTRL │LFT│DWN│RGT│
21 * └─────┴───┴─────┴───────────────────────┴─────┴─────┴───┴───┴───┘
22 */
23
24const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
25 [_QWERTY] = LAYOUT_65_ansi_split_bs(
26 KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSLS, KC_HOME,
27 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
28 KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
29 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
30 KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, FNMS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
31 ),
32
33 [_FNMS] = LAYOUT_65_ansi_split_bs(
34 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_MPLY,
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_VOLU,
36 AG_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, KC_VOLD,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U,KC_MNXT,
38 _______, _______, _______, _______, _______, _______, KC_MS_L,KC_MS_D, KC_MS_R
39 ),
40};
41
42// uint32_t layer_state_set_user(uint32_t state) {
43// switch(biton32(state)) {
44// case _FNMS:
45// led_off();
46// rgb_on();
47// break;
48// default:
49// led_off();
50// rgb_off();
51// break;
52// }
53// return state;
54// }
diff --git a/keyboards/leeku/finger65/keymaps/madhatter/rules.mk b/keyboards/leeku/finger65/keymaps/madhatter/rules.mk
new file mode 100644
index 000000000..6c605daec
--- /dev/null
+++ b/keyboards/leeku/finger65/keymaps/madhatter/rules.mk
@@ -0,0 +1 @@
MOUSEKEY_ENABLE = yes
diff --git a/keyboards/leeku/finger65/readme.md b/keyboards/leeku/finger65/readme.md
new file mode 100644
index 000000000..c800f3af3
--- /dev/null
+++ b/keyboards/leeku/finger65/readme.md
@@ -0,0 +1,16 @@
1# Leeku Finger65 PCB
2
3* Keyboard Maintainer: [sidcarter](https://github.com/sidcarter)
4* Hardware Supported: LeeKu Finger65 PCB, atmega32a
5
6* Make example for this keyboard (after setting up your build environment):
7
8 make leeku/finger65:default
9
10* This PCB is not QMK ready by default. If you want to use your Leeku Finger65 PCB with QMK, you must:
11
12 * ISP Flash the Leeku PCB using the bootloader for the atmega32a that resides in the `util/` folder
13 * Build and install [bootloadHID](https://www.obdev.at/products/vusb/bootloadhid.html) on your system
14 * You can then do a `make leeku/finger65:default:flash` to flash your PCB with QMK
15
16* See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/leeku/finger65/rules.mk b/keyboards/leeku/finger65/rules.mk
new file mode 100644
index 000000000..16ce59ecb
--- /dev/null
+++ b/keyboards/leeku/finger65/rules.mk
@@ -0,0 +1,25 @@
1# MCU name
2MCU = atmega32a
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 = bootloadHID
13
14# Build Options
15# change yes to no to disable
16#
17BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = no # Mouse keys
19EXTRAKEY_ENABLE = no # Audio control and System control
20CONSOLE_ENABLE = no # Console for debug
21COMMAND_ENABLE = no # Commands for debug and configuration
22# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
23SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
24NKRO_ENABLE = no # USB Nkey Rollover
25MIDI_ENABLE = no # MIDI support
diff --git a/keyboards/leeku/finger65/usbconfig.h b/keyboards/leeku/finger65/usbconfig.h
new file mode 100644
index 000000000..48be89046
--- /dev/null
+++ b/keyboards/leeku/finger65/usbconfig.h
@@ -0,0 +1,364 @@
1/* Name: usbconfig.h
2 * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
3 * Author: Christian Starkjohann
4 * Creation Date: 2005-04-01
5 * Tabsize: 4
6 * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
7 * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
8 * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
9 */
10
11#ifndef __usbconfig_h_included__
12#define __usbconfig_h_included__
13
14
15/*
16General Description:
17This file is an example configuration (with inline documentation) for the USB
18driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
19also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
20wire the lines to any other port, as long as D+ is also wired to INT0 (or any
21other hardware interrupt, as long as it is the highest level interrupt, see
22section at the end of this file).
23*/
24
25/* ---------------------------- Hardware Config ---------------------------- */
26
27#define USB_CFG_IOPORTNAME D
28/* This is the port where the USB bus is connected. When you configure it to
29 * "B", the registers PORTB, PINB and DDRB will be used.
30 */
31#define USB_CFG_DMINUS_BIT 3
32/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
33 * This may be any bit in the port.
34 */
35#define USB_CFG_DPLUS_BIT 2
36/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
37 * This may be any bit in the port. Please note that D+ must also be connected
38 * to interrupt pin INT0! [You can also use other interrupts, see section
39 * "Optional MCU Description" below, or you can connect D- to the interrupt, as
40 * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
41 * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
42 * markers every millisecond.]
43 */
44#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
45/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
46 * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
47 * require no crystal, they tolerate +/- 1% deviation from the nominal
48 * frequency. All other rates require a precision of 2000 ppm and thus a
49 * crystal!
50 * Since F_CPU should be defined to your actual clock rate anyway, you should
51 * not need to modify this setting.
52 */
53#define USB_CFG_CHECK_CRC 0
54/* Define this to 1 if you want that the driver checks integrity of incoming
55 * data packets (CRC checks). CRC checks cost quite a bit of code size and are
56 * currently only available for 18 MHz crystal clock. You must choose
57 * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
58 */
59
60/* ----------------------- Optional Hardware Config ------------------------ */
61
62/* #define USB_CFG_PULLUP_IOPORTNAME D */
63/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
64 * V+, you can connect and disconnect the device from firmware by calling
65 * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
66 * This constant defines the port on which the pullup resistor is connected.
67 */
68/* #define USB_CFG_PULLUP_BIT 4 */
69/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
70 * above) where the 1.5k pullup resistor is connected. See description
71 * above for details.
72 */
73
74/* --------------------------- Functional Range ---------------------------- */
75
76#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
77/* Define this to 1 if you want to compile a version with two endpoints: The
78 * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
79 * number).
80 */
81#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
82/* Define this to 1 if you want to compile a version with three endpoints: The
83 * default control endpoint 0, an interrupt-in endpoint 3 (or the number
84 * configured below) and a catch-all default interrupt-in endpoint as above.
85 * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
86 */
87#define USB_CFG_EP3_NUMBER 3
88/* If the so-called endpoint 3 is used, it can now be configured to any other
89 * endpoint number (except 0) with this macro. Default if undefined is 3.
90 */
91/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
92/* The above macro defines the startup condition for data toggling on the
93 * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
94 * Since the token is toggled BEFORE sending any data, the first packet is
95 * sent with the oposite value of this configuration!
96 */
97#define USB_CFG_IMPLEMENT_HALT 0
98/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
99 * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
100 * it is required by the standard. We have made it a config option because it
101 * bloats the code considerably.
102 */
103#define USB_CFG_SUPPRESS_INTR_CODE 0
104/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
105 * want to send any data over them. If this macro is defined to 1, functions
106 * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
107 * you need the interrupt-in endpoints in order to comply to an interface
108 * (e.g. HID), but never want to send any data. This option saves a couple
109 * of bytes in flash memory and the transmit buffers in RAM.
110 */
111#define USB_CFG_IS_SELF_POWERED 0
112/* Define this to 1 if the device has its own power supply. Set it to 0 if the
113 * device is powered from the USB bus.
114 */
115#define USB_CFG_IMPLEMENT_FN_WRITE 1
116/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
117 * transfers. Set it to 0 if you don't need it and want to save a couple of
118 * bytes.
119 */
120#define USB_CFG_IMPLEMENT_FN_READ 0
121/* Set this to 1 if you need to send control replies which are generated
122 * "on the fly" when usbFunctionRead() is called. If you only want to send
123 * data from a static buffer, set it to 0 and return the data from
124 * usbFunctionSetup(). This saves a couple of bytes.
125 */
126#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
127/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
128 * You must implement the function usbFunctionWriteOut() which receives all
129 * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
130 * can be found in 'usbRxToken'.
131 */
132#define USB_CFG_HAVE_FLOWCONTROL 0
133/* Define this to 1 if you want flowcontrol over USB data. See the definition
134 * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
135 * usbdrv.h.
136 */
137#define USB_CFG_DRIVER_FLASH_PAGE 0
138/* If the device has more than 64 kBytes of flash, define this to the 64 k page
139 * where the driver's constants (descriptors) are located. Or in other words:
140 * Define this to 1 for boot loaders on the ATMega128.
141 */
142#define USB_CFG_LONG_TRANSFERS 0
143/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
144 * in a single control-in or control-out transfer. Note that the capability
145 * for long transfers increases the driver size.
146 */
147/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
148/* This macro is a hook if you want to do unconventional things. If it is
149 * defined, it's inserted at the beginning of received message processing.
150 * If you eat the received message and don't want default processing to
151 * proceed, do a return after doing your things. One possible application
152 * (besides debugging) is to flash a status LED on each packet.
153 */
154/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
155/* This macro is a hook if you need to know when an USB RESET occurs. It has
156 * one parameter which distinguishes between the start of RESET state and its
157 * end.
158 */
159/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
160/* This macro (if defined) is executed when a USB SET_ADDRESS request was
161 * received.
162 */
163#define USB_COUNT_SOF 0
164/* define this macro to 1 if you need the global variable "usbSofCount" which
165 * counts SOF packets. This feature requires that the hardware interrupt is
166 * connected to D- instead of D+.
167 */
168/* #ifdef __ASSEMBLER__
169 * macro myAssemblerMacro
170 * in YL, TCNT0
171 * sts timer0Snapshot, YL
172 * endm
173 * #endif
174 * #define USB_SOF_HOOK myAssemblerMacro
175 * This macro (if defined) is executed in the assembler module when a
176 * Start Of Frame condition is detected. It is recommended to define it to
177 * the name of an assembler macro which is defined here as well so that more
178 * than one assembler instruction can be used. The macro may use the register
179 * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
180 * immediately after an SOF pulse may be lost and must be retried by the host.
181 * What can you do with this hook? Since the SOF signal occurs exactly every
182 * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
183 * designs running on the internal RC oscillator.
184 * Please note that Start Of Frame detection works only if D- is wired to the
185 * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
186 */
187#define USB_CFG_CHECK_DATA_TOGGLING 0
188/* define this macro to 1 if you want to filter out duplicate data packets
189 * sent by the host. Duplicates occur only as a consequence of communication
190 * errors, when the host does not receive an ACK. Please note that you need to
191 * implement the filtering yourself in usbFunctionWriteOut() and
192 * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
193 * for each control- and out-endpoint to check for duplicate packets.
194 */
195#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
196/* define this macro to 1 if you want the function usbMeasureFrameLength()
197 * compiled in. This function can be used to calibrate the AVR's RC oscillator.
198 */
199#define USB_USE_FAST_CRC 0
200/* The assembler module has two implementations for the CRC algorithm. One is
201 * faster, the other is smaller. This CRC routine is only used for transmitted
202 * messages where timing is not critical. The faster routine needs 31 cycles
203 * per byte while the smaller one needs 61 to 69 cycles. The faster routine
204 * may be worth the 32 bytes bigger code size if you transmit lots of data and
205 * run the AVR close to its limit.
206 */
207
208/* -------------------------- Device Description --------------------------- */
209
210#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
211/* USB vendor ID for the device, low byte first. If you have registered your
212 * own Vendor ID, define it here. Otherwise you may use one of obdev's free
213 * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
214 * *** IMPORTANT NOTE ***
215 * This template uses obdev's shared VID/PID pair for Vendor Class devices
216 * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
217 * the implications!
218 */
219#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
220/* This is the ID of the product, low byte first. It is interpreted in the
221 * scope of the vendor ID. If you have registered your own VID with usb.org
222 * or if you have licensed a PID from somebody else, define it here. Otherwise
223 * you may use one of obdev's free shared VID/PID pairs. See the file
224 * USB-IDs-for-free.txt for details!
225 * *** IMPORTANT NOTE ***
226 * This template uses obdev's shared VID/PID pair for Vendor Class devices
227 * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
228 * the implications!
229 */
230#define USB_CFG_DEVICE_VERSION (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
231/* Version number of the device: Minor number first, then major number.
232 */
233#define USB_CFG_VENDOR_NAME 'L', 'e', 'e', 'k', 'u'
234#define USB_CFG_VENDOR_NAME_LEN 5
235/* These two values define the vendor name returned by the USB device. The name
236 * must be given as a list of characters under single quotes. The characters
237 * are interpreted as Unicode (UTF-16) entities.
238 * If you don't want a vendor name string, undefine these macros.
239 * ALWAYS define a vendor name containing your Internet domain name if you use
240 * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
241 * details.
242 */
243#define USB_CFG_DEVICE_NAME 'F', 'i', 'n', 'g', 'e', 'r', '6', '5'
244#define USB_CFG_DEVICE_NAME_LEN 8
245/* Same as above for the device name. If you don't want a device name, undefine
246 * the macros. See the file USB-IDs-for-free.txt before you assign a name if
247 * you use a shared VID/PID.
248 */
249/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
250/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
251/* Same as above for the serial number. If you don't want a serial number,
252 * undefine the macros.
253 * It may be useful to provide the serial number through other means than at
254 * compile time. See the section about descriptor properties below for how
255 * to fine tune control over USB descriptors such as the string descriptor
256 * for the serial number.
257 */
258#define USB_CFG_DEVICE_CLASS 0
259#define USB_CFG_DEVICE_SUBCLASS 0
260/* See USB specification if you want to conform to an existing device class.
261 * Class 0xff is "vendor specific".
262 */
263#define USB_CFG_INTERFACE_CLASS 3 /* HID */
264#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
265#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
266/* See USB specification if you want to conform to an existing device class or
267 * protocol. The following classes must be set at interface level:
268 * HID class is 3, no subclass and protocol required (but may be useful!)
269 * CDC class is 2, use subclass 2 and protocol 1 for ACM
270 */
271#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
272/* Define this to the length of the HID report descriptor, if you implement
273 * an HID device. Otherwise don't define it or define it to 0.
274 * If you use this define, you must add a PROGMEM character array named
275 * "usbHidReportDescriptor" to your code which contains the report descriptor.
276 * Don't forget to keep the array and this define in sync!
277 */
278
279/* #define USB_PUBLIC static */
280/* Use the define above if you #include usbdrv.c instead of linking against it.
281 * This technique saves a couple of bytes in flash memory.
282 */
283
284/* ------------------- Fine Control over USB Descriptors ------------------- */
285/* If you don't want to use the driver's default USB descriptors, you can
286 * provide our own. These can be provided as (1) fixed length static data in
287 * flash memory, (2) fixed length static data in RAM or (3) dynamically at
288 * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
289 * information about this function.
290 * Descriptor handling is configured through the descriptor's properties. If
291 * no properties are defined or if they are 0, the default descriptor is used.
292 * Possible properties are:
293 * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
294 * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
295 * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
296 * you want RAM pointers.
297 * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
298 * in static memory is in RAM, not in flash memory.
299 * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
300 * the driver must know the descriptor's length. The descriptor itself is
301 * found at the address of a well known identifier (see below).
302 * List of static descriptor names (must be declared PROGMEM if in flash):
303 * char usbDescriptorDevice[];
304 * char usbDescriptorConfiguration[];
305 * char usbDescriptorHidReport[];
306 * char usbDescriptorString0[];
307 * int usbDescriptorStringVendor[];
308 * int usbDescriptorStringDevice[];
309 * int usbDescriptorStringSerialNumber[];
310 * Other descriptors can't be provided statically, they must be provided
311 * dynamically at runtime.
312 *
313 * Descriptor properties are or-ed or added together, e.g.:
314 * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
315 *
316 * The following descriptors are defined:
317 * USB_CFG_DESCR_PROPS_DEVICE
318 * USB_CFG_DESCR_PROPS_CONFIGURATION
319 * USB_CFG_DESCR_PROPS_STRINGS
320 * USB_CFG_DESCR_PROPS_STRING_0
321 * USB_CFG_DESCR_PROPS_STRING_VENDOR
322 * USB_CFG_DESCR_PROPS_STRING_PRODUCT
323 * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
324 * USB_CFG_DESCR_PROPS_HID
325 * USB_CFG_DESCR_PROPS_HID_REPORT
326 * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
327 *
328 * Note about string descriptors: String descriptors are not just strings, they
329 * are Unicode strings prefixed with a 2 byte header. Example:
330 * int serialNumberDescriptor[] = {
331 * USB_STRING_DESCRIPTOR_HEADER(6),
332 * 'S', 'e', 'r', 'i', 'a', 'l'
333 * };
334 */
335
336#define USB_CFG_DESCR_PROPS_DEVICE 0
337#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
338#define USB_CFG_DESCR_PROPS_STRINGS 0
339#define USB_CFG_DESCR_PROPS_STRING_0 0
340#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
341#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
342#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
343#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
344#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
345#define USB_CFG_DESCR_PROPS_UNKNOWN 0
346
347/* ----------------------- Optional MCU Description ------------------------ */
348
349/* The following configurations have working defaults in usbdrv.h. You
350 * usually don't need to set them explicitly. Only if you want to run
351 * the driver on a device which is not yet supported or with a compiler
352 * which is not fully supported (such as IAR C) or if you use a differnt
353 * interrupt than INT0, you may have to define some of these.
354 */
355/* #define USB_INTR_CFG MCUCR */
356/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
357/* #define USB_INTR_CFG_CLR 0 */
358/* #define USB_INTR_ENABLE GIMSK */
359/* #define USB_INTR_ENABLE_BIT INT0 */
360/* #define USB_INTR_PENDING GIFR */
361/* #define USB_INTR_PENDING_BIT INTF0 */
362/* #define USB_INTR_VECTOR INT0_vect */
363
364#endif /* __usbconfig_h_included__ */