├── .gitignore
├── README.md
├── cad
├── Case_3D_left.stl
├── Case_3D_right.stl
├── Case_3d.stl
└── keyboard_plate.dxf
├── hub_keyboard.jpg
├── pcb
├── gerber
│ ├── hub_keyboard.GBL
│ ├── hub_keyboard.GBO
│ ├── hub_keyboard.GBP
│ ├── hub_keyboard.GBS
│ ├── hub_keyboard.GML
│ ├── hub_keyboard.GTL
│ ├── hub_keyboard.GTO
│ ├── hub_keyboard.GTP
│ ├── hub_keyboard.GTS
│ ├── hub_keyboard.TXT
│ └── hub_keyboard.xln
├── hub_keyboard.brd
├── hub_keyboard.sch
└── jlc
│ ├── hub_keyboard_bom.csv
│ └── hub_keyboard_cpl.csv
├── pcb_back.jpg
├── pcb_front.jpg
└── qmk_config
├── config.h
├── hub_keyboard.c
├── hub_keyboard.h
├── keymaps
├── default
│ └── keymap.c
└── keymap_german.h
├── readme.md
├── rules.mk
└── v1
├── config.h
├── rules.mk
├── v1.c
└── v1.h
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | pcb/misc
3 |
4 | *.b#*
5 | *.s#*
6 | *.CAT*
7 | *.zip
8 | *.mnb
9 | *.mnt
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # HUB Keyboard
2 |
3 | A custom built 80% keyboard with an OLED and an integrated USB hub.
4 |
5 | 
6 |
7 | (The  can be found here.)
8 |
9 | ## Circuit Board
10 |
11 | 
12 |
13 | 
14 |
15 | The circuit board is designed in Eagle.
16 | For easy manufacturing, the gerber-files and SMT production files are included.
17 |
18 | The BOM and SMT placement file (CPL) are formatted for use with JLCPCB.
19 |
20 | Apart from the keys, display, and the USB-connector all parts can be populated by JLCPCB.
21 | The schematic contains the LCSC partnumbers in the attributes of each part.
22 |
23 | ### JLCPCB Configuration
24 |
25 | If you want to order PCBs from JLC-PCB with the provided gerber-files,
26 | use the following settings after uploading the zipped gerber folder:
27 |
28 | * Layers: 2
29 | * Dimension: 362mm x 128.5mm
30 | * PCB Color: Choose what you want
31 | * PCB Thickness: 1.6
32 | * Impedance: no
33 | * Surface Finish: HASL(with lead) (ENIG is also OK)
34 | * Copper Weight: 1
35 | * Gold Fingers: No
36 | * Material Details: FR4-Standard Tg 130-140C
37 | * Panel By JLCPCB: No
38 | * Flying Probe Test: Fully Test
39 | * Castellated Holes: no
40 | * Different Design: 1
41 | * Remove Order Number: Choose what you want
42 |
43 | 5 PCBs without assembly cost about 17.35€ or $19.60.
44 |
45 | If you want to have the SMT parts populated, choose "SMT Assembly" and select "Bottom Layer".
46 |
47 | When asked for the BOM and CPL file, upload the provided files.
48 |
49 | Assembly and parts for 5 PCBs costs about 45.50€ or $55.90.
50 |
51 |
52 | ### Keys
53 |
54 | All keys compatible with Cherry MX 2 or 3 pin should fit the board.
55 | There a mounting holes for the US-layout (with 2.25U Left Shift) and the EU-layout (with <> next to 1.25U Left Shift).
56 | The Spacebar can also be replaced by up 5 individual keys.
57 |
58 | ### Display
59 |
60 | The display is an 0.91" 128x32 SPI OLED module like [this](https://www.ebay.com/itm/312892164528). They are all over ebay and aliexpress.
61 |
62 | ### Misc Parts
63 |
64 | The USB Connectors can be found on Digikey, but you can substitute others with the same pad layout.#
65 |
66 | * USB-C : [Digikey](https://www.digikey.com/short/zm17vb)
67 | * USB-A : [Digikey](https://www.digikey.com/short/zm1tcc)
68 |
69 |
70 | ## QMK Configuration
71 |
72 | The folder qmk_config contains the configuration and code to build QMK for the HUB-Keyboard.
73 | Just put this folder in qmk/keyboards and run
74 |
75 | ```
76 | make hub_keyboard/v1:default
77 | ```
78 |
79 | ## Plate & Case
80 |
81 | Plate and Case are available as DXF and STL files. The Case also comes in two halves for easier printing. The DXF contains lines for both layout options at the left shift key. Delete what you don't need before cutting.
82 |
--------------------------------------------------------------------------------
/hub_keyboard.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stdlogicvector/hub_keyboard/0db691f648629007bd047f1dca911355f2a167ee/hub_keyboard.jpg
--------------------------------------------------------------------------------
/pcb/gerber/hub_keyboard.TXT:
--------------------------------------------------------------------------------
1 | M48
2 | ;GenerationSoftware,Autodesk,EAGLE,9.2.1*%
3 | ;CreationDate,2020-05-13T20:51:31Z*%
4 | FMAT,2
5 | ICI,OFF
6 | METRIC,TZ,000.000
7 | T12C0.300
8 | T11C0.650
9 | T10C0.813
10 | T9C1.016
11 | T8C1.092
12 | T7C1.707
13 | T6C1.753
14 | T5C2.311
15 | T4C3.048
16 | T3C3.200
17 | T2C3.988
18 | T1C4.089
19 | %
20 | G90
21 | M71
22 | T1
23 | X90487Y90487
24 | X195262Y114300
25 | X219075Y52387
26 | X347663Y71438
27 | X109537Y114300
28 | X238125Y52387
29 | X223837Y114300
30 | X276225Y71438
31 | X269088Y52387
32 | X52387Y114300
33 | X242887Y114300
34 | X26200Y33338
35 | X21438Y52387
36 | X347663Y14287
37 | X57150Y33338
38 | X261937Y114300
39 | X40488Y14287
40 | X76200Y33338
41 | X71438Y114300
42 | X280988Y114300
43 | X14287Y90487
44 | X95250Y33338
45 | X47625Y52387
46 | X33338Y90487
47 | X66675Y52387
48 | X114300Y33338
49 | X52387Y90487
50 | X90487Y114300
51 | X347663Y114300
52 | X71438Y90487
53 | X133350Y33338
54 | X309563Y90487
55 | X85725Y52387
56 | X104775Y52387
57 | X152400Y33338
58 | X109537Y90487
59 | X38100Y33338
60 | X309563Y71438
61 | X128587Y90487
62 | X171450Y33338
63 | X123825Y52387
64 | X147638Y90487
65 | X138113Y114300
66 | X190500Y33338
67 | X166688Y90487
68 | X309563Y14287
69 | X142875Y52387
70 | X185737Y90487
71 | X209550Y33338
72 | X157163Y114300
73 | X204787Y90487
74 | X309563Y114300
75 | X228600Y33338
76 | X223837Y90487
77 | X161925Y52387
78 | X16675Y33338
79 | X242887Y90487
80 | X264325Y33338
81 | X328613Y90487
82 | X271463Y90487
83 | X180975Y52387
84 | X16675Y14287
85 | X19050Y71438
86 | X176212Y114300
87 | X328613Y71438
88 | X42863Y71438
89 | X200025Y52387
90 | X61912Y71438
91 | X64300Y14287
92 | X80963Y71438
93 | X328613Y33338
94 | X100012Y71438
95 | X135738Y14287
96 | X119062Y71438
97 | X328613Y14287
98 | X230988Y14287
99 | X138113Y71438
100 | X157163Y71438
101 | X254800Y14287
102 | X328613Y114300
103 | X176212Y71438
104 | X183363Y14287
105 | X278613Y14287
106 | X195262Y71438
107 | X159550Y14287
108 | X347663Y90487
109 | X214312Y71438
110 | X207175Y14287
111 | X111925Y14287
112 | X233362Y71438
113 | X88113Y14287
114 | X14287Y114300
115 | X252412Y71438
116 | T2
117 | X259524Y82233
118 | X283401Y82233
119 | X14262Y25082
120 | X38138Y25082
121 | X276263Y25082
122 | X257150Y44132
123 | X252387Y25082
124 | X281026Y44132
125 | X186538Y6032
126 | X84938Y6032
127 | T3
128 | X291000Y33000
129 | X5000Y64000
130 | X291000Y91000
131 | X291000Y33000
132 | X357000Y123500
133 | X5000Y64000
134 | X357000Y5000
135 | X5000Y123500
136 | X5000Y5000
137 | X5000Y123500
138 | X5000Y5000
139 | X357000Y5000
140 | X357000Y123500
141 | X291000Y91000
142 | T4
143 | X276263Y40323
144 | X38138Y40323
145 | X252387Y40323
146 | X84938Y21273
147 | X259524Y97472
148 | X283401Y97472
149 | X281026Y59372
150 | X186538Y21273
151 | X14262Y40323
152 | X257150Y59372
153 | T5
154 | X117434Y119000
155 | X44566Y119000
156 | X31434Y119000
157 | X130566Y119000
158 | X203434Y119000
159 | X216566Y119000
160 | T6
161 | X183515Y57467
162 | X196215Y54927
163 | X202565Y57467
164 | X215265Y54927
165 | X221615Y57467
166 | X234315Y54927
167 | X240665Y57467
168 | X265278Y54927
169 | X271628Y57467
170 | X22390Y35878
171 | X28740Y38418
172 | X53340Y35878
173 | X59690Y38418
174 | X72390Y35878
175 | X78740Y38418
176 | X91440Y35878
177 | X97790Y38418
178 | X110490Y35878
179 | X116840Y38418
180 | X129540Y35878
181 | X135890Y38418
182 | X148590Y35878
183 | X154940Y38418
184 | X167640Y35878
185 | X173990Y38418
186 | X186690Y35878
187 | X193040Y38418
188 | X205740Y35878
189 | X212090Y38418
190 | X224790Y35878
191 | X231140Y38418
192 | X260515Y35878
193 | X266865Y38418
194 | X12865Y16828
195 | X19215Y19368
196 | X36678Y16828
197 | X43028Y19368
198 | X60490Y16828
199 | X66840Y19368
200 | X131928Y16828
201 | X138278Y19368
202 | X227178Y16828
203 | X233528Y19368
204 | X250990Y16828
205 | X257340Y19368
206 | X274803Y16828
207 | X281153Y19368
208 | X203365Y16828
209 | X209715Y19368
210 | X10478Y116840
211 | X16828Y119380
212 | X48577Y116840
213 | X54927Y119380
214 | X67628Y116840
215 | X73978Y119380
216 | X86678Y116840
217 | X93027Y119380
218 | X105727Y116840
219 | X112077Y119380
220 | X134303Y116840
221 | X140653Y119380
222 | X153353Y116840
223 | X159703Y119380
224 | X172403Y116840
225 | X178752Y119380
226 | X191452Y116840
227 | X197802Y119380
228 | X220027Y116840
229 | X226377Y119380
230 | X239077Y116840
231 | X245427Y119380
232 | X258127Y116840
233 | X264478Y119380
234 | X277178Y116840
235 | X283528Y119380
236 | X305753Y93027
237 | X312103Y95567
238 | X305753Y73978
239 | X312103Y76518
240 | X305753Y16828
241 | X312103Y19368
242 | X305753Y116840
243 | X312103Y119380
244 | X324803Y93027
245 | X331153Y95567
246 | X324803Y73978
247 | X331153Y76518
248 | X324803Y35878
249 | X331153Y38418
250 | X324803Y16828
251 | X331153Y19368
252 | X324803Y116840
253 | X331153Y119380
254 | X343853Y93027
255 | X350202Y95567
256 | X343853Y73978
257 | X350202Y76518
258 | X343853Y16828
259 | X350202Y19368
260 | X343853Y116840
261 | X350202Y119380
262 | X34290Y35878
263 | X40640Y38418
264 | X12865Y35878
265 | X19215Y38418
266 | X84303Y16828
267 | X90653Y19368
268 | X108115Y16828
269 | X114465Y19368
270 | X155740Y16828
271 | X162090Y19368
272 | X179553Y16828
273 | X185903Y19368
274 | X10478Y93027
275 | X16828Y95567
276 | X29527Y93027
277 | X35878Y95567
278 | X48577Y93027
279 | X54927Y95567
280 | X67628Y93027
281 | X73978Y95567
282 | X86678Y93027
283 | X93027Y95567
284 | X105727Y93027
285 | X112077Y95567
286 | X124777Y93027
287 | X131128Y95567
288 | X143828Y93027
289 | X150178Y95567
290 | X162878Y93027
291 | X169228Y95567
292 | X181927Y93027
293 | X188277Y95567
294 | X200977Y93027
295 | X207327Y95567
296 | X220027Y93027
297 | X226377Y95567
298 | X239077Y93027
299 | X245427Y95567
300 | X267653Y93027
301 | X274003Y95567
302 | X15240Y73978
303 | X21590Y76518
304 | X39053Y73978
305 | X45402Y76518
306 | X58102Y73978
307 | X64452Y76518
308 | X77153Y73978
309 | X83503Y76518
310 | X96202Y73978
311 | X102552Y76518
312 | X115252Y73978
313 | X121602Y76518
314 | X134303Y73978
315 | X140653Y76518
316 | X153353Y73978
317 | X159703Y76518
318 | X172403Y73978
319 | X178752Y76518
320 | X191452Y73978
321 | X197802Y76518
322 | X210502Y73978
323 | X216852Y76518
324 | X229552Y73978
325 | X235902Y76518
326 | X248602Y73978
327 | X254952Y76518
328 | X272415Y73978
329 | X278765Y76518
330 | X17628Y54927
331 | X23978Y57467
332 | X43815Y54927
333 | X50165Y57467
334 | X62865Y54927
335 | X69215Y57467
336 | X81915Y54927
337 | X88265Y57467
338 | X100965Y54927
339 | X107315Y57467
340 | X120015Y54927
341 | X126365Y57467
342 | X139065Y54927
343 | X145415Y57467
344 | X158115Y54927
345 | X164465Y57467
346 | X177165Y54927
347 | T7
348 | X133033Y71438
349 | X75883Y71438
350 | X86043Y71438
351 | X94932Y71438
352 | X105092Y71438
353 | X113982Y71438
354 | X124142Y71438
355 | X202095Y14287
356 | X143193Y71438
357 | X152083Y71438
358 | X162243Y71438
359 | X171133Y71438
360 | X181292Y71438
361 | X190182Y71438
362 | X200342Y71438
363 | X209232Y71438
364 | X219392Y71438
365 | X228282Y71438
366 | X238442Y71438
367 | X247332Y71438
368 | X257492Y71438
369 | X271145Y71438
370 | X281305Y71438
371 | X16358Y52387
372 | X26518Y52387
373 | X42545Y52387
374 | X52705Y52387
375 | X61595Y52387
376 | X71755Y52387
377 | X80645Y52387
378 | X90805Y52387
379 | X99695Y52387
380 | X109855Y52387
381 | X118745Y52387
382 | X128905Y52387
383 | X137795Y52387
384 | X147955Y52387
385 | X156845Y52387
386 | X167005Y52387
387 | X175895Y52387
388 | X186055Y52387
389 | X194945Y52387
390 | X205105Y52387
391 | X213995Y52387
392 | X224155Y52387
393 | X233045Y52387
394 | X243205Y52387
395 | X264008Y52387
396 | X274168Y52387
397 | X21120Y33338
398 | X31280Y33338
399 | X52070Y33338
400 | X62230Y33338
401 | X71120Y33338
402 | X81280Y33338
403 | X90170Y33338
404 | X100330Y33338
405 | X109220Y33338
406 | X119380Y33338
407 | X128270Y33338
408 | X138430Y33338
409 | X147320Y33338
410 | X157480Y33338
411 | X166370Y33338
412 | X176530Y33338
413 | X185420Y33338
414 | X195580Y33338
415 | X283693Y14287
416 | X204470Y33338
417 | X214630Y33338
418 | X223520Y33338
419 | X233680Y33338
420 | X259245Y33338
421 | X269405Y33338
422 | X11595Y14287
423 | X21755Y14287
424 | X35408Y14287
425 | X45568Y14287
426 | X59220Y14287
427 | X69380Y14287
428 | X130658Y14287
429 | X140818Y14287
430 | X225908Y14287
431 | X236068Y14287
432 | X249720Y14287
433 | X259880Y14287
434 | X273533Y14287
435 | X323533Y14287
436 | X333693Y14287
437 | X275908Y114300
438 | X286068Y114300
439 | X188443Y14287
440 | X304483Y90487
441 | X314643Y90487
442 | X304483Y71438
443 | X178283Y14287
444 | X323533Y114300
445 | X164630Y14287
446 | X154470Y14287
447 | X333693Y114300
448 | X117005Y14287
449 | X106845Y14287
450 | X314643Y71438
451 | X304483Y14287
452 | X314643Y14287
453 | X304483Y114300
454 | X314643Y114300
455 | X323533Y90487
456 | X342583Y90487
457 | X93193Y14287
458 | X83033Y14287
459 | X352742Y90487
460 | X342583Y71438
461 | X352742Y71438
462 | X342583Y14287
463 | X352742Y14287
464 | X342583Y114300
465 | X352742Y114300
466 | X33020Y33338
467 | X43180Y33338
468 | X11595Y33338
469 | X21755Y33338
470 | X333693Y90487
471 | X323533Y71438
472 | X333693Y71438
473 | X323533Y33338
474 | X333693Y33338
475 | X267018Y114300
476 | X256857Y114300
477 | X247967Y114300
478 | X237807Y114300
479 | X228917Y114300
480 | X218757Y114300
481 | X200342Y114300
482 | X190182Y114300
483 | X181292Y114300
484 | X171133Y114300
485 | X162243Y114300
486 | X152083Y114300
487 | X143193Y114300
488 | X133033Y114300
489 | X114617Y114300
490 | X104457Y114300
491 | X95567Y114300
492 | X85408Y114300
493 | X76518Y114300
494 | X66358Y114300
495 | X57467Y114300
496 | X47307Y114300
497 | X19368Y114300
498 | X9208Y114300
499 | X212255Y14287
500 | X9208Y90487
501 | X19368Y90487
502 | X28257Y90487
503 | X38418Y90487
504 | X47307Y90487
505 | X57467Y90487
506 | X66358Y90487
507 | X76518Y90487
508 | X85408Y90487
509 | X95567Y90487
510 | X104457Y90487
511 | X114617Y90487
512 | X123507Y90487
513 | X133668Y90487
514 | X142558Y90487
515 | X152718Y90487
516 | X161608Y90487
517 | X171768Y90487
518 | X180657Y90487
519 | X190817Y90487
520 | X199707Y90487
521 | X209867Y90487
522 | X218757Y90487
523 | X228917Y90487
524 | X237807Y90487
525 | X247967Y90487
526 | X266383Y90487
527 | X276543Y90487
528 | X13970Y71438
529 | X24130Y71438
530 | X37783Y71438
531 | X47942Y71438
532 | X56832Y71438
533 | X66993Y71438
534 | T8
535 | X177482Y109220
536 | X127317Y85408
537 | X274955Y66358
538 | X193992Y109220
539 | X196532Y109220
540 | X277495Y66358
541 | X129857Y85408
542 | X222567Y109220
543 | X225107Y109220
544 | X20168Y47307
545 | X241617Y109220
546 | X244157Y109220
547 | X22708Y47307
548 | X260667Y109220
549 | X263208Y109220
550 | X146368Y85408
551 | X46355Y47307
552 | X279718Y109220
553 | X48895Y47307
554 | X148908Y85408
555 | X308293Y85408
556 | X310833Y85408
557 | X65405Y47307
558 | X308293Y66358
559 | X310833Y66358
560 | X67945Y47307
561 | X308293Y9208
562 | X310833Y9208
563 | X165418Y85408
564 | X84455Y47307
565 | X308293Y109220
566 | X310833Y109220
567 | X86995Y47307
568 | X167958Y85408
569 | X327343Y85408
570 | X329883Y85408
571 | X103505Y47307
572 | X327343Y66358
573 | X329883Y66358
574 | X106045Y47307
575 | X327343Y28257
576 | X329883Y28257
577 | X184467Y85408
578 | X122555Y47307
579 | X327343Y9208
580 | X329883Y9208
581 | X125095Y47307
582 | X327343Y109220
583 | X329883Y109220
584 | X141605Y47307
585 | X346393Y85408
586 | X348933Y85408
587 | X144145Y47307
588 | X346393Y66358
589 | X348933Y66358
590 | X203517Y85408
591 | X160655Y47307
592 | X346393Y9208
593 | X348933Y9208
594 | X163195Y47307
595 | X206057Y85408
596 | X346393Y109220
597 | X348933Y109220
598 | X179705Y47307
599 | X36830Y28257
600 | X39370Y28257
601 | X182245Y47307
602 | X15405Y28257
603 | X17945Y28257
604 | X222567Y85408
605 | X198755Y47307
606 | X86843Y9208
607 | X89383Y9208
608 | X201295Y47307
609 | X225107Y85408
610 | X110655Y9208
611 | X113195Y9208
612 | X217805Y47307
613 | X158280Y9208
614 | X160820Y9208
615 | X220345Y47307
616 | X182093Y9208
617 | X184633Y9208
618 | X241617Y85408
619 | X282258Y109220
620 | X187007Y85408
621 | X236855Y47307
622 | X239395Y47307
623 | X244157Y85408
624 | X267818Y47307
625 | X270358Y47307
626 | X270193Y85408
627 | X24930Y28257
628 | X27470Y28257
629 | X272733Y85408
630 | X55880Y28257
631 | X58420Y28257
632 | X17780Y66358
633 | X74930Y28257
634 | X77470Y28257
635 | X20320Y66358
636 | X93980Y28257
637 | X96520Y28257
638 | X13017Y85408
639 | X41593Y66358
640 | X113030Y28257
641 | X115570Y28257
642 | X44132Y66358
643 | X15557Y85408
644 | X132080Y28257
645 | X134620Y28257
646 | X60642Y66358
647 | X151130Y28257
648 | X153670Y28257
649 | X63182Y66358
650 | X170180Y28257
651 | X172720Y28257
652 | X32067Y85408
653 | X79693Y66358
654 | X189230Y28257
655 | X191770Y28257
656 | X82233Y66358
657 | X34608Y85408
658 | X208280Y28257
659 | X210820Y28257
660 | X98742Y66358
661 | X227330Y28257
662 | X229870Y28257
663 | X101282Y66358
664 | X263055Y28257
665 | X265595Y28257
666 | X51117Y85408
667 | X117792Y66358
668 | X15405Y9208
669 | X17945Y9208
670 | X120332Y66358
671 | X53657Y85408
672 | X39218Y9208
673 | X41758Y9208
674 | X136843Y66358
675 | X63030Y9208
676 | X65570Y9208
677 | X139383Y66358
678 | X134468Y9208
679 | X137008Y9208
680 | X70168Y85408
681 | X155893Y66358
682 | X229718Y9208
683 | X232258Y9208
684 | X158433Y66358
685 | X72708Y85408
686 | X253530Y9208
687 | X256070Y9208
688 | X174942Y66358
689 | X277343Y9208
690 | X279883Y9208
691 | X177482Y66358
692 | X205905Y9208
693 | X208445Y9208
694 | X89217Y85408
695 | X193992Y66358
696 | X13017Y109220
697 | X15557Y109220
698 | X196532Y66358
699 | X91757Y85408
700 | X51117Y109220
701 | X53657Y109220
702 | X213042Y66358
703 | X70168Y109220
704 | X72708Y109220
705 | X215582Y66358
706 | X89217Y109220
707 | X91757Y109220
708 | X108267Y85408
709 | X232092Y66358
710 | X108267Y109220
711 | X110807Y109220
712 | X234632Y66358
713 | X110807Y85408
714 | X136843Y109220
715 | X139383Y109220
716 | X251142Y66358
717 | X155893Y109220
718 | X158433Y109220
719 | X253682Y66358
720 | X174942Y109220
721 | T9
722 | X311300Y47890
723 | X311300Y50430
724 | X311300Y52970
725 | X311300Y55510
726 | T10
727 | X306730Y38000
728 | X313730Y38000
729 | X316270Y38000
730 | X311730Y33500
731 | X314270Y33500
732 | X309730Y29000
733 | X312270Y29000
734 | X309270Y38000
735 | X304730Y33500
736 | X307270Y33500
737 | X302730Y29000
738 | X305270Y29000
739 | T11
740 | X292110Y123345
741 | X297890Y123345
742 | T12
743 | X353000Y48000
744 | X349000Y42000
745 | X209000Y104000
746 | X123000Y103000
747 | X39000Y103000
748 | X125000Y104000
749 | X211000Y105000
750 | X287500Y116000
751 | X301900Y113000
752 | X303000Y110000
753 | X303000Y108800
754 | X303000Y106000
755 | X291000Y108000
756 | X289000Y127000
757 | X301000Y127000
758 | X303000Y104800
759 | X287500Y113300
760 | X41500Y112500
761 | X44500Y110000
762 | X31500Y110000
763 | X41500Y117000
764 | X34000Y105000
765 | X35000Y105000
766 | X127500Y112500
767 | X130500Y110000
768 | X117500Y110000
769 | X127500Y117000
770 | X120000Y105000
771 | X121000Y105000
772 | X213500Y112500
773 | X216500Y110000
774 | X203500Y110000
775 | X213500Y117000
776 | X206000Y105000
777 | X207000Y105000
778 | X294300Y45300
779 | X296000Y47000
780 | X294000Y61000
781 | X296000Y63000
782 | X294000Y80000
783 | X296000Y82000
784 | X294000Y96000
785 | X296000Y96000
786 | X294000Y110000
787 | X316500Y45000
788 | X316500Y47000
789 | X321500Y45000
790 | X321500Y47000
791 | X233000Y105000
792 | X233000Y101000
793 | X100000Y103000
794 | X100000Y101000
795 | X81000Y103000
796 | X81000Y101000
797 | X62000Y103000
798 | X62000Y101000
799 | X147000Y104000
800 | X147000Y101000
801 | X166000Y104000
802 | X166000Y101000
803 | X185000Y104000
804 | X185000Y101000
805 | X252000Y105000
806 | X252000Y101000
807 | X271000Y105000
808 | X271000Y101000
809 | X344600Y47000
810 | X37000Y102000
811 | X345800Y56500
812 | X349500Y46500
813 | X357000Y41000
814 | X343000Y50500
815 | X291000Y111600
816 | X356000Y56000
817 | X39000Y109900
818 | X318300Y104000
819 | X317500Y104500
820 | X300500Y49000
821 | X294900Y45900
822 | X357000Y56000
823 | X347600Y47000
824 | X301000Y50000
825 | X300000Y50000
826 | X351000Y47000
827 | X355200Y51400
828 | X211000Y101000
829 | X349500Y39500
830 | X353300Y49500
831 | X307000Y56000
832 | X287500Y117500
833 | X303000Y107400
834 | X352486Y49514
835 | X291000Y109100
836 | X303000Y56000
837 | X351000Y41000
838 | X299000Y105800
839 | X350100Y45900
840 | X294000Y112000
841 | X37000Y109900
842 | X352500Y54500
843 | X356000Y48000
844 | X358000Y56000
845 | X350000Y38000
846 | X356000Y26000
847 | X286100Y106000
848 | X355000Y48000
849 | X285900Y108000
850 | X183000Y6000
851 | X292500Y117000
852 | X357000Y43000
853 | X359000Y56000
854 | X350500Y36500
855 | X295400Y46500
856 | X290500Y109700
857 | X297500Y117000
858 | X125000Y109900
859 | X290486Y110986
860 | X123000Y109900
861 | X291000Y110300
862 | X295000Y120000
863 | X298500Y120500
864 | X353000Y56000
865 | X357000Y48000
866 | X345000Y56500
867 | X342000Y49600
868 | X339100Y48300
869 | X342500Y42000
870 | X299000Y121000
871 | X291000Y121000
872 | X304000Y122000
873 | X286000Y122000
874 | X357000Y38500
875 | X291000Y105000
876 | X346000Y50000
877 | X350000Y50000
878 | X350000Y54000
879 | X346000Y54000
880 | X211000Y109900
881 | X354000Y56000
882 | X353000Y39000
883 | X290500Y112300
884 | X342500Y52600
885 | X342500Y53500
886 | X291500Y120500
887 | X354000Y48000
888 | X355000Y56000
889 | X209000Y109900
890 | X329600Y47500
891 | X342000Y54500
892 | X342500Y47500
893 | X352500Y44500
894 | X352000Y40000
895 | X342500Y44500
896 | M30
--------------------------------------------------------------------------------
/pcb/gerber/hub_keyboard.xln:
--------------------------------------------------------------------------------
1 | M48
2 | ;GenerationSoftware,Autodesk,EAGLE,9.2.1*%
3 | ;CreationDate,2020-05-13T20:51:30Z*%
4 | FMAT,2
5 | ICI,OFF
6 | METRIC,TZ,000.000
7 | T12C0.300
8 | T11C0.650
9 | T10C0.813
10 | T9C1.016
11 | T8C1.092
12 | T7C1.707
13 | T6C1.753
14 | T5C2.311
15 | T4C3.048
16 | T3C3.200
17 | T2C3.988
18 | T1C4.089
19 | %
20 | G90
21 | M71
22 | T1
23 | X90487Y90487
24 | X195262Y114300
25 | X219075Y52387
26 | X347663Y71438
27 | X109537Y114300
28 | X238125Y52387
29 | X223837Y114300
30 | X276225Y71438
31 | X269088Y52387
32 | X52387Y114300
33 | X242887Y114300
34 | X26200Y33338
35 | X21438Y52387
36 | X347663Y14287
37 | X57150Y33338
38 | X261937Y114300
39 | X40488Y14287
40 | X76200Y33338
41 | X71438Y114300
42 | X280988Y114300
43 | X14287Y90487
44 | X95250Y33338
45 | X47625Y52387
46 | X33338Y90487
47 | X66675Y52387
48 | X114300Y33338
49 | X52387Y90487
50 | X90487Y114300
51 | X347663Y114300
52 | X71438Y90487
53 | X133350Y33338
54 | X309563Y90487
55 | X85725Y52387
56 | X104775Y52387
57 | X152400Y33338
58 | X109537Y90487
59 | X38100Y33338
60 | X309563Y71438
61 | X128587Y90487
62 | X171450Y33338
63 | X123825Y52387
64 | X147638Y90487
65 | X138113Y114300
66 | X190500Y33338
67 | X166688Y90487
68 | X309563Y14287
69 | X142875Y52387
70 | X185737Y90487
71 | X209550Y33338
72 | X157163Y114300
73 | X204787Y90487
74 | X309563Y114300
75 | X228600Y33338
76 | X223837Y90487
77 | X161925Y52387
78 | X16675Y33338
79 | X242887Y90487
80 | X264325Y33338
81 | X328613Y90487
82 | X271463Y90487
83 | X180975Y52387
84 | X16675Y14287
85 | X19050Y71438
86 | X176212Y114300
87 | X328613Y71438
88 | X42863Y71438
89 | X200025Y52387
90 | X61912Y71438
91 | X64300Y14287
92 | X80963Y71438
93 | X328613Y33338
94 | X100012Y71438
95 | X135738Y14287
96 | X119062Y71438
97 | X328613Y14287
98 | X230988Y14287
99 | X138113Y71438
100 | X157163Y71438
101 | X254800Y14287
102 | X328613Y114300
103 | X176212Y71438
104 | X183363Y14287
105 | X278613Y14287
106 | X195262Y71438
107 | X159550Y14287
108 | X347663Y90487
109 | X214312Y71438
110 | X207175Y14287
111 | X111925Y14287
112 | X233362Y71438
113 | X88113Y14287
114 | X14287Y114300
115 | X252412Y71438
116 | T2
117 | X259524Y82233
118 | X283401Y82233
119 | X14262Y25082
120 | X38138Y25082
121 | X276263Y25082
122 | X257150Y44132
123 | X252387Y25082
124 | X281026Y44132
125 | X186538Y6032
126 | X84938Y6032
127 | T3
128 | X291000Y33000
129 | X5000Y64000
130 | X291000Y91000
131 | X291000Y33000
132 | X357000Y123500
133 | X5000Y64000
134 | X357000Y5000
135 | X5000Y123500
136 | X5000Y5000
137 | X5000Y123500
138 | X5000Y5000
139 | X357000Y5000
140 | X357000Y123500
141 | X291000Y91000
142 | T4
143 | X276263Y40323
144 | X38138Y40323
145 | X252387Y40323
146 | X84938Y21273
147 | X259524Y97472
148 | X283401Y97472
149 | X281026Y59372
150 | X186538Y21273
151 | X14262Y40323
152 | X257150Y59372
153 | T5
154 | X117434Y119000
155 | X44566Y119000
156 | X31434Y119000
157 | X130566Y119000
158 | X203434Y119000
159 | X216566Y119000
160 | T6
161 | X183515Y57467
162 | X196215Y54927
163 | X202565Y57467
164 | X215265Y54927
165 | X221615Y57467
166 | X234315Y54927
167 | X240665Y57467
168 | X265278Y54927
169 | X271628Y57467
170 | X22390Y35878
171 | X28740Y38418
172 | X53340Y35878
173 | X59690Y38418
174 | X72390Y35878
175 | X78740Y38418
176 | X91440Y35878
177 | X97790Y38418
178 | X110490Y35878
179 | X116840Y38418
180 | X129540Y35878
181 | X135890Y38418
182 | X148590Y35878
183 | X154940Y38418
184 | X167640Y35878
185 | X173990Y38418
186 | X186690Y35878
187 | X193040Y38418
188 | X205740Y35878
189 | X212090Y38418
190 | X224790Y35878
191 | X231140Y38418
192 | X260515Y35878
193 | X266865Y38418
194 | X12865Y16828
195 | X19215Y19368
196 | X36678Y16828
197 | X43028Y19368
198 | X60490Y16828
199 | X66840Y19368
200 | X131928Y16828
201 | X138278Y19368
202 | X227178Y16828
203 | X233528Y19368
204 | X250990Y16828
205 | X257340Y19368
206 | X274803Y16828
207 | X281153Y19368
208 | X203365Y16828
209 | X209715Y19368
210 | X10478Y116840
211 | X16828Y119380
212 | X48577Y116840
213 | X54927Y119380
214 | X67628Y116840
215 | X73978Y119380
216 | X86678Y116840
217 | X93027Y119380
218 | X105727Y116840
219 | X112077Y119380
220 | X134303Y116840
221 | X140653Y119380
222 | X153353Y116840
223 | X159703Y119380
224 | X172403Y116840
225 | X178752Y119380
226 | X191452Y116840
227 | X197802Y119380
228 | X220027Y116840
229 | X226377Y119380
230 | X239077Y116840
231 | X245427Y119380
232 | X258127Y116840
233 | X264478Y119380
234 | X277178Y116840
235 | X283528Y119380
236 | X305753Y93027
237 | X312103Y95567
238 | X305753Y73978
239 | X312103Y76518
240 | X305753Y16828
241 | X312103Y19368
242 | X305753Y116840
243 | X312103Y119380
244 | X324803Y93027
245 | X331153Y95567
246 | X324803Y73978
247 | X331153Y76518
248 | X324803Y35878
249 | X331153Y38418
250 | X324803Y16828
251 | X331153Y19368
252 | X324803Y116840
253 | X331153Y119380
254 | X343853Y93027
255 | X350202Y95567
256 | X343853Y73978
257 | X350202Y76518
258 | X343853Y16828
259 | X350202Y19368
260 | X343853Y116840
261 | X350202Y119380
262 | X34290Y35878
263 | X40640Y38418
264 | X12865Y35878
265 | X19215Y38418
266 | X84303Y16828
267 | X90653Y19368
268 | X108115Y16828
269 | X114465Y19368
270 | X155740Y16828
271 | X162090Y19368
272 | X179553Y16828
273 | X185903Y19368
274 | X10478Y93027
275 | X16828Y95567
276 | X29527Y93027
277 | X35878Y95567
278 | X48577Y93027
279 | X54927Y95567
280 | X67628Y93027
281 | X73978Y95567
282 | X86678Y93027
283 | X93027Y95567
284 | X105727Y93027
285 | X112077Y95567
286 | X124777Y93027
287 | X131128Y95567
288 | X143828Y93027
289 | X150178Y95567
290 | X162878Y93027
291 | X169228Y95567
292 | X181927Y93027
293 | X188277Y95567
294 | X200977Y93027
295 | X207327Y95567
296 | X220027Y93027
297 | X226377Y95567
298 | X239077Y93027
299 | X245427Y95567
300 | X267653Y93027
301 | X274003Y95567
302 | X15240Y73978
303 | X21590Y76518
304 | X39053Y73978
305 | X45402Y76518
306 | X58102Y73978
307 | X64452Y76518
308 | X77153Y73978
309 | X83503Y76518
310 | X96202Y73978
311 | X102552Y76518
312 | X115252Y73978
313 | X121602Y76518
314 | X134303Y73978
315 | X140653Y76518
316 | X153353Y73978
317 | X159703Y76518
318 | X172403Y73978
319 | X178752Y76518
320 | X191452Y73978
321 | X197802Y76518
322 | X210502Y73978
323 | X216852Y76518
324 | X229552Y73978
325 | X235902Y76518
326 | X248602Y73978
327 | X254952Y76518
328 | X272415Y73978
329 | X278765Y76518
330 | X17628Y54927
331 | X23978Y57467
332 | X43815Y54927
333 | X50165Y57467
334 | X62865Y54927
335 | X69215Y57467
336 | X81915Y54927
337 | X88265Y57467
338 | X100965Y54927
339 | X107315Y57467
340 | X120015Y54927
341 | X126365Y57467
342 | X139065Y54927
343 | X145415Y57467
344 | X158115Y54927
345 | X164465Y57467
346 | X177165Y54927
347 | T7
348 | X133033Y71438
349 | X75883Y71438
350 | X86043Y71438
351 | X94932Y71438
352 | X105092Y71438
353 | X113982Y71438
354 | X124142Y71438
355 | X202095Y14287
356 | X143193Y71438
357 | X152083Y71438
358 | X162243Y71438
359 | X171133Y71438
360 | X181292Y71438
361 | X190182Y71438
362 | X200342Y71438
363 | X209232Y71438
364 | X219392Y71438
365 | X228282Y71438
366 | X238442Y71438
367 | X247332Y71438
368 | X257492Y71438
369 | X271145Y71438
370 | X281305Y71438
371 | X16358Y52387
372 | X26518Y52387
373 | X42545Y52387
374 | X52705Y52387
375 | X61595Y52387
376 | X71755Y52387
377 | X80645Y52387
378 | X90805Y52387
379 | X99695Y52387
380 | X109855Y52387
381 | X118745Y52387
382 | X128905Y52387
383 | X137795Y52387
384 | X147955Y52387
385 | X156845Y52387
386 | X167005Y52387
387 | X175895Y52387
388 | X186055Y52387
389 | X194945Y52387
390 | X205105Y52387
391 | X213995Y52387
392 | X224155Y52387
393 | X233045Y52387
394 | X243205Y52387
395 | X264008Y52387
396 | X274168Y52387
397 | X21120Y33338
398 | X31280Y33338
399 | X52070Y33338
400 | X62230Y33338
401 | X71120Y33338
402 | X81280Y33338
403 | X90170Y33338
404 | X100330Y33338
405 | X109220Y33338
406 | X119380Y33338
407 | X128270Y33338
408 | X138430Y33338
409 | X147320Y33338
410 | X157480Y33338
411 | X166370Y33338
412 | X176530Y33338
413 | X185420Y33338
414 | X195580Y33338
415 | X283693Y14287
416 | X204470Y33338
417 | X214630Y33338
418 | X223520Y33338
419 | X233680Y33338
420 | X259245Y33338
421 | X269405Y33338
422 | X11595Y14287
423 | X21755Y14287
424 | X35408Y14287
425 | X45568Y14287
426 | X59220Y14287
427 | X69380Y14287
428 | X130658Y14287
429 | X140818Y14287
430 | X225908Y14287
431 | X236068Y14287
432 | X249720Y14287
433 | X259880Y14287
434 | X273533Y14287
435 | X323533Y14287
436 | X333693Y14287
437 | X275908Y114300
438 | X286068Y114300
439 | X188443Y14287
440 | X304483Y90487
441 | X314643Y90487
442 | X304483Y71438
443 | X178283Y14287
444 | X323533Y114300
445 | X164630Y14287
446 | X154470Y14287
447 | X333693Y114300
448 | X117005Y14287
449 | X106845Y14287
450 | X314643Y71438
451 | X304483Y14287
452 | X314643Y14287
453 | X304483Y114300
454 | X314643Y114300
455 | X323533Y90487
456 | X342583Y90487
457 | X93193Y14287
458 | X83033Y14287
459 | X352742Y90487
460 | X342583Y71438
461 | X352742Y71438
462 | X342583Y14287
463 | X352742Y14287
464 | X342583Y114300
465 | X352742Y114300
466 | X33020Y33338
467 | X43180Y33338
468 | X11595Y33338
469 | X21755Y33338
470 | X333693Y90487
471 | X323533Y71438
472 | X333693Y71438
473 | X323533Y33338
474 | X333693Y33338
475 | X267018Y114300
476 | X256857Y114300
477 | X247967Y114300
478 | X237807Y114300
479 | X228917Y114300
480 | X218757Y114300
481 | X200342Y114300
482 | X190182Y114300
483 | X181292Y114300
484 | X171133Y114300
485 | X162243Y114300
486 | X152083Y114300
487 | X143193Y114300
488 | X133033Y114300
489 | X114617Y114300
490 | X104457Y114300
491 | X95567Y114300
492 | X85408Y114300
493 | X76518Y114300
494 | X66358Y114300
495 | X57467Y114300
496 | X47307Y114300
497 | X19368Y114300
498 | X9208Y114300
499 | X212255Y14287
500 | X9208Y90487
501 | X19368Y90487
502 | X28257Y90487
503 | X38418Y90487
504 | X47307Y90487
505 | X57467Y90487
506 | X66358Y90487
507 | X76518Y90487
508 | X85408Y90487
509 | X95567Y90487
510 | X104457Y90487
511 | X114617Y90487
512 | X123507Y90487
513 | X133668Y90487
514 | X142558Y90487
515 | X152718Y90487
516 | X161608Y90487
517 | X171768Y90487
518 | X180657Y90487
519 | X190817Y90487
520 | X199707Y90487
521 | X209867Y90487
522 | X218757Y90487
523 | X228917Y90487
524 | X237807Y90487
525 | X247967Y90487
526 | X266383Y90487
527 | X276543Y90487
528 | X13970Y71438
529 | X24130Y71438
530 | X37783Y71438
531 | X47942Y71438
532 | X56832Y71438
533 | X66993Y71438
534 | T8
535 | X177482Y109220
536 | X127317Y85408
537 | X274955Y66358
538 | X193992Y109220
539 | X196532Y109220
540 | X277495Y66358
541 | X129857Y85408
542 | X222567Y109220
543 | X225107Y109220
544 | X20168Y47307
545 | X241617Y109220
546 | X244157Y109220
547 | X22708Y47307
548 | X260667Y109220
549 | X263208Y109220
550 | X146368Y85408
551 | X46355Y47307
552 | X279718Y109220
553 | X48895Y47307
554 | X148908Y85408
555 | X308293Y85408
556 | X310833Y85408
557 | X65405Y47307
558 | X308293Y66358
559 | X310833Y66358
560 | X67945Y47307
561 | X308293Y9208
562 | X310833Y9208
563 | X165418Y85408
564 | X84455Y47307
565 | X308293Y109220
566 | X310833Y109220
567 | X86995Y47307
568 | X167958Y85408
569 | X327343Y85408
570 | X329883Y85408
571 | X103505Y47307
572 | X327343Y66358
573 | X329883Y66358
574 | X106045Y47307
575 | X327343Y28257
576 | X329883Y28257
577 | X184467Y85408
578 | X122555Y47307
579 | X327343Y9208
580 | X329883Y9208
581 | X125095Y47307
582 | X327343Y109220
583 | X329883Y109220
584 | X141605Y47307
585 | X346393Y85408
586 | X348933Y85408
587 | X144145Y47307
588 | X346393Y66358
589 | X348933Y66358
590 | X203517Y85408
591 | X160655Y47307
592 | X346393Y9208
593 | X348933Y9208
594 | X163195Y47307
595 | X206057Y85408
596 | X346393Y109220
597 | X348933Y109220
598 | X179705Y47307
599 | X36830Y28257
600 | X39370Y28257
601 | X182245Y47307
602 | X15405Y28257
603 | X17945Y28257
604 | X222567Y85408
605 | X198755Y47307
606 | X86843Y9208
607 | X89383Y9208
608 | X201295Y47307
609 | X225107Y85408
610 | X110655Y9208
611 | X113195Y9208
612 | X217805Y47307
613 | X158280Y9208
614 | X160820Y9208
615 | X220345Y47307
616 | X182093Y9208
617 | X184633Y9208
618 | X241617Y85408
619 | X282258Y109220
620 | X187007Y85408
621 | X236855Y47307
622 | X239395Y47307
623 | X244157Y85408
624 | X267818Y47307
625 | X270358Y47307
626 | X270193Y85408
627 | X24930Y28257
628 | X27470Y28257
629 | X272733Y85408
630 | X55880Y28257
631 | X58420Y28257
632 | X17780Y66358
633 | X74930Y28257
634 | X77470Y28257
635 | X20320Y66358
636 | X93980Y28257
637 | X96520Y28257
638 | X13017Y85408
639 | X41593Y66358
640 | X113030Y28257
641 | X115570Y28257
642 | X44132Y66358
643 | X15557Y85408
644 | X132080Y28257
645 | X134620Y28257
646 | X60642Y66358
647 | X151130Y28257
648 | X153670Y28257
649 | X63182Y66358
650 | X170180Y28257
651 | X172720Y28257
652 | X32067Y85408
653 | X79693Y66358
654 | X189230Y28257
655 | X191770Y28257
656 | X82233Y66358
657 | X34608Y85408
658 | X208280Y28257
659 | X210820Y28257
660 | X98742Y66358
661 | X227330Y28257
662 | X229870Y28257
663 | X101282Y66358
664 | X263055Y28257
665 | X265595Y28257
666 | X51117Y85408
667 | X117792Y66358
668 | X15405Y9208
669 | X17945Y9208
670 | X120332Y66358
671 | X53657Y85408
672 | X39218Y9208
673 | X41758Y9208
674 | X136843Y66358
675 | X63030Y9208
676 | X65570Y9208
677 | X139383Y66358
678 | X134468Y9208
679 | X137008Y9208
680 | X70168Y85408
681 | X155893Y66358
682 | X229718Y9208
683 | X232258Y9208
684 | X158433Y66358
685 | X72708Y85408
686 | X253530Y9208
687 | X256070Y9208
688 | X174942Y66358
689 | X277343Y9208
690 | X279883Y9208
691 | X177482Y66358
692 | X205905Y9208
693 | X208445Y9208
694 | X89217Y85408
695 | X193992Y66358
696 | X13017Y109220
697 | X15557Y109220
698 | X196532Y66358
699 | X91757Y85408
700 | X51117Y109220
701 | X53657Y109220
702 | X213042Y66358
703 | X70168Y109220
704 | X72708Y109220
705 | X215582Y66358
706 | X89217Y109220
707 | X91757Y109220
708 | X108267Y85408
709 | X232092Y66358
710 | X108267Y109220
711 | X110807Y109220
712 | X234632Y66358
713 | X110807Y85408
714 | X136843Y109220
715 | X139383Y109220
716 | X251142Y66358
717 | X155893Y109220
718 | X158433Y109220
719 | X253682Y66358
720 | X174942Y109220
721 | T9
722 | X311300Y47890
723 | X311300Y50430
724 | X311300Y52970
725 | X311300Y55510
726 | T10
727 | X306730Y38000
728 | X313730Y38000
729 | X316270Y38000
730 | X311730Y33500
731 | X314270Y33500
732 | X309730Y29000
733 | X312270Y29000
734 | X309270Y38000
735 | X304730Y33500
736 | X307270Y33500
737 | X302730Y29000
738 | X305270Y29000
739 | T11
740 | X292110Y123345
741 | X297890Y123345
742 | T12
743 | X353000Y48000
744 | X349000Y42000
745 | X209000Y104000
746 | X123000Y103000
747 | X39000Y103000
748 | X125000Y104000
749 | X211000Y105000
750 | X287500Y116000
751 | X301900Y113000
752 | X303000Y110000
753 | X303000Y108800
754 | X303000Y106000
755 | X291000Y108000
756 | X289000Y127000
757 | X301000Y127000
758 | X303000Y104800
759 | X287500Y113300
760 | X41500Y112500
761 | X44500Y110000
762 | X31500Y110000
763 | X41500Y117000
764 | X34000Y105000
765 | X35000Y105000
766 | X127500Y112500
767 | X130500Y110000
768 | X117500Y110000
769 | X127500Y117000
770 | X120000Y105000
771 | X121000Y105000
772 | X213500Y112500
773 | X216500Y110000
774 | X203500Y110000
775 | X213500Y117000
776 | X206000Y105000
777 | X207000Y105000
778 | X294300Y45300
779 | X296000Y47000
780 | X294000Y61000
781 | X296000Y63000
782 | X294000Y80000
783 | X296000Y82000
784 | X294000Y96000
785 | X296000Y96000
786 | X294000Y110000
787 | X316500Y45000
788 | X316500Y47000
789 | X321500Y45000
790 | X321500Y47000
791 | X233000Y105000
792 | X233000Y101000
793 | X100000Y103000
794 | X100000Y101000
795 | X81000Y103000
796 | X81000Y101000
797 | X62000Y103000
798 | X62000Y101000
799 | X147000Y104000
800 | X147000Y101000
801 | X166000Y104000
802 | X166000Y101000
803 | X185000Y104000
804 | X185000Y101000
805 | X252000Y105000
806 | X252000Y101000
807 | X271000Y105000
808 | X271000Y101000
809 | X344600Y47000
810 | X37000Y102000
811 | X345800Y56500
812 | X349500Y46500
813 | X357000Y41000
814 | X343000Y50500
815 | X291000Y111600
816 | X356000Y56000
817 | X39000Y109900
818 | X318300Y104000
819 | X317500Y104500
820 | X300500Y49000
821 | X294900Y45900
822 | X357000Y56000
823 | X347600Y47000
824 | X301000Y50000
825 | X300000Y50000
826 | X351000Y47000
827 | X355200Y51400
828 | X211000Y101000
829 | X349500Y39500
830 | X353300Y49500
831 | X307000Y56000
832 | X287500Y117500
833 | X303000Y107400
834 | X352486Y49514
835 | X291000Y109100
836 | X303000Y56000
837 | X351000Y41000
838 | X299000Y105800
839 | X350100Y45900
840 | X294000Y112000
841 | X37000Y109900
842 | X352500Y54500
843 | X356000Y48000
844 | X358000Y56000
845 | X350000Y38000
846 | X356000Y26000
847 | X286100Y106000
848 | X355000Y48000
849 | X285900Y108000
850 | X183000Y6000
851 | X292500Y117000
852 | X357000Y43000
853 | X359000Y56000
854 | X350500Y36500
855 | X295400Y46500
856 | X290500Y109700
857 | X297500Y117000
858 | X125000Y109900
859 | X290486Y110986
860 | X123000Y109900
861 | X291000Y110300
862 | X295000Y120000
863 | X298500Y120500
864 | X353000Y56000
865 | X357000Y48000
866 | X345000Y56500
867 | X342000Y49600
868 | X339100Y48300
869 | X342500Y42000
870 | X299000Y121000
871 | X291000Y121000
872 | X304000Y122000
873 | X286000Y122000
874 | X357000Y38500
875 | X291000Y105000
876 | X346000Y50000
877 | X350000Y50000
878 | X350000Y54000
879 | X346000Y54000
880 | X211000Y109900
881 | X354000Y56000
882 | X353000Y39000
883 | X290500Y112300
884 | X342500Y52600
885 | X342500Y53500
886 | X291500Y120500
887 | X354000Y48000
888 | X355000Y56000
889 | X209000Y109900
890 | X329600Y47500
891 | X342000Y54500
892 | X342500Y47500
893 | X352500Y44500
894 | X352000Y40000
895 | X342500Y44500
896 | M30
--------------------------------------------------------------------------------
/pcb/jlc/hub_keyboard_bom.csv:
--------------------------------------------------------------------------------
1 | Comment,Designator,Footprint,LCSC
2 | 1.1A,F1,1210,C70100
3 | 1M,"R8, R10, R13, R16",0603,C22935
4 | 1N4148,"D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D15, D17, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30, D31, D32, D33, D34, D35, D36, D37, D38, D39, D40, D41, D42, D43, D44, D45, D46, D47, D48, D49, D50, D51, D52, D53, D54, D55, D56, D57, D58, D59, D60, D61, D62, D63, D64, D65, D66, D67, D68, D69, D70, D71, D72, D73, D74, D75, D76, D77, D78, D79, D80, D81, D82, D83, D84, D85, D86, D87, D88, D89, D90, D91, D92, D93, D94, D95",SOD123,C81598
5 | 1k,"R22, R23, R26, R27, R28, R29, R30, R31, R32",0603,C21190
6 | 1u,C20,0603,C15849
7 | 2k7,R1,0603,C13167
8 | 5k1,"R2, R6",0603,C23186
9 | 10k,"R7, R20, R21, R33",0603,C25804
10 | 10n,C14,0603,C57112
11 | 10n,"C1, C4, C6, C8",0603,C84709
12 | 10u,"C11, C12, C13",0603,C19702
13 | 12MHz,X1,SMD-3225_4P,C9002
14 | 12pF,"C9, C16, C17, C18",0603,C38523
15 | 16MHz,X2,SMD-3225_4P,C13738
16 | 20k,"R5, R24, R25",0603,C4184
17 | 22R,"R3, R4, R11, R12, R14, R15, R17, R18",0603,C23345
18 | 100k,R19,0603,C25803
19 | 100nF,"C2, C10, C15, C19",0603,C14663
20 | 100uF,"C3, C5, C7",3528,C16133
21 | FE1.1S,IC1,SSOP-28,C9359
22 | Ferrite,R9,0805,C44361
23 | PCF8574APWR,IC3,TSSOP-20,C94361
24 | PRTR5V0U2X,"D14, D16, D18",SOT-143,C384891
25 | ATMEGA32U4-MU,IC4,QFN-44_EP_7x7x0.5P,C112161
26 | SPST-SMD-5.2,RESET,SMD-5.2,C318884
27 | 24LC024SN,IC2,24LC024SN,C184083
28 |
--------------------------------------------------------------------------------
/pcb/jlc/hub_keyboard_cpl.csv:
--------------------------------------------------------------------------------
1 | Designator,MidX,MidY,Layer,Rotation
2 | C1,288,122,Bottom,180
3 | C2,301,115.3,Bottom,0
4 | C3,34.5,108,Bottom,90
5 | C4,44.5,112,Bottom,90
6 | C5,120.5,108,Bottom,90
7 | C6,130.5,112,Bottom,90
8 | C7,206.5,108,Bottom,90
9 | C8,216.5,112,Bottom,90
10 | C9,288.5,109,Bottom,180
11 | C10,289.5,114.6,Bottom,180
12 | C11,289.5,113.3,Bottom,180
13 | C12,301,110.1,Bottom,0
14 | C13,301,108.8,Bottom,0
15 | C14,301,106.1,Bottom,0
16 | C15,301,104.8,Bottom,0
17 | C16,288.5,104,Bottom,0
18 | C17,339.5,54.4,Bottom,180
19 | C18,339.5,49.5,Bottom,0
20 | C19,357,50.5,Bottom,90
21 | C20,348.5,45,Bottom,90
22 | D1,24,119,Bottom,0
23 | D2,62,119,Bottom,0
24 | D3,81,119,Bottom,0
25 | D4,100,119,Bottom,0
26 | D5,148,119,Bottom,0
27 | D6,167,119,Bottom,0
28 | D7,186,119,Bottom,0
29 | D8,233,119,Bottom,0
30 | D9,252,119,Bottom,0
31 | D10,271,119,Bottom,0
32 | D11,318,119,Bottom,0
33 | D12,337,119,Bottom,0
34 | D13,356,119,Bottom,0
35 | D14,38,108,Bottom,0
36 | D15,110,106,Bottom,180
37 | D16,124,108,Bottom,0
38 | D17,195.5,106.1,Bottom,180
39 | D18,210,108,Bottom,0
40 | D19,281,106,Bottom,180
41 | D20,24,95,Bottom,0
42 | D21,43,95,Bottom,0
43 | D22,62,95,Bottom,0
44 | D23,81,95,Bottom,0
45 | D24,100,95,Bottom,0
46 | D25,119,95,Bottom,0
47 | D26,138,95,Bottom,0
48 | D27,157,95,Bottom,0
49 | D28,176,95,Bottom,0
50 | D29,195,95,Bottom,0
51 | D30,214,95,Bottom,0
52 | D31,233,95,Bottom,0
53 | D32,252,95,Bottom,0
54 | D33,279,95,Bottom,0
55 | D34,318,95,Bottom,0
56 | D35,337,95,Bottom,0
57 | D36,356,95,Bottom,0
58 | D37,28,76,Bottom,0
59 | D38,52,76,Bottom,0
60 | D39,71,76,Bottom,0
61 | D40,90,76,Bottom,0
62 | D41,109,76,Bottom,0
63 | D42,128,76,Bottom,0
64 | D43,147,76,Bottom,0
65 | D44,166,76,Bottom,0
66 | D45,185,76,Bottom,0
67 | D46,204,76,Bottom,0
68 | D47,223,76,Bottom,0
69 | D48,242,76,Bottom,0
70 | D49,261,76,Bottom,0
71 | D50,285,76,Bottom,0
72 | D51,318,76,Bottom,0
73 | D52,337,76,Bottom,0
74 | D53,356,76,Bottom,0
75 | D54,31,57,Bottom,0
76 | D55,57,57,Bottom,0
77 | D56,76,57,Bottom,0
78 | D57,95,57,Bottom,0
79 | D58,114,57,Bottom,0
80 | D59,133,57,Bottom,0
81 | D60,152,57,Bottom,0
82 | D61,171,57,Bottom,0
83 | D62,190,57,Bottom,0
84 | D63,209,57,Bottom,0
85 | D64,228,57,Bottom,0
86 | D65,247,57,Bottom,0
87 | D66,278,55.9,Bottom,0
88 | D67,33,41,Bottom,0
89 | D68,47,38,Bottom,0
90 | D69,67,38,Bottom,0
91 | D70,86,38,Bottom,0
92 | D71,105,38,Bottom,0
93 | D72,124,38,Bottom,0
94 | D73,143,38,Bottom,0
95 | D74,162,38,Bottom,0
96 | D75,181,38,Bottom,0
97 | D76,200,38,Bottom,0
98 | D77,219,38,Bottom,0
99 | D78,238,38,Bottom,0
100 | D79,273,37,Bottom,0
101 | D80,329,43,Bottom,90
102 | D81,26,19,Bottom,0
103 | D82,50,19,Bottom,0
104 | D83,73,19,Bottom,0
105 | D84,97,19,Bottom,0
106 | D85,121,19,Bottom,0
107 | D86,145,19,Bottom,0
108 | D87,168,19,Bottom,0
109 | D88,192,19,Bottom,0
110 | D89,216,19,Bottom,0
111 | D90,240,19,Bottom,0
112 | D91,264,19,Bottom,0
113 | D92,288,19,Bottom,0
114 | D93,314,24,Bottom,90
115 | D94,323.9,24,Bottom,90
116 | D95,352.5,24,Bottom,90
117 | F1,280,125,Bottom,180
118 | IC1,295,110,Bottom,90
119 | IC2,295,101,Bottom,90
120 | IC3,306,52,Bottom,0
121 | IC4,348,52,Bottom,90
122 | R1,289.5,116,Bottom,180
123 | R2,290.5,119.5,Bottom,180
124 | R3,295,119,Bottom,0
125 | R4,295,117.6,Bottom,0
126 | R5,295,116,Bottom,180
127 | R6,299.5,119.5,Bottom,0
128 | R7,301,116.6,Bottom,180
129 | R8,302,122,Bottom,180
130 | R9,305,125,Bottom,0
131 | R10,31.5,112,Bottom,270
132 | R11,37,111.7,Bottom,90
133 | R12,39,111.7,Bottom,90
134 | R13,117.5,112,Bottom,270
135 | R14,123,111.7,Bottom,90
136 | R15,125,111.7,Bottom,90
137 | R16,203.5,112,Bottom,270
138 | R17,209,111.7,Bottom,90
139 | R18,211,111.7,Bottom,90
140 | R19,301,114,Bottom,0
141 | R20,301,112,Bottom,180
142 | R21,301,107.4,Bottom,180
143 | R22,300,52,Bottom,90
144 | R23,307,59.5,Bottom,0
145 | R24,315.5,51.5,Bottom,90
146 | R25,317.5,51.5,Bottom,90
147 | R26,351.5,58,Bottom,270
148 | R27,305.5,41,Bottom,270
149 | R28,308,41,Bottom,270
150 | R29,309.5,41,Bottom,270
151 | R30,312.6,41,Bottom,270
152 | R31,315,41,Bottom,270
153 | R32,316.5,41,Bottom,270
154 | R33,355,45.5,Bottom,180
155 | RESET,326,52,Bottom,0
156 | X1,288.5,106.5,Bottom,180
157 | X2,339.5,52,Bottom,180
158 |
--------------------------------------------------------------------------------
/pcb_back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stdlogicvector/hub_keyboard/0db691f648629007bd047f1dca911355f2a167ee/pcb_back.jpg
--------------------------------------------------------------------------------
/pcb_front.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stdlogicvector/hub_keyboard/0db691f648629007bd047f1dca911355f2a167ee/pcb_front.jpg
--------------------------------------------------------------------------------
/qmk_config/config.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 KW
3 |
4 | This program is free software: you can redistribute it and/or modify
5 | it under the terms of the GNU General Public License as published by
6 | the Free Software Foundation, either version 2 of the License, or
7 | (at your option) any later version.
8 |
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | GNU General Public License for more details.
13 |
14 | You should have received a copy of the GNU General Public License
15 | along with this program. If not, see .
16 | */
17 |
18 | #ifndef CONFIG_H
19 | #define CONFIG_H
20 |
21 | #include "config_common.h"
22 |
23 | /* USB Device descriptor parameter */
24 | #define VENDOR_ID 0xFEED
25 | #define PRODUCT_ID 0x9002
26 | #define MANUFACTURER KW
27 | #define PRODUCT HUB-Keyboard
28 | #define DESCRIPTION Keyboard with USB HUB
29 | #define USB_MAX_POWER_CONSUMPTION 100
30 |
31 | /* key matrix size */
32 | #define MATRIX_ROWS 6
33 | #define MATRIX_COLS 17
34 |
35 | /* define if matrix has ghost */
36 | //#define MATRIX_HAS_GHOST
37 |
38 | /* Set 0 if debouncing isn't needed */
39 | #define DEBOUNCE 5
40 |
41 | /* Combo */
42 | #define TAPPING_TERM 200
43 |
44 | /* I2C Speed */
45 | /* Limited to 100kHz by PCF8574 */
46 | #define F_SCL 100000UL
47 |
48 | /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
49 | //#define LOCKING_SUPPORT_ENABLE
50 | /* Locking resynchronize hack */
51 | //#define LOCKING_RESYNC_ENABLE
52 |
53 | #ifdef SUBPROJECT_v1
54 | #include "v1/config.h"
55 | #endif
56 |
57 | #endif
58 |
59 |
--------------------------------------------------------------------------------
/qmk_config/hub_keyboard.c:
--------------------------------------------------------------------------------
1 | #include "hub_keyboard.h"
2 |
3 | void suspend_power_down_kb(void)
4 | {
5 |
6 | }
7 |
8 | void suspend_wakeup_init_kb(void)
9 | {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/qmk_config/hub_keyboard.h:
--------------------------------------------------------------------------------
1 | #ifndef HUB_KEYBOARD_H
2 | #define HUB_KEYBOARD_H
3 |
4 | #ifdef KEYBOARD_hub_keyboard_v1
5 | #include "v1.h"
6 | #endif
7 |
8 | #include "quantum.h"
9 |
10 |
11 | #endif
12 |
--------------------------------------------------------------------------------
/qmk_config/keymaps/default/keymap.c:
--------------------------------------------------------------------------------
1 | #include QMK_KEYBOARD_H
2 | #include "keymap_german.h"
3 | #include "i2c_master.h"
4 |
5 | extern keymap_config_t keymap_config;
6 |
7 | // Keymap Layers
8 |
9 | #define _BASE 0
10 | #define _LAYER_1 1
11 |
12 | // Defines for task-manager etc.
13 | #define CALTDEL LCTL(LALT(KC_DEL))
14 | #define TSKMGR LCTL(LSFT(KC_ESC))
15 |
16 |
17 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 |
19 | /* Base
20 | * ,----------------------------------------------------------------------------------------------------------------------.
21 | * | ESC | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PRNT | ROLL | BRK |
22 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
23 | * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BKSP | INS | HOME | PGUP |
24 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
25 | * | TAB | q | w | e | r | t | z | u | i | o | p | ü | + | # | DEL | END | PGDN |
26 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
27 | * | CAPS | a | s | d | f | g | h | j | k | l | ö | ä | | RET | | | |
28 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
29 | * |LSHIFT| < | y | x | c | v | b | n | m | , | . | - | |RSHIFT| | UP | |
30 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
31 | * |LCTRL | LCMD | LALT | | | | SPACE| | | RALT | RCMD | | MENU | RCTRL| LEFT | DOWN | RIGHT|
32 | * `----------------------------------------------------------------------------------------------------------------------'
33 | */
34 | [_BASE] = LAYOUT( \
35 | KC_ESC, KC_NO, 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_PSCR, KC_SLCK, KC_BRK, \
36 | DE_CIRC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS, DE_ACUT, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
37 | KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE, DE_PLUS, DE_HASH, KC_DEL, KC_END, KC_PGDN, \
38 | KC_CAPS, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_OE, DE_AE, KC_NO, KC_ENT, KC_NO, KC_NO, KC_NO, \
39 | KC_LSFT, DE_LESS, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_NO, KC_RSFT, KC_NO, KC_UP, KC_NO, \
40 | KC_LCTL, KC_LCMD, KC_LALT, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_NO, KC_NO, KC_RALT, KC_RCMD, KC_NO, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT \
41 | ),
42 |
43 | /* Layer 1
44 | * ,----------------------------------------------------------------------------------------------------------------------.
45 | * | ESC | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PRNT | ROLL | BRK |
46 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
47 | * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | INS | HOME | PGUP |
48 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
49 | * | TAB | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | DEL | END | PGDN |
50 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
51 | * | CAPS | a | s | d | f | g | h | j | k | l | ; | ' | | RET | | | |
52 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
53 | * |LSHIFT|LSHIFT| z | x | c | v | b | n | m | , | . | / | |RSHIFT| | UP | |
54 | * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
55 | * |LCTRL | LCMD | LALT | | | | SPACE| | | RALT | RCMD | | MENU | RCTRL| LEFT | DOWN | RIGHT|
56 | * `----------------------------------------------------------------------------------------------------------------------'
57 | */
58 | [_LAYER_1] = LAYOUT( \
59 | KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
60 | KC_GRAVE, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
61 | KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, \
62 | KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, \
63 | KC_TRNS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_NO, \
64 | KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
65 | )
66 |
67 | };
68 |
69 | // Combos
70 |
71 | enum combos {
72 | CMB_RESET,
73 | CMB_LED,
74 | CMB_LAYER_0,
75 | CMB_LAYER_1
76 | };
77 |
78 | const uint16_t PROGMEM combo_reset[] = {KC_LCTL, KC_BRK, COMBO_END};
79 | const uint16_t PROGMEM combo_led[] = {KC_RCTL, KC_UP, COMBO_END};
80 | const uint16_t PROGMEM combo_layer_0[] = {KC_LCTL, KC_F1, COMBO_END};
81 | const uint16_t PROGMEM combo_layer_1[] = {KC_LCTL, KC_F2, COMBO_END};
82 |
83 |
84 | combo_t key_combos[COMBO_COUNT] = {
85 | [CMB_RESET] = COMBO_ACTION(combo_reset),
86 | [CMB_LED] = COMBO_ACTION(combo_led),
87 | [CMB_LAYER_0] = COMBO_ACTION(combo_layer_0),
88 | [CMB_LAYER_1] = COMBO_ACTION(combo_layer_1),
89 | };
90 |
91 | // User Functions
92 |
93 | // Runs just one time when the keyboard initializes.
94 | void matrix_init_user(void)
95 | {
96 | static uint8_t s_init = 0;
97 | if (!s_init) {
98 | i2c_init();
99 |
100 | s_init = 1;
101 | }
102 | }
103 |
104 | uint8_t new_leds = 0xFF;
105 | uint8_t leds[2] = { 0xFF, 0xFF };
106 |
107 | // Runs constantly in the background, in a loop.
108 | void matrix_scan_user(void)
109 | {
110 | if (leds[0] != new_leds)
111 | {
112 | leds[0] = new_leds;
113 | leds[1] = new_leds;
114 |
115 | i2c_transmit(0x70, leds, 2, 100); //PCF8574A = 0x70, PCF8574 = 0x40
116 | }
117 | }
118 |
119 | void process_combo_event(uint8_t combo_index, bool pressed)
120 | {
121 | static uint8_t led = 0;
122 |
123 | switch(combo_index) {
124 | case CMB_RESET:
125 | if (pressed) {
126 | reset_keyboard();
127 | }
128 | break;
129 |
130 | case CMB_LED:
131 | if (pressed) {
132 | new_leds |= 0xD8;
133 |
134 | switch(led)
135 | {
136 | case 0: new_leds &=~0x08; led++; break;
137 | case 1: new_leds &=~0x10; led++; break;
138 | case 2: new_leds &=~0x40; led++; break;
139 | case 3: new_leds &=~0x80; led=0; break;
140 | }
141 | }
142 | break;
143 |
144 | case CMB_LAYER_0:
145 | if (pressed) {
146 | layer_move(_BASE);
147 | }
148 | break;
149 |
150 | case CMB_LAYER_1:
151 | if (pressed) {
152 | layer_move(_LAYER_1);
153 | }
154 | break;
155 | }
156 | }
157 |
158 | /* LEDs
159 | 0x01 = ScrollLock
160 | 0x02 = CapsLock
161 |
162 | 0x20 0x04
163 | 0x40 0x08
164 | 0x80 0x10
165 | */
166 |
167 | bool process_record_user(uint16_t keycode, keyrecord_t *record) {
168 | switch (keycode)
169 | {
170 | }
171 | return true;
172 | };
173 |
174 | void led_set_user(uint8_t usb_led)
175 | {
176 | if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
177 | new_leds &=~0x01;
178 | } else
179 | {
180 | new_leds |= 0x01;
181 | }
182 | if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
183 | new_leds &=~0x02;
184 | } else
185 | {
186 | new_leds |= 0x02;
187 | }
188 |
189 | }
190 |
191 | #ifdef OLED_DRIVER_ENABLE
192 | void oled_task_user(void)
193 | {
194 | // Host Keyboard Layer Status
195 | oled_write_P(PSTR("Layer: "), false);
196 |
197 | switch (get_highest_layer(layer_state)) {
198 | case _BASE:
199 | oled_write_P(PSTR("Default\n"), false);
200 | new_leds &=~0x04;
201 | new_leds |= 0x20;
202 | break;
203 | case _LAYER_1:
204 | oled_write_P(PSTR("Layer 1\n"), false);
205 | new_leds &=~0x20;
206 | new_leds |= 0x04;
207 | break;
208 | default:
209 | oled_write_ln_P(PSTR("Undefined"), false);
210 | }
211 |
212 | // Host Keyboard LED Status
213 | uint8_t led_usb_state = host_keyboard_leds();
214 | oled_write_P(led_usb_state & (1<.
15 | */
16 |
17 | #ifndef KEYMAP_GERMAN
18 | #define KEYMAP_GERMAN
19 |
20 | #include "keymap.h"
21 |
22 | // normal characters
23 | #define DE_Z KC_Y
24 | #define DE_Y KC_Z
25 |
26 | #define DE_A KC_A
27 | #define DE_B KC_B
28 | #define DE_C KC_C
29 | #define DE_D KC_D
30 | #define DE_E KC_E
31 | #define DE_F KC_F
32 | #define DE_G KC_G
33 | #define DE_H KC_H
34 | #define DE_I KC_I
35 | #define DE_J KC_J
36 | #define DE_K KC_K
37 | #define DE_L KC_L
38 | #define DE_M KC_M
39 | #define DE_N KC_N
40 | #define DE_O KC_O
41 | #define DE_P KC_P
42 | #define DE_Q KC_Q
43 | #define DE_R KC_R
44 | #define DE_S KC_S
45 | #define DE_T KC_T
46 | #define DE_U KC_U
47 | #define DE_V KC_V
48 | #define DE_W KC_W
49 | #define DE_X KC_X
50 |
51 | #define DE_0 KC_0
52 | #define DE_1 KC_1
53 | #define DE_2 KC_2
54 | #define DE_3 KC_3
55 | #define DE_4 KC_4
56 | #define DE_5 KC_5
57 | #define DE_6 KC_6
58 | #define DE_7 KC_7
59 | #define DE_8 KC_8
60 | #define DE_9 KC_9
61 |
62 | #define DE_DOT KC_DOT
63 | #define DE_COMM KC_COMM
64 |
65 | #define DE_SS KC_MINS
66 | #define DE_AE KC_QUOT
67 | #define DE_UE KC_LBRC
68 | #define DE_OE KC_SCLN
69 |
70 | #define DE_CIRC KC_GRAVE // accent circumflex ^ and ring °
71 | #define DE_ACUT KC_EQL // accent acute ´ and grave `
72 | #define DE_PLUS KC_RBRC // + and * and ~
73 | #define DE_HASH KC_BSLS // # and '
74 | #define DE_LESS KC_NUBS // < and > and |
75 | #define DE_MINS KC_SLSH // - and _
76 |
77 | // shifted characters
78 | #define DE_RING LSFT(DE_CIRC) // °
79 | #define DE_EXLM LSFT(KC_1) // !
80 | #define DE_DQOT LSFT(KC_2) // "
81 | #define DE_PARA LSFT(KC_3) // §
82 | #define DE_DLR LSFT(KC_4) // $
83 | #define DE_PERC LSFT(KC_5) // %
84 | #define DE_AMPR LSFT(KC_6) // &
85 | #define DE_SLSH LSFT(KC_7) // /
86 | #define DE_LPRN LSFT(KC_8) // (
87 | #define DE_RPRN LSFT(KC_9) // )
88 | #define DE_EQL LSFT(KC_0) // =
89 | #define DE_QST LSFT(DE_SS) // ?
90 | #define DE_GRV LSFT(DE_ACUT) // `
91 | #define DE_ASTR LSFT(DE_PLUS) // *
92 | #define DE_QUOT LSFT(DE_HASH) // '
93 | #define DE_MORE LSFT(DE_LESS) // >
94 | #define DE_COLN LSFT(KC_DOT) // :
95 | #define DE_SCLN LSFT(KC_COMM) // ;
96 | #define DE_UNDS LSFT(DE_MINS) // _
97 |
98 | // Alt Gr-ed characters
99 | #define DE_SQ2 ALGR(KC_2) // ²
100 | #define DE_SQ3 ALGR(KC_3) // ³
101 | #define DE_LCBR ALGR(KC_7) // {
102 | #define DE_LBRC ALGR(KC_8) // [
103 | #define DE_RBRC ALGR(KC_9) // ]
104 | #define DE_RCBR ALGR(KC_0) // }
105 | #define DE_BSLS ALGR(DE_SS) // backslash
106 | #define DE_AT ALGR(KC_Q) // @
107 | #define DE_EURO ALGR(KC_E) // €
108 | #define DE_TILD ALGR(DE_PLUS) // ~
109 | #define DE_PIPE ALGR(DE_LESS) // |
110 |
111 | #endif
112 |
--------------------------------------------------------------------------------
/qmk_config/readme.md:
--------------------------------------------------------------------------------
1 | HUB Keyboard
2 | ===
3 |
4 | 
5 |
6 | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
7 |
8 | TODO: Add Description
9 |
10 | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
11 |
12 | Make example for this keyboard (after setting up your build environment):
13 |
14 | make hub_keyboard/v1:default
15 |
16 | See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
17 |
18 | -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
19 |
--------------------------------------------------------------------------------
/qmk_config/rules.mk:
--------------------------------------------------------------------------------
1 | # MCU name
2 | MCU = 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
12 | BOOTLOADER = atmel-dfu
13 |
14 | # Build Options
15 | # change to "no" to disable the options, or define them in the Makefile in
16 | # the appropriate keymap folder that will get included automatically
17 | #
18 | ENCODER_ENABLE = no # Rotary Encoders
19 | MOUSEKEY_ENABLE = no # Mouse keys(+4700)
20 | COMBO_ENABLE = yes # Key Combos
21 | OLED_DRIVER_ENABLE = yes # OLED Display
22 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
23 | KEY_LOCK_ENABLE = yes # Key Lock
24 | LED_MATRIX_ENABLE = no # LED Matrix Controller (IS31FL3731)
25 | EXTRAKEY_ENABLE = no # Audio control and System control(+450)
26 | CONSOLE_ENABLE = no # Console for debug(+400)
27 | COMMAND_ENABLE = no # Commands for debug and configuration
28 | NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
29 | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
30 | MIDI_ENABLE = no # MIDI controls
31 | AUDIO_ENABLE = no # Audio output on port C6
32 | UNICODE_ENABLE = no # Unicode
33 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
34 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
35 | API_SYSEX_ENABLE = no
36 |
37 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
38 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
39 |
40 | DEFAULT_FOLDER = hub_keyboard/v1
41 |
--------------------------------------------------------------------------------
/qmk_config/v1/config.h:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 KW
3 |
4 | This program is free software: you can redistribute it and/or modify
5 | it under the terms of the GNU General Public License as published by
6 | the Free Software Foundation, either version 2 of the License, or
7 | (at your option) any later version.
8 |
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | GNU General Public License for more details.
13 |
14 | You should have received a copy of the GNU General Public License
15 | along with this program. If not, see .
16 | */
17 |
18 | #ifndef V1_CONFIG_H
19 | #define V1_CONFIG_H
20 |
21 | #include "../config.h"
22 |
23 | #define DEVICE_VER 0x0001
24 |
25 | #define MATRIX_ROW_PINS { F4, F5, F6, F7, F0, F1 }
26 | #define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, E6 }
27 | #define UNUSED_PINS
28 |
29 | #define DIODE_DIRECTION COL2ROW
30 |
31 | #define COMBO_COUNT 4
32 |
33 | #endif
--------------------------------------------------------------------------------
/qmk_config/v1/rules.mk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stdlogicvector/hub_keyboard/0db691f648629007bd047f1dca911355f2a167ee/qmk_config/v1/rules.mk
--------------------------------------------------------------------------------
/qmk_config/v1/v1.c:
--------------------------------------------------------------------------------
1 | #include "hub_keyboard.h"
2 |
3 | void matrix_init_kb(void)
4 | {
5 | matrix_init_user();
6 | };
7 |
8 | void matrix_scan_kb(void) {
9 | // put your looping keyboard code here
10 | // runs every cycle (a lot)
11 |
12 | matrix_scan_user();
13 | }
14 |
15 | bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
16 | // put your per-action keyboard code here
17 | // runs for every action, just before processing by the firmware
18 |
19 | return process_record_user(keycode, record);
20 | }
21 |
22 | void led_set_kb(uint8_t usb_led) {
23 | // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
24 |
25 | led_set_user(usb_led);
26 | }
27 |
--------------------------------------------------------------------------------
/qmk_config/v1/v1.h:
--------------------------------------------------------------------------------
1 | #ifndef V1_H
2 | #define V1_H
3 |
4 | #include "../hub_keyboard.h"
5 |
6 | #include "quantum.h"
7 |
8 | #define LAYOUT( \
9 | K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
10 | K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
11 | K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
12 | K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, \
13 | K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, \
14 | K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
15 | ) \
16 | { \
17 | { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, }, \
18 | { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, }, \
19 | { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, }, \
20 | { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, }, \
21 | { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, }, \
22 | { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F, K5G, } \
23 | }
24 |
25 | #endif
26 |
27 |
--------------------------------------------------------------------------------