HHKB connector lines:
JP Pro2 Pro Function Description ATMega32U4
--------------------------------------------------------------------------------------------
1 Vcc(5V) 5V
1 1 2 Vcc(5V) 5V
2 2 3 Vcc(5V) 5V
3 3 4 TP1684 ~KEY: Low(0) when key is pressed PD7 input(with pullup)
4 4 5 TP1684 HYS: High(1) when key is pressed PB7 output
5 5 6 HC4051 A(bit0)\ PB0 output
6 6 7 HC4051 B(bit1) > select row 0-7 PB1 output
7 7 8 HC4051 C(bit2)/ PB2 output
8 8 9 LS145 A(bit0)\ PB3 output
9 9 10 LS145 B(bit1) > select column 0-7 PB4 output
10 10 11 LS145 C(bit2)/ PB5 output
11 11 12 LS145 ~D(enable) Low(0) enables selected column PB6 output
12 12 13 GND GND
13 13 14 GND GND
15 GND
14 HC4051(Z2) ~Enable of Z2 row0-7 PC6
15 HC4051(Z3) ~Enable of Z3 row8-15 PC7
unavailability of Teensy++/Teensy(because of PS3 cracking boom?)
How did you add 12KRO support to a USB keyboard. Are you using a custom driver or the standard Microsoft HID keyboard driver?
How did you add 12KRO support to a USB keyboard. Are you using a custom driver or the standard Microsoft HID keyboard driver?
It uses two standard HID endpoints for 12KRO and standard driver is used.
Windows sees this as two another keyboards on Device Manager.
You have to be careful with that - if a report moves between "keyboards", it will be like releasing the key on one and pressing it on the other virtual keyboard.
BTW, why don't you just try increasing the number of reports with a single keyboard, along with a proper descriptor?
I am not sure that increasing over 6 keys on single report is recognized by OS keyboard driver. The keyboard which needs a custom driver is cumbersome.
The HID doesn't specify anything about limit, so I don't see why HID drivers should have any limit, let alone at 6. That's the whole purpose of the cumbersome HID and the descriptors after all! I can speculate that the keyboards are 6KRO because the firmware developer just copied some example descriptors, or was lazy and chose easier compatibility with the boot mode.
On the other hand, if some OS' driver is hardcoded to a limit, that'll be useful information. Can you verify that?
I'll get to it someday soon, but you have all the tools at your disposal. Be the hero to uncover the mystery. ;-)
101 for (i = 2; i < 8; i++) {
102
103 if (kbd->old[i] > 3 && memscan(kbd->new + 2, kbd->old[i], 6) == kbd->new + 8) {
104 if (usb_kbd_keycode[kbd->old[i]])
105 input_report_key(kbd->dev, usb_kbd_keycode[kbd->old[i]], 0);
106 else
107 dev_info(&urb->dev->dev,
108 "Unknown key (scancode %#x) released.\n", kbd->old[i]);
109 }
110
111 if (kbd->new[i] > 3 && memscan(kbd->old + 2, kbd->new[i], 6) == kbd->old + 8) {
112 if (usb_kbd_keycode[kbd->new[i]])
113 input_report_key(kbd->dev, usb_kbd_keycode[kbd->new[i]], 1);
114 else
115 dev_info(&urb->dev->dev,
116 "Unknown key (scancode %#x) released.\n", kbd->new[i]);
117 }
118 }
119
120 input_sync(kbd->dev);
121
122 memcpy(kbd->old, kbd->new, 8);
If I get spare time, I'll try to verify the limit on Windows/Linux. (I have no working Mac now :)
I don't know whether the Mac driver has the same limit, but it has one other notable difference: keyboard state is separate for each keyboard, so a modifier key only applies to the keyboard it is on. For example, if you have two keyboards, and press the shift key on one keyboard and the ";:" key on another, Linux & Windows will process this as ":" but OS X will treat it as ";".
I don't know whether the Mac driver has the same limit, but it has one other notable difference: keyboard state is separate for each keyboard, so a modifier key only applies to the keyboard it is on. For example, if you have two keyboards, and press the shift key on one keyboard and the ";:" key on another, Linux & Windows will process this as ":" but OS X will treat it as ";".
Like I've said earlier I've seen lots of people saying you can simply change a HID descriptor but I'm pretty sure the OS will not recognize it.
If it was that easy some keyboard manufacturer would have done it by now other than Microsoft's Sidewinder X4.
The HID doesn't specify anything about limit, so I don't see why HID drivers should have any limit,
hasu, I still think the idea of using two endpoints is very good.
If the first is configured for 6 keys and the second for 62 keys, it should be very compatible with most BIOS and OS (all of them, if you don't press more than 6 keys!).
I verified that 62KRO by big HID report and standard driver(kbdhid.sys) is possible at least on Windows 7. (Behaviour on other platform and boot protocol is not verified.)
When an OS starts it should read descriptors from all HID devices.
So a HID keyboard could (in theory) then switch to using larger reports.
Descriptors are read on every USB device enumeration, i.e. each time they connect/re-connect. Host can force re-connect, too.
Thanks for your insightful comment, Soarer.
I also think a compatibility is a first target for a keyboard.
A keyboard which doesn't work in some platform is lame.
64bytes report should be an option not a default, of course.
It is a excess and resource waste for normal use.
#if 0
0x95, USB_NUM_KEYS, // Report Count (6),
0x75, 0x08, // Report Size (8),
0x15, 0x00, // Logical Minimum (0),
0x25, 0xFF, // Logical Maximum(255), // was 0x68, // Logical Maximum(104),
0x05, 0x07, // Usage Page (Key Codes),
0x19, 0x00, // Usage Minimum (0),
0x29, 0xFF, // Usage Maximum (255), // was 0x68, // Usage Maximum (104),
0x81, 0x00, // Input (Data, Array),
#else
0x75, 0x01, // Report Size (1),
0x95, 0xF0, // Report Count (240), // 30 bytes
0x05, 0x07, // Usage Page (Key Codes),
0x19, 0x04, // Usage Minimum (4), // start at 'A'
0x29, 0xF3, // Usage Maximum (243), // 30 bytes worth
0x15, 0x00, // Logical Minimum (0),
0x25, 0x01, // Logical Maximum (1),
0x81, 0x02, // Input (Data, Variable, Absolute), ;keys bit array
#endif
Yep, that might do, too. How about for a 16-byte report, if you don't need codes above 128?
Splitting into regions would be ok. I can't really predict what's theoretically better - shortening the packet size will free few negligible bytes off USB, but splitting into regions might eat host CPU cycles due to more complex processing in the high-level HID code.
It wouldn't bother the PC side, but on the Teensy it would be more effort, and probably not worth it. But it's certainly possible.
Windows scans devices but does NOT issue a SetProtocol command. IIRC this has been given before as an answer to why more than 6KRO is not possible under Windows (without tricks). But, I thought, what if Windows expects the device to initialize to the correct protocol? I'm still not sure exactly when that initialization should happen, so I reset the protocol to NKRO when the host is starting to read the descriptors.
The BIOS ignores the descriptors it reads, and simply expects to get standard boot mode reports (modifiers + 6 keys). So in the code, there is no descriptor defined that matches boot mode (it sends the NKRO one).
Along the way, I discovered that my BIOS doesn't seem to mind if it gets a larger report, as long as it begins with the standard 8 bytes. I don't know if that could be relied on across all machines.
AVR is more than fast enough, just some level of indirection through tables.I meant effort to code, and I'm lazy ;-)
The unknown hell of high-level abstraction in the PC HID drivers is what would bother me, so I'd keep the report in a single array.
You are supposed to enter boot mode only when SetProtocol is issued. After reset/re-enumeration, you must be back to default (long-report) mode. It doesn't matter if the BIOS set boot mode, once OS loads up it will power cycle the USB ports and re-enumerate devices.Yeah, that's what I found out. I think I should move the 'reset' to where it handles SetConfiguration. The Microsoft tests (http://msdn.microsoft.com/en-us/library/ff568610%28VS.85%29.aspx) demand being able to handle SetProtocol to go into full report mode (TD-9.27.3.3), but I've never seen it happen.
No, keep it 8 bytes.Oh, I will. No point in doing otherwise. But I found it curious, because it would mean that a device using the standard report layout, but extended with more keys, would work ok in the bios. Just another reason to ask 'why hasn't someone done this before'?
0x95, 0x70, // Report Count (112),
0x75, 0x01, // Report Size (1),
0x15, 0x00, // Logical Minimum (0),
0x25, 0x01, // Logical Maximum(1),
0x05, 0x07, // Usage Page (Key Codes),
0x19, 0x00, // Usage Minimum (0),
0x29, 0x73, // Usage Maximum (111),
0x81, 0x02, // Input (Data, Variable, Absolute),
Oh, I will. No point in doing otherwise. But I found it curious, because it would mean that a device using the standard report layout, but extended with more keys, would work ok in the bios. Just another reason to ask 'why hasn't someone done this before'?The answer is easier than it sounds: it takes too much code to run an entire USB HID stack.
So why haven't they? Is there a nasty 'gotcha' lurking somewhere that we haven't spotted yet?
unsigned char kbdData[12];
cin >> kbdData;
char key1 = kbdData[4];
char key2 = kbdData[5];
etc...
char key6 = kbdData[11]
Because the boot mode is very strict, they can make assumptions of where the scancodes are and ignore everything else.
Could it be endpoint buffer size and packet signalling?
The answer is easier than it sounds: it takes too much code to run an entire USB HID stack.
So what they do is send a SetProtocol command and then read the raw keyboard data: (written in pseudo-C++ for convenience)Code: [Select]unsigned char kbdData[12];
Because the boot mode is very strict, they can make assumptions of where the scancodes are and ignore everything else.
cin >> kbdData;
char key1 = kbdData[4];
char key2 = kbdData[5];
etc...
char key6 = kbdData[11]
I have a bad news.
Windows 2000 failed to handle my 16byte report. :<
Thanks for posting, this is very helpful information. I have the HHKB pro 2 and I want to keep the USB hub intact, so instead of replacing the controller completely I'm going to program an AVR to just translate the address bits on 6-11 to the remapped keys.
anyone know how this is possible to do? or a tutorial prehaps? id like change my layout from qwerty to colemak natively thru the kb(hhkb2) without replacing the controller.
My Realforce 87U has DIP Switch setting 4 for firmware upgrade. Don't think the HHKB has that.
Awesome work.
I've been toying with the idea of a teensy controller, but I'm quite unexperienced with this stuff. Any good documentation recommendations on where I could start?
Keyswitch PCB connector Teensy++ pins
-------------------------------------------------------------------------------
1 Vcc(5V) 5V
2 Vcc(5V)
3 TP1684 KEY: Low(0) when key pressed PE6 input(pulluped)
4 TP1684 KEY_PREV: assert previous key state??? PE7 output
5 HC4051 A(bit0) select 8 rows(0 to 7) PB0 output
6 HC4051 B(bit1) PB1 output
7 HC4051 C(bit2) PB2 output
8 LS145 A(bit0) select 8 columns(0 to 7) PB3 output
9 LS145 B(bit1) PB4 output
10 LS145 C(bit2) PB5 output
11 LS145 D(enable) Low(0) enable selected column PB6 output
12 GND
13 GND GND
Got it today. Now my spare pro2 got new controller.Show Image(http://i.imgur.com/ryhgHzb.jpg)
Seems like it has worked well so far.
- With this controller HHKB get programable while losing its USB Hub function as you can see.
- You can install the controller PCB very easily with just screw drivers.
- Components on right half part of PCB are not implemented it is for protyping purpose only and I don't know whether this part works or not atm.
Wraul, if you are still interested in getting this PM me.
I was working on this web based keymap editor recently. Now it can do the job somewhat.Wow. This is awesome stuff. Are you able to do it for Ergodox user base on cub-uanic's tmk firmware for Ergodox?Show Image(http://i.imgur.com/A5U8s1Mm.png)
This editor is a fully client side javascript web applicaton without using web app server, it works enven without network connection. You can download hex file after editing your keymap, just need to program it without compile process.
You can try this at: http://tmk.github.io/tmk_keyboard/editor/hhkb/
This is greatly inspired by Yuri Khan's great work of TECK layout configurator and stole its ideas about share URL and hex download.
https://github.com/yurivkhan/teck/
http://yurivkhan.github.io/teck/
Wow. This is awesome stuff. Are you able to do it for Ergodox user base on cub-uanic's tmk firmware for Ergodox?
I so need one of these! I can't wait for Rev B
hash, you should talk to komar007 about the PCB manufacturing. He had the GH60 Rev B assembled with all components at the fab, and they turned out great. I believe he was also interested in integrating Bluetooth into the GH60 in the future.
I'll start to design Rev.B PCB before long. Before start the work I'd try to ask some.
1) Rev.A users, do you have any flaw or thought on the board?
If you have requeset, complain, suggestion or anything, post it here(or PM me if it needs). Feedback from real users is very important and helps me a lot.
2) Other suggestion or idea on this?
Are there missing or wanting features?
(But... Don't say about USB hub and DIP switch :) I don't need them!)
Or recommended compornent supplier PCB manufacturer or other production service?
3) Any advices on circuit or PCB work?
I'm not an expert of electronics at all. No doubt I did and will make many mistakes. I need advices.
Why Rev.B?
Rev.A works well with HHKB pro2 and Type-S as a wired USB controller. The reason why I set to Rev.B is to add wireless option with Bluetooth. Rev.B still works as USB controller and also can connect with wireless if you install BT module and other parts on it. In my plan you can switch between USB and Buletooth, and Li-po battery are charged with USB.
Wired controller part of Rev.A has no apparent flaws so I wont change its design except for some parts are removed or replaced, while its wireless portion has some flaws to be fixed. In Rev.B I'll use new module Roving RN-42 and add FET switching circuit for power control between USB and battery.
Rev.A
KiCAD project:
https://github.com/tmk/HHKB_controller/tree/revA
PCB image:
http://i.imgur.com/NHAavrm.jpg
Schematic:
(Attachment Link)
My post might be a bit confusing.
If you want to connect your HHKB with USB Rev.B is good for you. But Bluetooh is not mature enough on Rev.B yet, it will need to be revised several times like Rev.C,D,... to finish this wireless project. So you should wait for long time if you need wireless.
I so need one of these! I can't wait for Rev BI'm still trying to work into that BT project of ours.
hasu, you should talk to komar007 about the PCB manufacturing. He had the GH60 Rev B assembled with all components at the fab, and they turned out great. I believe he was also interested in integrating Bluetooth into the GH60 in the future.
phatdood9, you're already on list, sure.
kennardsmith, TacticalCoder, welcome! wrote down.
BT means I could use my HHKB with iPad ? If so then yes yes, I'm in for sure.
BT means I could use my HHKB with iPad ? If so then yes yes, I'm in for sure.
You shouldn't need bt for that. Use the camera connection thing.
Would love to get in on this if still possible! My hack to use the HHKB with an iPad is not exactly convenient. I'd be in for one, maybe even two of these for now.
BT means I could use my HHKB with iPad ? If so then yes yes, I'm in for sure.
You shouldn't need bt for that. Use the camera connection thing.
BT means I could use my HHKB with iPad ? If so then yes yes, I'm in for sure.
You shouldn't need bt for that. Use the camera connection thing.
As far as I know it doesn't work because of the extra power draw for the USB hub, might work with this mod but not sure, can anyone confirm?
HolidaySHRIMP 09/10
ekw808 09/15
esoomenona 09/17
MarioRicalde 09/20
argcargv 10/30
Felis Catus 11/01
SpAmRaY 11/01
equuelus 11/04
jdcarpe 11/16
phatdood9 12/03
nogah 12/04
gnubag 12/04
MarioRicalde 12/05
Matt3o 12/05
tjcaustin 12/07
equuelus 12/08
bpiphany 12/08
snoopy 12/08
Jrwestcoast 12/08
phatdood9 12/10
kennardsmith 12/12
TacticalCoder 12/12
BB__ 12/13
Resonance 12/14
argcargv 12/15
Katana 12/21
Hzza 01/04
avtar 01/12
atlas3686 01/12
mr.bean 01/12
MJ45 01/12
bazh 01/12
tuxsavvy 01/13
AKIMbO 01/14
rdev5 01/17
margo baggins 01/18
This is current waiting list, let me know via PM if you are listed or not listed wrongly.
I'll PM you from top of the list when controllers get to be available. After that you can decide whether you accept it or not. No risk of you being on the list, in other words.
Design of new revision PCB is currently stuck a bit and I'm working on other small project. And another project will be comming. So this will progress very slow for a while, you need big patience. Sorry for this.
Thanks for your interesting.Code: [Select]HolidaySHRIMP 09/10
ekw808 09/15
esoomenona 09/17
MarioRicalde 09/20
argcargv 10/30
Felis Catus 11/01
SpAmRaY 11/01
equuelus 11/04
jdcarpe 11/16
phatdood9 12/03
nogah 12/04
gnubag 12/04
MarioRicalde 12/05
Matt3o 12/05
tjcaustin 12/07
equuelus 12/08
bpiphany 12/08
snoopy 12/08
Jrwestcoast 12/08
phatdood9 12/10
kennardsmith 12/12
TacticalCoder 12/12
BB__ 12/13
Resonance 12/14
argcargv 12/15
Katana 12/21
Hzza 01/04
avtar 01/12
atlas3686 01/12
mr.bean 01/12
MJ45 01/12
bazh 01/12
tuxsavvy 01/13
AKIMbO 01/14
rdev5 01/17
margo baggins 01/18
This is current waiting list, let me know via PM if you are listed or not listed wrongly.
I'll PM you from top of the list when controllers get to be available. After that you can decide whether you accept it or not. No risk of you being on the list, in other words.
Design of new revision PCB is currently stuck a bit and I'm working on other small project. And another project will be comming. So this will progress very slow for a while, you need big patience. Sorry for this.
Thanks for your interesting.Code: [Select]Please add me to the list.
HolidaySHRIMP 09/10
ekw808 09/15
esoomenona 09/17
MarioRicalde 09/20
argcargv 10/30
Felis Catus 11/01
SpAmRaY 11/01
equuelus 11/04
jdcarpe 11/16
phatdood9 12/03
nogah 12/04
gnubag 12/04
MarioRicalde 12/05
Matt3o 12/05
tjcaustin 12/07
equuelus 12/08
bpiphany 12/08
snoopy 12/08
Jrwestcoast 12/08
phatdood9 12/10
kennardsmith 12/12
TacticalCoder 12/12
BB__ 12/13
Resonance 12/14
argcargv 12/15
Katana 12/21
Hzza 01/04
avtar 01/12
atlas3686 01/12
mr.bean 01/12
MJ45 01/12
bazh 01/12
tuxsavvy 01/13
AKIMbO 01/14
rdev5 01/17
margo baggins 01/18
Matt3o,
no it is not possible to tweak actuation point with this controller. You will need to change digital potentiometer value but HHKB doesn't has signal lines of digipot on its connector.
I'm not sure what is "resonance number" but I think the answer is also no probably.
USB part of Rev.B PCB works well now.Show Image(http://i.imgur.com/7p9aKFC.jpg)
KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,FN0, \
LALT,LGUI, SPC, RGUI,RALT),
make clean
make KEYMAP=hhkb
make teensy
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 1024
# Atmel DFU loader 4096 (TMK Alt Controller)
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
egdmitry,
I think not so hard if you are familiar with that chip. Alt Controller schematic is very simple and straight.
See this, you need only circuit on first page unless you want wireless option. Also 'Matrix Power Control' is not needed.
Note that HHKB works with 5V level I/O. If your chip don't have 5V tolerant port you'll need voltage translator.
http://geekhack.org/index.php?action=dlattach;topic=12047.0;attach=60715
Nice, I'd encourage 2) or 3), of course :D
3) will be cheapest and quickest way and in my case strong double sideded tape worked well to stay board on. You may need a receptacle for HHKB like this, I have some extra PM me if you want.
http://deskthority.net/workshop-f7/hardware-dvorak-hhkb-t3415.html#p66362
2) is also an option if you want cleaner and good looking controller. Now Rev.B design is available, but not be confirmed yet. You had better wait for the confirmation of the design. I got Rev.B PCB and components yesterday and can let you know whether the design is good or not in next couple days.
https://github.com/tmk/HHKB_controller/tree/preB
I use elecrow.com for manufacturering the PCB and it is one of Fusion PCB service providers. I can recommend them. Around $35US per 5 PCBs.
HHKB connector is available at Digikey. But problem of this route is shortage of ATMega32U4, it will not be available until May or June. You can still try Ebay sellers or Chinese market, though.
http://www.digikey.jp/product-detail/ja/S13B-ZR-SM4A-TF(LF)(SN)(P)/455-1703-1-ND/926830
I just found the BOM(Bill of Matrials) file. So the only problem is Bluetooth status. Hope there is good news! Can't wait for the new controller!
Smasher816, nice write up! Thanks.
Xe0n0, elecrow.com(or other fusion PCB serivces like seeedstudio will also work) don't need BOM file to manufacture PCB, just send gerber files; plot/HHKB_controller_fusion_B140314.zip.
And order components at digikey(or mouser?) according to BOM.txt.
Use Japanese products to help our sinking economy if possible :) like Panasonic or KOA for resistors, Murata or Taiyo Yuden for capacitor, Alps for switch and Hirose/JST for connector. They are reliable enough, I think.
EDIT: Bluetooth option of Rev.B is not confirmed at all yet, I have no time to do that.(And Rev.A has apparently a problem on power control.) If you want wireless connection you have to wait, but both Rev.A and Rev.B are confirmed for USB.
USB-mini connector 1 Hirose UX60SC-MB-5ST J1
Chip 1 ATMega32U4-AU TQFP 1
Xtal 1 HC49 16MHz SMT X1
Capacity 2 22p 1608 C5 C6
Capacity 6 0.1u 1608 C3 C7 C8 C9 C10 C13
Capacity 3 1u 1608 +-10% C4 C11 C18
Capacity 3 10u 3216 C1 C2 C14
Capacity 1 22u 3225 or 3528 or 3216 C12
Capacity 1 47u 3225 or 3528 or 3216 C15
Resistor 2 ?R ? R17 R18
Resistor 2 15k ? R9 R24
Resistor 10 10K 1608 R1 R6 R7 R8 R11 R12 R15 R16 R22 R23
Resistor 5 1K 1608 R4 R5 R10 R21 R25
Resistor 2 ? R470 R13 R14
Resistor 2 22 1608 R2 R3
Resistor 1 0 R19
PPTC500mA 1 TYCO nano PPTC1
FET-PMOS 2 Q4 Q5
FET-NMOS 3 SOT23 Q1 Q2 Q3
15pin connector 1 DF14A-15P-1.25H CN1
13pin connector 1 S13B-ZR-SM4A-TF CN2
LED 9 2012 D1 D3 D4 D5 D6 D7 D8 D9 D10
Diode Schottky 1 SOD123 D2
Bluetooth 1 RN42 U5
Lipo Charger 1 LTC4054 U4
Lipo connector 1 JST PH2 P100
3.3V Regulator 1 TAR5SB33 U2
Inductor? 1 L100u L1
SW-PUSH 1 Alps SKHH or SKHL SW1
SW-SLIDE 1 DPDT SW2
5V Boost converter 1 HT7750A U3
No so simple as most keyboards, HHKB(Topre version) has multiplexer, decoder and capacitive sensor in its PCB. These chips require 5V.
See this memo.
https://raw.github.com/tmk/tmk_keyboard/master/keyboard/hhkb/doc/HHKB.txt
All resistors are 1608 metric size. R19 should not be implemented, it is for factory reset of RN42 and will be short with tweezer when reset is needed.
As for L1 around 6mm inductors will fit, I use TOKO.
http://www.toko.co.jp/cgi-bin/database_en/database.cgi?cmd=dp&Tfile=Data&num=716
You can see full resolution photo at imgur: http://i.imgur.com/SaHVCL7.jpg?1
This board uses land patterns for hand soldering(a bit large than reflow one) you may want to check foot print of your component with datasheets and change them if you want manufacturer to reflow production.
EDIT: And note that reset switch should be "side push type" and short stem length, that is,
SKHHLMA010, SKHHLNA010 and SKHHLPA010 will fit. SKHLwill not fit for current PCB foot print.
http://www.alps.com/products/WebObjects/catalog.woa/E/HTML/Tact/SnapIn/SKHH/SKHH_list.html
egdmitry,
I think not so hard if you are familiar with that chip. Alt Controller schematic is very simple and straight.
See this, you need only circuit on first page unless you want wireless option. Also 'Matrix Power Control' is not needed.
Note that HHKB works with 5V level I/O. If your chip don't have 5V tolerant port you'll need voltage translator.
http://geekhack.org/index.php?action=dlattach;topic=12047.0;attach=60715
Hi hasu,
I've also ordered a teensy++ for test use. What type of wire did your use to connect teensy++ with the 13pin connector? I can not find the right wire on digitkey...not familiar with those electronic components
Thanks!
Hmm, output of KEY may not be held so long. If so you can't see the voltage change with voltmeter.
See this chart, it looks like LS145-D is a strobe rather than enable. I mean, KEY doesn't continue to output signal long even if you keep D line low.
And yes, test framework on PC host will be very useful. At this time I have to test code on real keyboard with sadly primitive method :) and I can't test all test cases to be performed. Especially common/action* codes can be tested on host effectively and we can write many test cases for actions. This is really helpful for refactoring and bug fix.
I wish i had the balls to open up my expensive HHKB like that!
Only concern is how Teensy++ can be installed in Pro2.
Teensy++ is perfectly fit for Pro1 but not for Pro2. See these photos. In Pro2 a standoff prevents Teensy from being installed.Show Image(http://i.imgur.com/YJv70ODl.jpg)Show Image(http://i.imgur.com/mExryaEl.jpg)
Sticky foam tape works wellfor mounting and doesn't leave much residue. Something like this http://www.radioshack.com/product/index.jsp?productId=2103341.
Maybe you can talk to PJRC and see if you can get your teensy switched out. It should go ok, especially if it was their fault.
Yep - actually they did send me the correct model.. I should have it today....pretty good customer service to fix up an error like that so fast!Sticky foam tape works wellfor mounting and doesn't leave much residue. Something like this http://www.radioshack.com/product/index.jsp?productId=2103341.
Maybe you can talk to PJRC and see if you can get your teensy switched out. It should go ok, especially if it was their fault.
Is any difference between teensy and arduino micro clone for usage in keyboard (or joystick)? Micro I can get for $5 with free shipping and teensy about 26 (16 + 10 shipping), 5 times higher.Yep - actually they did send me the correct model.. I should have it today....pretty good customer service to fix up an error like that so fast!Sticky foam tape works wellfor mounting and doesn't leave much residue. Something like this http://www.radioshack.com/product/index.jsp?productId=2103341.
Maybe you can talk to PJRC and see if you can get your teensy switched out. It should go ok, especially if it was their fault.
This is a bit OT here, but Paul and Robin at PJRC are good people. That's another reason I support using the Teensy myself, and I want to encourage everyone to use Teensys over those Pro Micro or other Arduino (clone) boards.
You will need to install crosspack. Then download the code from github, go to the correct keyboard/protocol folder and run make to compile everything, then use dfu-programmer to flash the generated hex to the microcontroller. It might be confusing so someone can help, or maybe they could just compile it for you.
See here: https://github.com/tmk/tmk_keyboard/blob/master/doc/build.md
HHKB JP is supported now!Show Image(http://i.imgur.com/fYc7XJol.jpg)
For someone who is interested in HHKB Bluetooth,This makes me want to get a hhkb.
You can access files under development here.
https://github.com/tmk/HHKB_controller/ [PCB]
https://github.com/tmk/tmk_keyboard/tree/rn42/keyboard/hhkb_rn42 [Firmware]Show Image(http://i.imgur.com/OXDsvKU.jpg)
For someone who is interested in HHKB Bluetooth,
You can access files under development here.
https://github.com/tmk/HHKB_controller/ [PCB]
https://github.com/tmk/tmk_keyboard/tree/rn42/keyboard/hhkb_rn42 [Firmware]Show Image(http://i.imgur.com/OXDsvKU.jpg)
Yes, I hope selftaught DIY people will be able to use my those files and give me feedbacks and suggestions.
The project is not finished and will be revised in next few months but I think it not much far from my goal, 80% maybe?
I'm doing rest of the works like fixing PCB design, power saving and LED indicators now. Hopefully I'll finish them in this year.
I wish i had the balls to open up my expensive HHKB like that!
Yes, I hope selftaught DIY people will be able to use my those files and give me feedbacks and suggestions.
The project is not finished and will be revised in next few months but I think it not much far from my goal, 80% maybe?
I'm doing rest of the works like fixing PCB design, power saving and LED indicators now. Hopefully I'll finish them in this year.
I wish i had the balls to open up my expensive HHKB like that!
just simply opening and closing hhkb pro 2
is really straightforward
I wish i had the balls to open up my expensive HHKB like that!
just simply opening and closing hhkb pro 2
is really straightforward
Nice video.
Yes, the case is no problem, I needed more balls when pull out its connector and lines. You will be scared of damaging them unless you know correct method.
Read these instruction. And you better unscrew PCB before remove the connector.
http://www.hirose.co.jp/cataloge_hp/en_DF14_20130411.pdf
http://www.jst-mfg.com/product/pdf/eng/handling_e.pdf
For someone who is interested in HHKB Bluetooth,
You can access files under development here.
https://github.com/tmk/HHKB_controller/ [PCB]
https://github.com/tmk/tmk_keyboard/tree/rn42/keyboard/hhkb_rn42 [Firmware]Show Image(http://i.imgur.com/OXDsvKU.jpg)
Hasu (or anyone else),
How can I MACRO( T(N), ...) each (int) element in digits array in reverse order?
See https://gist.github.com/anonymous/cb0bc4419f83d66ae890
int digits[] = {1, 2, 3, 4}; // Or random number regnerator
MACRO( I(0) );
for (int i = 0; i < sizeof(digits); i++) {
MACRO( T( digits[i] ) );
}
MACRO( END );
char seq[] = {'a', 'b', 'c', '1', '2', '3'}; // Or random number regnerator
MACRO( I(0) );
for (int i = 0; i < sizeof(seq); i++) {
MACRO( T( seq[i] ) );
}
MACRO( END );
Not sure what you want to do with this. Can you describe more?
What does that C code and what is contents of digits[] array in the end?Hasu (or anyone else),
How can I MACRO( T(N), ...) each (int) element in digits array in reverse order?
See https://gist.github.com/anonymous/cb0bc4419f83d66ae890
Hi hasu,
Ultimately what I'd like to do is be able to programatically send keys using a MACRO based on a string of characters I provide, vs. hard coding it statically.
In the case of the gist I linked to, the use case would be to 1) generate a random number and then 2) send each digit in that string or array of digits.
So if my number was 1234, currently I would have to statically bind an Fn key as: MACRO( I(0), T(1), T(2), T(3), T(4), END )
Creating load file for Flash: hhkb_lufa.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature hhkb_lufa.elf hhkb_lufa.hex
dfu-programmer atmega32u4 erase
Checking memory from 0x0 to 0x6FFF... Empty.
Chip already blank, to force erase use --force.
dfu-programmer atmega32u4 flash hhkb_lufa.hex
Checking memory from 0x0 to 0x6CFF... Empty.
0% 100% Programming 0x6D00 bytes...
[ X ERROR
Memory write error, use debug for more info.
make: *** [dfu] Error 1
dfu-programmer atmega32u4 flash hhkb_lufa.hex
and it came back. Now to find a way to compress my code:void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case MY_FUNC:
if (!record->event.pressed && record->tap.count > 0 && !(record->tap.interrupted)) {
int seed_size = 1000000;
int seed_array[seed_size];
// Seed rand from memory+time and generate random number
int seed = 0; for (int i = 0 ; i < seed_size; i++) seed ^= abs(seed_array[i]);
seed = abs(seed);
srand(seed);
int number = rand();
// Print
// printf("Seed: %d\n", seed);
// printf("Number: %d\n", number);
// Count digits
int c = 0, n = number;
while (n != 0) {n /= 10; c++; }
// Extract each digit
int numberArray[c]; c = 0; n = number;
while (n != 0) {numberArray[c] = n % 10; n /= 10; c++; }
// Print
// printf("Verify: ");
for (int i = c - 1 ; i >= 0; i--) {
// // printf("%d", numberArray[i]);
uint8_t k;
switch(numberArray[i]) {
case 0: k = 0x27; break;
case 1: k = 0x18; break;
case 2: k = 0x19; break;
case 3: k = 0x20; break;
case 4: k = 0x21; break;
case 5: k = 0x22; break;
case 6: k = 0x23; break;
case 7: k = 0x24; break;
case 8: k = 0x25; break;
case 9: k = 0x26; break;
}
register_code(k);
unregister_code(k);
// printf("%d(%x) ", numberArray[i], k);
}
send_keyboard_report();
record->tap.count = 0; // ad hoc: cancel tap
}
break;
}
}
if (!record->event.pressed) {
send_keyboard_report();
record->tap.count = 0; // ad hoc: cancel tap
int seed_size = 1000000;
int seed_array[seed_size];
uint8_t asc2key(uint8_t l)
{
switch (l) {
case 'A': return KC_A;
case 'B': return KC_B;
case 'C': return KC_C;
case 'D': return KC_D;
case 'E': return KC_E;
case 'F': return KC_F;
case 'G': return KC_G;
case 'H': return KC_H;
case 'I': return KC_I;
case 'J': return KC_J;
case 'K': return KC_K;
case 'L': return KC_L;
case 'M': return KC_M;
case 'N': return KC_N;
case 'O': return KC_O;
case 'P': return KC_P;
case 'Q': return KC_Q;
case 'R': return KC_R;
case 'S': return KC_S;
case 'T': return KC_T;
case 'U': return KC_U;
case 'V': return KC_V;
case 'W': return KC_W;
case 'X': return KC_X;
case 'Y': return KC_Y;
case 'Z': return KC_Z;
case '1': return KC_1;
case '2': return KC_2;
case '3': return KC_3;
case '4': return KC_4;
case '5': return KC_5;
case '6': return KC_6;
case '7': return KC_7;
case '8': return KC_8;
case '9': return KC_9;
case '0': return KC_0;
case '\n': return KC_ENTER;
case 0x1B: return KC_ESCAPE;
case '\b': return KC_BSPACE;
case '\t': return KC_TAB;
case ' ': return KC_SPACE;
case '-': return KC_MINUS;
case '=': return KC_EQUAL;
case '[': return KC_LBRACKET;
case ']': return KC_RBRACKET;
case '\\': return KC_BSLASH;
case ';': return KC_SCOLON;
case '\'': return KC_QUOTE;
case '`': return KC_GRAVE;
case ',': return KC_COMMA;
case '.': return KC_DOT;
case '/': return KC_SLASH;
default: return KC_NO;
}
}
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case ENTROPY:
if (!record->event.pressed && record->tap.count > 0 && !(record->tap.interrupted)) {
// Select chars in entropy[] seed starting at pos(i)
char MAP_HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
uint8_t MAP_CODE[] = { 0x27, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
char entropy[] = {
'6','5','D','A','1','9','9','8','6','B','E','7','1','0','7','A','6','1','D','4','B','D','4','3','6','B','D','1','5','9','5','C','A','3','4','C','0','7','9','3','7','F','9','F','D','D','A','4','1','0','1','3','1','F','9','C','9','0','4','6','F','1','D','0','2','5','7','C','4','2','1','C','A','B','3','1','F','F','1','8','5','0','D','1','5','B','E','8','7','5','2','3','E','7','A','2','B','2','9','3','6','5','A','E','B','E','A','3','6','B','9','7','B','C','9','4','A','A','8','0','5','8','3','D','2','E','E','F',
'7','F','9','7','3','2','0','D','9','5','B','F','5','D','0','1','7','D','6','D','B','A','1','4','5','E','2','F','C','0','9','7','A','6','E','1','F','9','1','4','A','2','3','C','8','6','5','0','4','D','2','8','1','5','1','F','F','9','8','C','1','5','2','B','7','6','B','C','B','3','C','B','B','C','A','C','B','9','A','1','D','5','0','F','5','F','E','0','A','9','1','5','5','0','2','8','9','4','F','6','7','C','8','4','2','8','C','4','E','8','6','7','3','1','3','5','2','4','0','6','C','7','5','9','1','B','8','9',
'2','1','0','6','3','7','F','6','F','2','1','C','4','3','3','6','E','6','1','0','A','E','6','7','5','A','E','E','C','D','2','3','1','D','1','6','5','D','B','7','1','6','3','3','3','9','7','A','B','5','6','C','2','1','E','1','C','F','6','B','5','C','2','D','B','8','2','0','2','E','F','E','B','1','8','5','0','7','C','D','E','0','9','D','E','4','4','C','0','A','0','D','6','1','8','1','2','4','1','2','6','7','B','F','F','5','C','D','F','E','1','6','8','F','A','6','0','6','2','7','E','2','4','C','B','2','6','7',
};
int max = sizeof(entropy) / sizeof(entropy[0]);
for (int i = 0; i < 64 * 2; i += 2) {
/** Begin loop code on i**/
// Sanitize range
i = (i <= 0) ? 0 : i;
i = (i >= max) ? max - 1 : i;
// Get char at pos(i)
int pos = (i % 2) ? i - 1 : i;
char c1 = entropy[pos];
char c2 = entropy[pos + 1];
// printf("%d: char(%c, %c) -> send(0x%x, 0x%x)\n", i, c1, c2, k1, k2);
register_code(asc2key(c1)); unregister_code(asc2key(c1));
register_code(asc2key(c2)); unregister_code(asc2key(c2));
/** End loop code on i**/
}
send_keyboard_report();
record->tap.count = 0; // ad hoc: cancel tap
}
break;
}
}
Read these instruction. And you better unscrew PCB before remove the connector.https://geekhack.org/index.php?topic=12047.msg1499922#msg1499922
http://www.hirose.co.jp/cataloge_hp/en_DF14_20130411.pdf
http://www.jst-mfg.com/product/pdf/eng/handling_e.pdf
You will need to install crosspack. Then download the code from github, go to the correct keyboard/protocol folder and run make to compile everything, then use dfu-programmer to flash the generated hex to the microcontroller. It might be confusing so someone can help, or maybe they could just compile it for you.
See here: https://github.com/tmk/tmk_keyboard/blob/master/doc/build.md
Thanks! Got it figured out.
For people having trouble installing dfu-programmer (I was on a new mac and missing some needed library files), use this link http://www.uriahbaalke.com/?p=106
One important thing that took me a few minutes to figure out was: when you are ready to build to the TMK alt controller with dfu. do this:
make KEYMAP=[keymap_name] dfu
DO NOT do this:
make KEYMAP=[keymap_name]
make dfu
this second make dfu overwrites the previous keymap you made with the default hhkb one. I was just dumb : P, I think I misunderstood the readme on git hub.
how long does the battery last?
thanks for the report. I honestly hoped way more than that
thanks for the report. I honestly hoped way more than that
just see is using the 2000mah ? yes one day is not so much, but hasu is still fixing some leakage from what i know.
Is also not using idle mode.
[7] = ACTION_MODS_ONESHOT(MOD_RSFT)
Oneshot modifier keeps its effect for ONESHOT_TIMEOUT ms after press the key.Oh, that reply title was eaten...
https://github.com/tmk/tmk_keyboard/blob/master/doc/keymap.md#43-oneshot-modifier
What is your timeout?
If it is 300 You have to press following 'a' key within 300ms to get 'A'. Press and release 'Shift', then press 'a' quickly, you will get 'A'.
how would one go about disabling one_shot all together? I type way too fast for the stock timeout on my left shift.
how would one go about disabling one_shot all together? I type way too fast for the stock timeout on my left shift.
AFAIK, you can remove the corresponding function key registration in the default layer (Layer 0). Check this line in my keymap file: https://github.com/x1a0/tmk_keyboard/blob/master/keyboard/hhkb/keymap_x1a0.c#L29
Notice the very left "LSFT" in that line, it was "FN7" there before - means that key was registered as a function key (the one-shot modifier). Now I have changed it to a normal key (LSFT), and moved the one-shot modifier to my right shift key (the "FN5" on the right side of this line).
Hope this can help you!
It is close but slighty open :) You can still order here.PM'd you hasu. :D
https://geekhack.org/index.php?topic=56494.0
It is close but slighty open :) You can still order here.PM'd you hasu. :D
https://geekhack.org/index.php?topic=56494.0
edit: if I get the latest revision of your controller board, can I solder my own Bluetooth module to it? THanks!
It is close but slighty open :) You can still order here.PM'd you hasu. :D
https://geekhack.org/index.php?topic=56494.0
edit: if I get the latest revision of your controller board, can I solder my own Bluetooth module to it? THanks!
It would be best to use the same chip as he is using. Theoretically you could use another one that had the same size and pin count, but you would have to also change the code to work with it.
hasu's controller board and the Teensy++ 2.0 (and even Teensy 2.0) share a common controller, the ATmega32U4. As long as the matrix gets to the pins on the controller IC, the firmware doesn't care which you are using!
I thought I'd share some HHKB stuff I've made since august:This looks great!
I made and ordered a switch cap 3d-model and attached to plastic covers:
https://imgur.com/a/kdox9
http://www.shapeways.com/model/2602069/hhkb-bt-switch-cap-v2.html
The covers aren't hard to make, but a little time consuming to get right:
- Find a piece of plastic with a color and finish that matches the case (I used a d-link dir-100 router cover)
- Cut roughly to the right size (slightly larger).
- Drill 3mm holes for the light-pipes in one of them and cut a groove for the switch cap in the other.
- Sand on a flat surface to the right size/thickness, make them the same height as the outer case edge so the topre PCB supports them from the inside with the case closed.
The cap has a tiny lip on the bottom, insert with the PCB unscrewed
Completed covers: https://i.imgur.com/MS4pfR2.jpg
For USB only you could just glue a single piece of plastic to the PCB, or solder something to holes close to the edge for support.
I also added wireless qi charging with automatic power source switching: https://imgur.com/a/9yds3
I haven't used it much yet, I'm waiting for the release of the longer range qi v1.2 resontant transmitters to place one under my tabletop: http://www.wirelesspowerconsortium.com/blog/86/major-milestones-for-v12-resonant-specification
I still haven't fixed the reset issue and won't be able to until february, otherwise it works fine and a completely wireless keyboard is nice :)
The battery I used is AFAIK the largest one that'll fit without case modifications: 3.7v 2000mah 804550 (you'd need to add longer cables and connectors)
http://www.aliexpress.com/item/804550-854550-084550-3-7vmp5-battery-flat-gps-mobile-power-remote-control/978812465.html
They shipped me a pair of slightly smaller lower capacity (1800mah) batteries the second time, so you might want to confirm the exact dimensions and capacity in case you want to order a pair.
are these available still?
are these available still?
If you pm hasu, he will add you to a list of people who are waiting :)
ok. got the controller and finally had time to play with it.
everything seems to be working but something strange happens. Every time I connect the keyboard the PC fans start spinning a full throttle, then they stop soon after, but they start spinning again every 10 minutes or so. Rebooting doesn't help, I have to turn the PC off and on again.
It happens only after I connect the keyboard.
Any idea?!
Hi everyone
I own two HHKB pro (white & black) for about 10 years now and am still happy with them. Unfortunately I couldn't use them as well as I wanted because of the different hardware I work on and languages I have to write.
So a two weeks ago I decided to clean and mod both HHKB's. For the first one I even added a USB-Hub (like the pro 2 has). The second one will be without it.
This text is now written with my first modified HHKB with a Teensy++ and an LED-Bar. I even got the shift-lock LED running without any troubles.
Thanks Hasu, for your great work. :thumb:Show Image(https://dl.dropboxusercontent.com/u/9875813/HHK/IMG_0180.JPG)
Here a glimpse inside. I know I can't press the reset button though the switch opening, because I had to turn the teensy because the usb cable for it was to thick. But even turning it around didn't help much. Anyway with the magic key combination a reset is always possible.Show Image(https://dl.dropboxusercontent.com/u/9875813/HHK/IMG_0176.JPG)
Updated firmware used in Keymap Editor to the latest version and added Keymap Editor for TMK Bluetooth controller.
Try it and give feedback.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb_bt/Show Image(http://i.imgur.com/EMUwuYzh.png?1)
Updated firmware used in Keymap Editor to the latest version and added Keymap Editor for TMK Bluetooth controller.
Try it and give feedback.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb_bt/Show Image(http://i.imgur.com/EMUwuYzh.png?1)
Updated firmware used in Keymap Editor to the latest version and added Keymap Editor for TMK Bluetooth controller.
Try it and give feedback.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb_bt/Show Image(http://i.imgur.com/EMUwuYzh.png?1)
Awesome Hasu! Just got my BT controller today so I'll play around with this. But I won't be able to test the BT capabilities of it for another week since I can't find a place that has them in stock.
EDIT: I really recommend following this guide (http://) after downloading the hex file from the keymap editor that hasu made. Just have to remember that when choosing the device you have to look for "ATmega32U4"
HAUS alt controller Step by Step linux (opensuse) for HHKB pro 2
1. Download DFU-programmer.
https://dfu-programmer.github.io/
2. Extract it into a directory. I picked with
# tar -xzf dfu-programmer-<version>.tar.gz
# /home/thomas/bin/
3. Install needed extra software. I had to install libusb-1_0-0 and lisbusb-devel. I did this using software management
in yast.
4. cd into dfu-programmer folder.
# cd dfu-programmer
#sudo./configure
#sudomake
# sudo make install
4. Move back to /home/thomas/bin directory (your equvilant of)
# mv /home/thomas/bin
5. Git clone the software. Make sure git is installed.
#sudogit clone https://github.com/tmk/tmk_keyboard
6. Make you custom layout using keymap editor.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/index.html
and download the hex file
7. ......
On AVR, the configure option --with-avrlibc supported since GCC 4.7.2 is turned on per default for all non-RTEMS configurations. This option arranges for a better integration of AVR Libc with avr-gcc. For technical details, see PR54461. To turn off the option in non-RTEMS configurations, use --with-avrlibc=no. If the compiler is configured for RTEMS, the option is always turned off.https://gcc.gnu.org/gcc-4.8/changes.html
I didn't know this.QuoteOn AVR, the configure option --with-avrlibc supported since GCC 4.7.2 is turned on per default for all non-RTEMS configurations. This option arranges for a better integration of AVR Libc with avr-gcc. For technical details, see PR54461. To turn off the option in non-RTEMS configurations, use --with-avrlibc=no. If the compiler is configured for RTEMS, the option is always turned off.https://gcc.gnu.org/gcc-4.8/changes.html
I think avr libc may conflict with newer avr gcc, remove your avr libc.
Updated firmware used in Keymap Editor to the latest version and added Keymap Editor for TMK Bluetooth controller.
Try it and give feedback.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb_bt/Show Image(http://i.imgur.com/EMUwuYzh.png?1)
Arch Linux. Newest packages.
cmake 3.2.1-1
make 4.1-1
avr-binutils 2.25-2
avr-gcc 4.9.2-2
avr-libc 1.8.1-2
arm-none-eabi-binutils 2.25-2
arm-none-eabi-gcc 4.9.2-5
arm-none-eabi-newlib 2.2.0-2
teensy_loader_cli 2.1-1
dfu-util 0.8-1
I haven't built tmk recently but stuff like the infinity project work fine. I'v never had any issues.
I finally programmed mine, there are so many layers!
I accidentally trapped myself in an empty layer for a bit.I finally programmed mine, there are so many layers!
Spent most of my evening doing the same though still using the editor and not the .c and .h files yet. I didn't bother putting the caps lock on as have so little use for it.
Did you find that if you forgot to put the key as transparent for that above the the used function key you get stuck on that layer as I did :rolleyes:
I accidentally trapped myself in an empty layer for a bit.I finally programmed mine, there are so many layers!
Spent most of my evening doing the same though still using the editor and not the .c and .h files yet. I didn't bother putting the caps lock on as have so little use for it.
Did you find that if you forgot to put the key as transparent for that above the the used function key you get stuck on that layer as I did :rolleyes:
I accidentally trapped myself in an empty layer for a bit.I finally programmed mine, there are so many layers!
Spent most of my evening doing the same though still using the editor and not the .c and .h files yet. I didn't bother putting the caps lock on as have so little use for it.
Did you find that if you forgot to put the key as transparent for that above the the used function key you get stuck on that layer as I did :rolleyes:
On my ducky zero I got a key that causes a right click action on the word my cursor is over, its really useful for a poor speller like myself. Any ideas on how to get it on the alt controller?
Try disabling NKRO by pressing both shift and n key. Not sure if NKRO works on Mac OSX after recent updates.I am using Mac OSX (10.10.3 Yosemite) without any issues with NKRO active. Caps Lock works as well but I rarely use it.
Someone is also having weird problem on Mac with TMK firmware.
Here is the .stl file:
https://www.dropbox.com/s/v6vtinzjoh5y06u/HHKBusbcover.stl?dl=0 (https://www.dropbox.com/s/v6vtinzjoh5y06u/HHKBusbcover.stl?dl=0)
joric,
RN-42 is very easy to make a keyboard without hassle and deep knowledge of Bluetooth while it doesn'tt offer much methods to controll power. See datasheet, you can find some options related to power control and try them. Of course I already tried them all and I couldn't find useful options to improve battery life much.
Other modules may have better power control but I didn't find a module with easy solution for keyboard like RN-42. With using HCI you will be able to control a module power consumption better but you need more hassle and knowledge.
Just thought I'd post here that my friend and I designed and 3d printed dust covers for the usb ports on the hhkb with Hasu controller. Here is a picture of it:Could this be put on shapeways? I would be interested in having a set of these but I don't have access to a 3d printer.Show Image(http://i.imgur.com/vt2KFoL.jpg)
I'll get the .stl file from my buddy and upload for anyone that wants it. Some minimal sanding is required around the corners and edges etc. Unfortunately, I cannot make these for anyone as my school has the machine, and I will be graduating in a week.
Weird.
Your controller hardware seems like fine.
Try attached hex file and report back.
(Attachment Link)
I can reproduce the problem now. Your default firmware got the same problem as my customized build one.How did you switch to USB mode? To make it USB mode there are two methods.
If you switch to usb mode, and plug in the usb cable, and keyboard would not response.
But if you detach the usb cable and switch to BT mode, a few seconds later(not fast as pro2, which just instantly), keyboard would be recognized and then you plug the usb cable, and switch it to usb mode, it would continue working under usb mode.If BT is already conected and BT LED lights solidly(not blinking) switching between USB and BT mode should be done instantly. Something wrong :(
method 1I can reproduce the problem now. Your default firmware got the same problem as my customized build one.How did you switch to USB mode? To make it USB mode there are two methods.
If you switch to usb mode, and plug in the usb cable, and keyboard would not response.
1) Turns BT slide SW off and plug into USB port.
2) Turns BT slide SW on and plug into USB port and press magic key combo(LShift+RShift+u).
Note that just pluging in USB cable while it is on BT mode means it is still on BT mode with charging battery.
seems instantly from BT to USB...QuoteBut if you detach the usb cable and switch to BT mode, a few seconds later(not fast as pro2, which just instantly), keyboard would be recognized and then you plug the usb cable, and switch it to usb mode, it would continue working under usb mode.If BT is already conected and BT LED lights solidly(not blinking) switching between USB and BT mode should be done instantly. Something wrong :(
what's your host system? OSX and USB3?
Try it with other OS/system?
I don't have BT controller for JP to test at this time, I'll assemble and test it some later.
(However, I don't have Mac/OSX and USB3 at hand. I have only Linux and Windows7 system.)
make -f Makefile.rn42 KEYMAP=jp
diff --git a/keyboard/hhkb/config_rn42.h b/keyboard/hhkb/config_rn42.h
index 21e73f1..ef63ad5 100644
--- a/keyboard/hhkb/config_rn42.h
+++ b/keyboard/hhkb/config_rn42.h
@@ -51,7 +51,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BOOTMAGIC_KEY_SALT KC_FN6
/* power control of key switch board */
-#define HHKB_POWER_SAVING
+//#define HHKB_POWER_SAVING
/*
* Hardware Serial(UART)
Try attached firmware which is applied with the work around. This is not final fix but it should work.
If it doesn't work with your board it probably has hardware problem.
Fixed.with the firmware build from git, the usb mode works, but the BT mode do not properly recognized the matrix.
https://github.com/tmk/tmk_keyboard/commit/35203cad6ad4294409bd39dd85ff7858b353570d
https://github.com/tmk/tmk_keyboard/issues/234
Fixed.with the firmware build from git, the usb mode works, but the BT mode do not properly recognized the matrix.
https://github.com/tmk/tmk_keyboard/commit/35203cad6ad4294409bd39dd85ff7858b353570d
https://github.com/tmk/tmk_keyboard/issues/234
Great. Enjoy!:D
so, it looks like i'll be getting my HHKB in about 2 months :D
though.. i've actually never coded before :-[
so i looked around a bit, and found this tutorial by matt3o: http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html
but will i need (to know) anything else to be able to install and flash hasu's controller?
just want to make sure i won't run into any "am i missing something?"-moments :-X
sorry for the noobness :(
make -f Makefile.jp clean
make -f Makefile.jp
make -f Makefile.jp dfu
KEYMAP=rsadek make -f Makefile.jp clean
KEYMAP=rsadek make -f Makefile.jp
KEYMAP=rsadek make -f Makefile.jp dfu
rsadek,Oddly this wasn't the problem. I had the correct makefile and layout. git pull --rebase and rebuild seems to have set everything straight. Now I see the correct behavior and will set to work on tuning my layout :)
It seems to me like you are using Pro2 firmware on your JP controller. I assume your controller is USB JP controller so you have to use the following commands to build and flash JP firmware.Code: [Select]make -f Makefile.jp clean
make -f Makefile.jp
make -f Makefile.jp dfu
To change keymap you can edit keymap_jp.c directly, or make your own keymap file like keymap_rsadek.c and use these commands.Code: [Select]KEYMAP=rsadek make -f Makefile.jp clean
KEYMAP=rsadek make -f Makefile.jp
KEYMAP=rsadek make -f Makefile.jp dfu
Is it possible to program the 4 bottom keys on the HHKB pro 2 to arrow keys on a mac interface?
This looks like a fantastic project, and I'll probably be jumping in on this.
Has any thought been put into using wireless charging (a-la Qi charging stations: https://en.wikipedia.org/wiki/Qi_(inductive_power_standard (https://en.wikipedia.org/wiki/Qi_(inductive_power_standard)) for the bluetooth controller )?
I can't speak to whether or not there is room for that inside the HHKB case.
This is Qi charging mod.
https://geekhack.org/index.php?topic=12047.msg1558708#msg1558708
This is Qi charging mod.
https://geekhack.org/index.php?topic=12047.msg1558708#msg1558708
This is seriously cool!
I can't seem to get my controller into RN-42 Config mode.
I'm using https://www.pjrc.com/teensy/hid_listen.html
I flashed the keyboard back to HHKB keymap
I run hid_listen, I connect the keyboard, it says "Listening:"
I turn on BT
According to RN42.txt, pressing LShift+RShift+Fn+O should do the initial config and I should see printing to console, but i don't see anything.
Another issue, mouse 4 and 5 don't work in BT mode for me, but they work fine USB mode.
EDIT: This is on MacOS
Magic key combination is 'LShift+RShift' by default in case of HHKB.
Here is help.
----- Bluetooth RN-42 Help -----
i: RN-42 info
b: battery voltage
Del: enter/exit RN-42 config mode
Slck: RN-42 initialize
p: pairing
u: toggle Force USB mode
RN-42 info: displays information of the module on console.
battery voltage: displays current voltage of battery and uptime.
RN-42 initialize: does factory reset and configures RN-42
pairing: enters Pairing mode.
toggle Force USB mode: switch between USB and Bluetooth
Jiexi-MAC:Downloads Jiexi$ ./hid_listen.mac
Waiting for device:
Listening:
- Version -
DESC: t.m.k. keyboard firmware for HHKB mod
VID: 0xFEED(t.m.k.) PID: 0x4242(HHKB mod) VER: 0x0104
BUILD: a88a368 (01:14:55 Dec 18 2015)
OPTIONS: LUFA BOOTMAGIC MOUSEKEY EXTRAKEY CONSOLE COMMAND NKRO 4096
GCC: 4.9.3 AVR-LIBC: 1.8.1 AVR_ARCH: avr5
Entering config mode ...
CMD
Ver 6.15 04/26/2013
(c) Roving Networks
ECHO ON
SF,1
AOK
S-,HHKB
AOK
SS,Keyboard/Mouse
AOK
SM,6
AOK
SW,8000
AOK
S~,4
AOK
SH,003C
AOK
SY,FFF4
AOK
R,1
Reboot!
Exiting config mode ...
BUILD: a88a368 (01:14:55 Dec 18 2015)
Just stays on "Startup/configuration timer 2 times per sec", never enters "Discoverable/Inquiring/Idle once per sec"
I changed the key combo to KC_RALT, KC_RGUI and it's okay now. I also flashed BT firmware (not sure why it was USB before)
After I run Initial Configuration, I cannot pair to it anymore. Even if i put it into pair mode, it doesn't work.
Just stays on "Startup/configuration timer 2 times per sec", never enters "Discoverable/Inquiring/Idle once per sec"
I tried to send Q,0 and was able to see device, but it doesn't connect. Continues to blink 2 times per sec.
Android can see it, but pairing fails.Code: [Select]Jiexi-MAC:Downloads Jiexi$ ./hid_listen.mac
Waiting for device:
Listening:
- Version -
DESC: t.m.k. keyboard firmware for HHKB mod
VID: 0xFEED(t.m.k.) PID: 0x4242(HHKB mod) VER: 0x0104
BUILD: a88a368 (01:14:55 Dec 18 2015)
OPTIONS: LUFA BOOTMAGIC MOUSEKEY EXTRAKEY CONSOLE COMMAND NKRO 4096
GCC: 4.9.3 AVR-LIBC: 1.8.1 AVR_ARCH: avr5
Entering config mode ...
CMD
Ver 6.15 04/26/2013
(c) Roving Networks
ECHO ON
SF,1
AOK
S-,HHKB
AOK
SS,Keyboard/Mouse
AOK
SM,6
AOK
SW,8000
AOK
S~,4
AOK
SH,003C
AOK
SY,FFF4
AOK
R,1
Reboot!
Exiting config mode ...
Dumb me... "S~, 4"
I meant to change "SM, 4"...
That makes sense why I could pair, but it would fail, or i couldn't type.
All fixed now... :-\
Updated firmwre of keymap editor for both USB and BT. You can download the latest firmware from keymap editor now.
Updated firmwre of keymap editor for both USB and BT. You can download the latest firmware from keymap editor now.
thank you hasu!
one small thing: i noticed that Web Back and Web Forward do not seem to be doing anything for me..?
(i'm using Win7 64bit + Chrome.)
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPC)
ABc
AB
ABC
Ac
[2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
[3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
[4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space
make -f Makefile.jp KEYMAP=jp dfu
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash hhkb_lufa.hex
Validating...
22148 bytes used (77.25%)
dfu-programmer atmega32u4 reset
I found you forgot to add '-f' in that log.
i just noticed that AquaKeyTest shows 6KRO, not NKRO like i thought it should be?
am i missing something? :) i used the keymap editor to create the hex file for me. (USB, not BT.)
USB firmware of keymap editor should work. See this FAQ entry.
https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
Updated firmware used in Keymap Editor to the latest version and added Keymap Editor for TMK Bluetooth controller.
Try it and give feedback.
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb/
http://www.tmk-kbd.com/tmk_keyboard/editor/hhkb_bt/Show Image(http://i.imgur.com/EMUwuYzh.png?1)
Hi,
I still have a plan for JP but I'm tired of maintain various keymap editors and it is pending for now. I have an idea of universal keymap editor for any TMK firmware, instead of making a editor for each keyboard.
I mean, editor for JP won't be availabe for a while at least, sorry.
not sure if this is only me but there's multiple inputs, or chatter when you're using BT firmware on USB.
The issue is fixed now though.not sure if this is only me but there's multiple inputs, or chatter when you're using BT firmware on USB.
Smells like hardware failure like break wire or bad solder. You will see random or wrong input when it has break wire or half-mated connector.
make -f Makefile.jp clean
make -f Makefile.jp dfu
make -f Makefile.jp dfu
mkdir -p obj_hhkb_lufa
Compiling C: keymap_jp.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/keymap_jp.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_keymap_jp.o.d keymap_jp.c -o obj_hhkb_lufa/keymap_jp.o
mkdir -p obj_hhkb_lufa
Compiling C: keymap_common.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/keymap_common.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_keymap_common.o.d keymap_common.c -o obj_hhkb_lufa/keymap_common.o
mkdir -p obj_hhkb_lufa
Compiling C: matrix.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/matrix.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_matrix.o.d matrix.c -o obj_hhkb_lufa/matrix.o
mkdir -p obj_hhkb_lufa
Compiling C: led.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/led.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_led.o.d led.c -o obj_hhkb_lufa/led.o
mkdir -p obj_hhkb_lufa/protocol/lufa
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_hhkb_lufa/protocol/lufa/lufa.o
mkdir -p obj_hhkb_lufa/protocol/lufa
Compiling C: ../../tmk_core/protocol/lufa/descriptor.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/descriptor.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_descriptor.o.d ../../tmk_core/protocol/lufa/descriptor.c -o obj_hhkb_lufa/protocol/lufa/descriptor.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common/HIDParser.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common/HIDParser.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Class_Common_HIDParser.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common/HIDParser.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common/HIDParser.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_Device_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_EndpointStream_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_Endpoint_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_Host_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_PipeStream_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_Pipe_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_USBController_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_AVR8_USBInterrupt_AVR8.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/ConfigDescriptors.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/ConfigDescriptors.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_ConfigDescriptors.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/ConfigDescriptors.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/ConfigDescriptors.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/DeviceStandardReq.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/DeviceStandardReq.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_DeviceStandardReq.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/DeviceStandardReq.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/DeviceStandardReq.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/Events.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/Events.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_Events.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/Events.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/Events.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/HostStandardReq.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/HostStandardReq.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_HostStandardReq.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/HostStandardReq.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/HostStandardReq.o
mkdir -p obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core
Compiling C: ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/USBTask.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/USBTask.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_protocol_lufa_LUFA-git_LUFA_Drivers_USB_Core_USBTask.o.d ../../tmk_core/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/USBTask.c -o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/USBTask.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/host.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/host.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_host.o.d ../../tmk_core/common/host.c -o obj_hhkb_lufa/common/host.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/keyboard.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/keyboard.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_keyboard.o.d ../../tmk_core/common/keyboard.c -o obj_hhkb_lufa/common/keyboard.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/action.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/action.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_action.o.d ../../tmk_core/common/action.c -o obj_hhkb_lufa/common/action.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/action_tapping.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/action_tapping.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_action_tapping.o.d ../../tmk_core/common/action_tapping.c -o obj_hhkb_lufa/common/action_tapping.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/action_macro.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/action_macro.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_action_macro.o.d ../../tmk_core/common/action_macro.c -o obj_hhkb_lufa/common/action_macro.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/action_layer.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/action_layer.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_action_layer.o.d ../../tmk_core/common/action_layer.c -o obj_hhkb_lufa/common/action_layer.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/action_util.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/action_util.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_action_util.o.d ../../tmk_core/common/action_util.c -o obj_hhkb_lufa/common/action_util.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/print.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/print.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_print.o.d ../../tmk_core/common/print.c -o obj_hhkb_lufa/common/print.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/debug.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/debug.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_debug.o.d ../../tmk_core/common/debug.c -o obj_hhkb_lufa/common/debug.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/util.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/util.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_util.o.d ../../tmk_core/common/util.c -o obj_hhkb_lufa/common/util.o
mkdir -p obj_hhkb_lufa/common/avr
Compiling C: ../../tmk_core/common/avr/suspend.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/avr/suspend.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_avr_suspend.o.d ../../tmk_core/common/avr/suspend.c -o obj_hhkb_lufa/common/avr/suspend.o
mkdir -p obj_hhkb_lufa/common/avr
Assembling: ../../tmk_core/common/avr/xprintf.S
avr-gcc -c -mmcu=atmega32u4 -x assembler-with-cpp -DF_CPU=16000000 -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Wa,-adhlns=obj_hhkb_lufa/common/avr/xprintf.lst,-gstabs,--listing-cont-lines=100 -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -include config.h ../../tmk_core/common/avr/xprintf.S -o obj_hhkb_lufa/common/avr/xprintf.o
mkdir -p obj_hhkb_lufa/common/avr
Compiling C: ../../tmk_core/common/avr/timer.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/avr/timer.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_avr_timer.o.d ../../tmk_core/common/avr/timer.c -o obj_hhkb_lufa/common/avr/timer.o
mkdir -p obj_hhkb_lufa/common/avr
Compiling C: ../../tmk_core/common/avr/bootloader.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/avr/bootloader.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_avr_bootloader.o.d ../../tmk_core/common/avr/bootloader.c -o obj_hhkb_lufa/common/avr/bootloader.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/keymap.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/keymap.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_keymap.o.d ../../tmk_core/common/keymap.c -o obj_hhkb_lufa/common/keymap.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/bootmagic.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/bootmagic.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_bootmagic.o.d ../../tmk_core/common/bootmagic.c -o obj_hhkb_lufa/common/bootmagic.o
mkdir -p obj_hhkb_lufa/common/avr
Compiling C: ../../tmk_core/common/avr/eeconfig.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/avr/eeconfig.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_avr_eeconfig.o.d ../../tmk_core/common/avr/eeconfig.c -o obj_hhkb_lufa/common/avr/eeconfig.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/mousekey.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/mousekey.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_mousekey.o.d ../../tmk_core/common/mousekey.c -o obj_hhkb_lufa/common/mousekey.o
mkdir -p obj_hhkb_lufa/common
Compiling C: ../../tmk_core/common/command.c
avr-gcc -c -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_hhkb_lufa/common/command.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_hhkb_lufa_common_command.o.d ../../tmk_core/common/command.c -o obj_hhkb_lufa/common/command.o
Linking: hhkb_lufa.elf
avr-gcc -mmcu=atmega32u4 -gdwarf-2 -DF_CPU=16000000UL -DBOOTLOADER_SIZE=4096 -DHHKB_JP -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DBOOTMAGIC_ENABLE -DMOUSEKEY_ENABLE -DMOUSE_ENABLE -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DNKRO_ENABLE -DVERSION=4e317c2 -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=hhkb_lufa.elf -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/hhkb_lufa.elf.d obj_hhkb_lufa/keymap_jp.o obj_hhkb_lufa/keymap_common.o obj_hhkb_lufa/matrix.o obj_hhkb_lufa/led.o obj_hhkb_lufa/protocol/lufa/lufa.o obj_hhkb_lufa/protocol/lufa/descriptor.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Class/Common/HIDParser.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/ConfigDescriptors.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/DeviceStandardReq.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/Events.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/HostStandardReq.o obj_hhkb_lufa/protocol/lufa/LUFA-git/LUFA/Drivers/USB/Core/USBTask.o obj_hhkb_lufa/common/host.o obj_hhkb_lufa/common/keyboard.o obj_hhkb_lufa/common/action.o obj_hhkb_lufa/common/action_tapping.o obj_hhkb_lufa/common/action_macro.o obj_hhkb_lufa/common/action_layer.o obj_hhkb_lufa/common/action_util.o obj_hhkb_lufa/common/print.o obj_hhkb_lufa/common/debug.o obj_hhkb_lufa/common/util.o obj_hhkb_lufa/common/avr/suspend.o obj_hhkb_lufa/common/avr/xprintf.o obj_hhkb_lufa/common/avr/timer.o obj_hhkb_lufa/common/avr/bootloader.o obj_hhkb_lufa/common/keymap.o obj_hhkb_lufa/common/bootmagic.o obj_hhkb_lufa/common/avr/eeconfig.o obj_hhkb_lufa/common/mousekey.o obj_hhkb_lufa/common/command.o --output hhkb_lufa.elf -Wl,-Map=hhkb_lufa.map,--cref -Wl,--gc-sections -lm
Creating load file for Flash: hhkb_lufa.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature hhkb_lufa.elf hhkb_lufa.hex
dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
dfu-programmer atmega32u4 flash hhkb_lufa.hex
Checking memory from 0x0 to 0x547F... Empty.
0% 100% Programming 0x5480 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5480 bytes written into 0x7000 bytes memory (75.45%).
dfu-programmer atmega32u4 reset
I just got a hhkb alt controller and am trying to use it with my HHKB-JP. But, after flashing the firmware I cannot get any keypress registered.
I have tried hid listen tool on OSX but no output - I'm not sure how else to debug - does anyone have any ideas? I'll add a gist below with output of compilation and dfu-programmer.
Compiled on OSX 10.11, avr gcc version 4.8.1 (GCC)
I just got a hhkb alt controller and am trying to use it with my HHKB-JP. But, after flashing the firmware I cannot get any keypress registered.
I have tried hid listen tool on OSX but no output - I'm not sure how else to debug - does anyone have any ideas? I'll add a gist below with output of compilation and dfu-programmer.
Compiled on OSX 10.11, avytr gcc version 4.8.1 (GCC)
It loosks dfu-programmer flashes controller successfully, but you need sudo?
https://github.com/tmk/tmk_keyboard/wiki/FAQ-Build#cant-program-on-linux-and-mac
Also did you use sudo with hid_listen?
https://github.com/tmk/tmk_keyboard/wiki/FAQ#hid_listen-cant-recognize-device
Hi @rdg,
I get similar issues with my tmk'ed hhkb jp, and it appears to be OSX not picking up the keyboard, try unplugging/replugging/typing a few times.
For me sometimes it will work straight away and sometimes it will take 3 or more unplugs/replugs, but it always starts working eventually :D
I just got a hhkb alt controller and am trying to use it with my HHKB-JP. But, after flashing the firmware I cannot get any keypress registered.
I have tried hid listen tool on OSX but no output - I'm not sure how else to debug - does anyone have any ideas? I'll add a gist below with output of compilation and dfu-programmer.
Compiled on OSX 10.11, avytr gcc version 4.8.1 (GCC)
Hi @rdg,
I get similar issues with my tmk'ed hhkb jp, and it appears to be OSX not picking up the keyboard, try unplugging/replugging/typing a few times.
For me sometimes it will work straight away and sometimes it will take 3 or more unplugs/replugs, but it always starts working eventually :D
"Listening:" means hid_listen conneted to keyboard and waiting for output. No problem here.It loosks dfu-programmer flashes controller successfully, but you need sudo?
https://github.com/tmk/tmk_keyboard/wiki/FAQ-Build#cant-program-on-linux-and-mac
Also did you use sudo with hid_listen?
https://github.com/tmk/tmk_keyboard/wiki/FAQ#hid_listen-cant-recognize-device
I had flashed with sudo in previous attempts, but the result is the same. I never get anything from hid_listen after "Waiting for device:....... Listening:". The computer detects the keyboard it seems but no keypresses.
Hi @rdg,
I get similar issues with my tmk'ed hhkb jp, and it appears to be OSX not picking up the keyboard, try unplugging/replugging/typing a few times.
For me sometimes it will work straight away and sometimes it will take 3 or more unplugs/replugs, but it always starts working eventually :D
Hmm, tried about 10 and no result yet unfortunately. (edit: I also tried w/ windows, but same result)
One thing to confirm after reading everything i can - is there a different controller hardware for the JP than the pro 2 - did I buy the wrong board?
I have 2016/01 Rev.J (I ordered it through 1upkeyboards). Thanks for the advice so far everyone!
(edit: I see this on your order page, which makes me think I made a mistake: USB: 0+(Pro2) / 1+(JP) / Ask(Pro1) )
Ah, it is wrong controller for your HHKB JP. You cannot buy JP controller from the shop so far, controller you bought is actually for Pro2. Pro2 and JP have diffrent pinouts and diffrent shape connecter and they should not mate each other correctly.
HHKB Professional BT
====================
Internal shots:
http://imgur.com/a/YfcYt/all
Product info:
https://www.pfu.fujitsu.com/hhkeyboard/bt/
Controller
----------
m430f5510 TI MSP430
http://www.ti.com/lit/ds/symlink/msp430f5506.pdf
bu48**
Rohm reset IC
http://rohmfs.rohm.com/jp/products/databook/datasheet/ic/power/voltage_detector/bu48xxg-j.pdf
bu4819 1.9V
Z11 for Battery voltage to MCU
bu4820 x3 2.0V
Z10 for Battery voltage to MUC
Z12 for VOUT of Bluetooth module to MUC
Z16 for VOUT of Bluetooth module
bu4822 2.2V
Z17 for Battery voltage to MUC
LTC4415 Z15 power switch
siwtch between battery and USB power
http://www.linear.com/product/LTC4415
S1170B33 Z14 voltage regulator
http://datasheet.sii-ic.com/en/voltage_regulator/S1170_E.pdf
TPS2065 Z9 USB pwoer distribution switch
http://www.tij.co.jp/product/jp/TPS2065
http://www.tij.co.jp/jp/lit/ds/symlink/tps2065.pdf
CN2: To Power board
10 GND
8 USB power
9 Battery
7 DIPSW1
6 DIPSW2
5 DIPSW3
4 DIPSW4
3 DIPSW5
2 DIPSW6
1 Reset
Bluetooth module
----------------
bcm20730
ath432
atmel I2C EEPROM
http://www.atmel.com/images/atmel-8568-seeprom-at24c256c-datasheet.pdf
GM30G ??DC-DC stepup??
has inductor and diode
Switch board
------------
LV07A open-drain driver
http://www.ti.com/lit/ds/symlink/sn74lv07a.pdf
LW051A analog multiplexer
http://www.ti.com/lit/ds/symlink/sn74lv4051a.pdf
some chips are engraved
Power board
-----------
CN4: To Controller
1 GND
3 USB power
2 Battery
4 DIPSW1
5 DIPSW2
6 DIPSW3
7 DIPSW4
8 DIPSW5
9 DIPSW6
10 Reset
Hasu, I'd like to know how does the rear button work? Is it a simple push button as on bluetooth headphones or a two-position switch as on Filco?
Is this button really the only way to wake up a keyboard after 30 minutes of inactivity or it's just a bad google translate from here:
http://japanese.engadget.com/2016/04/11/hhkb-happy-hacking-keyboard-profess/
"HHKB Professional BT" is automatically power if there is no 30-minute character input has become the specifications turned off. The power will turn on the power button long press, but then re-connect automatically to the terminal which has been pairing just before
Also, how does the LED work? Does it glow all the time when the keyboard is active?
Thank you for sharing the pictures of BT model. It looks USB lines from MCU are not connected to external connector, but just connected to test points.
It seems PCB to PCB connector between the controller board and switch board is one of HRS DF12 series, but its height is not sure.
Thanks for these photos hasu, it would certainly be interesting to see what those engraved chips are. Can possibly make out an LV74A from one of them. The other large chip is a little blurry, can anyone get a better photo? Is there anything else hiding under the controller?
Edit: took a closer look at the photos. I have some initial thoughts but they are quite uncertain:
Z1 is the LV07A, driving the columns. It seems that there are two analog multiplexers taking row input: Z2 and Z3. The output line is joined near the bottom of the board and fed into the small cluster of components by the Topre logo. What are Z4 and Z5? I'm thinking voltage boost is done here, perhaps op amps of some kind. The output of this leads to R22 shown here http://i.imgur.com/HrAuS0V.jpg after which presumably the sensing is done. I think the top chip in that photo is LV74A and the key state is held in the flip flop for the controller to read. Looks like the lines leading off to the top of that photo go back to the controller. Maybe the smaller chip is a variable resistor.
Interesting to note that there are a low number of columns (1 LV07A) compared to rows (2x LW051A) (if my guess is right anyway). Normal HHKB2 had only one analog mux. I think this is related to the change of sensing mechanism. Possibly the new method is less robust, leading to the problem of voltage drop when too many keys are on a single row. Of course this could all be completely wrong.
I'll just leave my little contribution here... (https://www.reddit.com/r/MechanicalKeyboards/comments/4i5a4z/modification_designing_a_little_cover_for_those/)
Great job! Thanks for sharing with us.
The Adafruit 2500mAh battery fits with a small modification made to the top shell's interior stabilizing feet.
http://imgur.com/a/vN3Xl
The Adafruit 2500mAh battery fits with a small modification made to the top shell's interior stabilizing feet.
http://imgur.com/a/vN3Xl
Thanks for the info! I added the link to the first post.
https://geekhack.org/index.php?topic=71517.0
The Adafruit 2500mAh battery fits with a small modification made to the top shell's interior stabilizing feet.Yeah, I had to cut those stems off completely to put a HHKB BT keyswitch board there (and a part of leftmost stem as well).
http://imgur.com/a/vN3Xl
There's no need to clip anything (https://imgur.com/a/hQV2Y) on your HHKB to get the Adafruit 2500 (785060 dimensions) Battery to fit. All you have to do is bend the protection circuit away from the written side of the battery (if the battery is sitting with the writing side up, you bend the circuit downwards)...
The rest of the "mod" involves simply bending the aluminum around the battery, namely the corners, and bottom. If you were to stand the battery up, where the circuit side is on top...the bottom of the battery can be pushed in. The aluminum is pretty loose (which I'm assuming is in the event of expansion)...
You finagle the bottom, and the corners, and it fits perfect. No clipping of the case or anything.
Does the alternative controller work with the Japanese layout version of the HHKB? I'm going to Japan in about a month and was considering picking up one of those since it has more buttons than the regular one (I need them bottom corner arrow keys).Sure, it works with JP model(PD-KB420).
Does the alternative controller work with the Japanese layout version of the HHKB? I'm going to Japan in about a month and was considering picking up one of those since it has more buttons than the regular one (I need them bottom corner arrow keys).Sure, it works with JP model(PD-KB420).
Since there are people getting their BT HHKB's does anyone know if Hasu's controller will work with the BT version? My guess is that it won't since the board will probably work slightly differently. Be good to find out though.
Hi, Hasu. I have the USB controller and after flashing it takes about 62 seconds for the board to boot up (no keypresses registers) everytime I plug the board. Is this normal or did I do something wrong?
Here's my keymap (https://github.com/Gatix/tmk_keyboard/blob/master/keyboard/hhkb/keymap_gatix.c). I just added a layer for vim keys.
ul 23 01:54:35 desk kernel: [584015.608037] usb 1-1.3.3: new full-speed USB device number 106 using ehci-pci
Jul 23 01:54:35 desk kernel: [584015.701995] usb 1-1.3.3: New USB device found, idVendor=feed, idProduct=cafe
Jul 23 01:54:35 desk kernel: [584015.702003] usb 1-1.3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jul 23 01:54:35 desk kernel: [584015.702007] usb 1-1.3.3: Product: HHKB mod
Jul 23 01:54:35 desk kernel: [584015.702010] usb 1-1.3.3: Manufacturer: t.m.k.
Jul 23 01:54:37 desk kernel: [584017.451082] input: t.m.k. HHKB mod as /devices/pci0000:00/0000:00:02.1/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0/0003:FEED:CAFE.0200/input/input413
Jul 23 01:54:37 desk kernel: [584017.505945] hid-generic 0003:FEED:CAFE.0200: input,hidraw5: USB HID v1.11 Keyboard [t.m.k. HHKB mod] on usb-0000:00:02.1-1.3.3/input0
Jul 23 01:54:37 desk kernel: [584017.523046] input: t.m.k. HHKB mod as /devices/pci0000:00/0000:00:02.1/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.1/0003:FEED:CAFE.0201/input/input414
Jul 23 01:54:37 desk kernel: [584017.523937] hid-generic 0003:FEED:CAFE.0201: input,hidraw6: USB HID v1.11 Mouse [t.m.k. HHKB mod] on usb-0000:00:02.1-1.3.3/input1
Jul 23 01:54:37 desk kernel: [584017.550060] input: t.m.k. HHKB mod as /devices/pci0000:00/0000:00:02.1/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.2/0003:FEED:CAFE.0202/input/input415
Jul 23 01:54:37 desk kernel: [584017.632589] hid-generic 0003:FEED:CAFE.0202: input,hidraw7: USB HID v1.11 Device [t.m.k. HHKB mod] on usb-0000:00:02.1-1.3.3/input2
Jul 23 01:54:37 desk kernel: [584017.652170] hid-generic 0003:FEED:CAFE.0203: hiddev0,hidraw8: USB HID v1.11 Device [t.m.k. HHKB mod] on usb-0000:00:02.1-1.3.3/input3
Jul 23 01:54:37 desk kernel: [584017.670527] input: t.m.k. HHKB mod as /devices/pci0000:00/0000:00:02.1/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.4/0003:FEED:CAFE.0204/input/input416
Jul 23 01:54:37 desk kernel: [584017.760741] hid-generic 0003:FEED:CAFE.0204: input,hidraw9: USB HID v1.11 Keyboard [t.m.k. HHKB mod] on usb-0000:00:02.1-1.3.3/input4
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
No interval found for . Using 8000000
This is awesome work, Hasu!
I would really like to make this upgrade to my HHKB Pro 2. The only question I have is whether or not the charging component of the bluetooth controller version automatically shuts off once the battery is charged to prevent overcharging/overheating? Does anyone know?
It has MCP73832-2ACI/OT as charger chip which controls charge current properly. Just note that you have to use battery with protection circuit for further security.
Anyone else have any issues running this through a USB hub? I am getting some weird issues. When I plug it in through the hub it does not work and makes my speakers pop ever few seconds and the computer runs really slow. If I plug it directly into the USB on the computer it seems to work fine.
Is it possible to map the spacebar to act as a hold for function on this controller?
I think so, but it depends on what you want with the function.
Firmware supports 'dual role key' that allows you to assign two different actions on a key in general.
Sent from my Nexus 5X
I think so, but it depends on what you want with the function.
Firmware supports 'dual role key' that allows you to assign two different actions on a key in general.
Sent from my Nexus 5X
My idea was to have it act as a left hand accessible function button since the hhkb doesn't have an extra bottom below the left shift key. My goal would be for it to simply mirror what the right function key does. Is that doable?
I was thinking of trading up from my hhkb pro 2 to the khkb pro BT jp. Is there a custom controller for that. I have one for my pro 2.
I was thinking of trading up from my hhkb pro 2 to the khkb pro BT jp. Is there a custom controller for that. I have one for my pro 2.
I'm on the fence for a Pro JP model too & would like to add a Hasu controller if that's even possible
I was thinking of trading up from my hhkb pro 2 to the khkb pro BT jp. Is there a custom controller for that. I have one for my pro 2.
I'm on the fence for a Pro JP model too & would like to add a Hasu controller if that's even possible
hasu controller + pro jp works
not sure if there's a bluetooth version yet
System control is not supportedNot sure if this above quote is relevant, but...
It can't send Power, Wake and Sleep keys.
I've had someone ask where I got the USB plugs for the empty holes left in the rear of my HHKB after installing Hasu's controller (which doth rock, BTW. Thanks, Hasu!).
I just did a search on Ebay for "USB port (cover,plug)" and found these:
(Attachment Link)
They are a little undersize because they are designed for hardware inside the holes, not just an empty hole. I just wrapped some Kapton tape around the body to add a little dimension and they're now a nice press fit. I used Kapton tape because it's very thin, allowing very fine "adjustment" by layering, and also because it has an adhesive which won't weep out over time.
...and it looks like this:
(Attachment Link)
Time for a couple of stupid questions:
1) if sticking to USB, I could also use tmk usb->usb converter, with a difference of being limited to 6KRO. Any other notable differences?
2) is Pro BT keyboard fully unsupported in a sense that there are electrical/connection differences, or is it unsupported in a sense that built-in BT won't work, and current controller board can't be physically installed into the case? In other words, if you take out the PCB, connect it to the controller, would it work? (lack of (proper) programmability is such a bummer with that board)
1) You mean you can't move Fn to another key, or you can't map anything else to Fn key? You can still use it, right?
2) Even the PCB? Interesting.
Thanks!
Would increasing the matrix refresh rate be a possibility? I'd assume it depends on how the capacitor charges over time and whether or not the controller itself is the thing that dictates it, so I'm not entirely sure.
#ifdef HHKB_JP
// Looks like JP needs faster scan due to its twice larger matrix
// or it can drop keys in fast key typing
_delay_us(30);
#else
_delay_us(75);
#endif
Hey, I just got a USB alt controller and have installed it, the keyboard doesn't close 100%, is that normal? (It's basically fine and I can live with it, it's just cracking when pushing on the back plate.)
The real question I came here to ask is how do I set up a program that actually flashes the hex files onto the keyboard?
Am I stupid? I can't seem to find anything other than some posts about "FLIP" which only seems to be available on Windows.
The only programmable keyboard I've had was the White Fox and the instructions for that was so straight forward that I managed without a hassle.
I'm a web developer and am comfortable with the command line but all the directions I've found are vague and I don't understand them, so if there's a clear guide for the USB version of the controller for Mac, it would be great if someone could give me a link or something.
Sorry if this is super noobish, I just didn't know where to turn.
Hey, I just got a USB alt controller and have installed it, the keyboard doesn't close 100%, is that normal? (It's basically fine and I can live with it, it's just cracking when pushing on the back plate.)
The real question I came here to ask is how do I set up a program that actually flashes the hex files onto the keyboard?
Am I stupid? I can't seem to find anything other than some posts about "FLIP" which only seems to be available on Windows.
The only programmable keyboard I've had was the White Fox and the instructions for that was so straight forward that I managed without a hassle.
I'm a web developer and am comfortable with the command line but all the directions I've found are vague and I don't understand them, so if there's a clear guide for the USB version of the controller for Mac, it would be great if someone could give me a link or something.
Sorry if this is super noobish, I just didn't know where to turn.
Which model is your hhkb? In case of Pro2 or JP you have to put ferrite core on cables right place to close tidily. In any case it should close.
Check MANUAL section in first post of this thread and wiki for flashing TMK HHKB Alt controller.
https://geekhack.org/index.php?topic=71517.0
https://github.com/tmk/tmk_keyboard/wiki#flash-firmware
Hey, I just got a USB alt controller and have installed it, the keyboard doesn't close 100%, is that normal? (It's basically fine and I can live with it, it's just cracking when pushing on the back plate.)
The real question I came here to ask is how do I set up a program that actually flashes the hex files onto the keyboard?
Am I stupid? I can't seem to find anything other than some posts about "FLIP" which only seems to be available on Windows.
The only programmable keyboard I've had was the White Fox and the instructions for that was so straight forward that I managed without a hassle.
I'm a web developer and am comfortable with the command line but all the directions I've found are vague and I don't understand them, so if there's a clear guide for the USB version of the controller for Mac, it would be great if someone could give me a link or something.
Sorry if this is super noobish, I just didn't know where to turn.
Which model is your hhkb? In case of Pro2 or JP you have to put ferrite core on cables right place to close tidily. In any case it should close.
Check MANUAL section in first post of this thread and wiki for flashing TMK HHKB Alt controller.
https://geekhack.org/index.php?topic=71517.0
https://github.com/tmk/tmk_keyboard/wiki#flash-firmware
Hey, I just got a USB alt controller and have installed it, the keyboard doesn't close 100%, is that normal? (It's basically fine and I can live with it, it's just cracking when pushing on the back plate.)
The real question I came here to ask is how do I set up a program that actually flashes the hex files onto the keyboard?
Am I stupid? I can't seem to find anything other than some posts about "FLIP" which only seems to be available on Windows.
The only programmable keyboard I've had was the White Fox and the instructions for that was so straight forward that I managed without a hassle.
I'm a web developer and am comfortable with the command line but all the directions I've found are vague and I don't understand them, so if there's a clear guide for the USB version of the controller for Mac, it would be great if someone could give me a link or something.
Sorry if this is super noobish, I just didn't know where to turn.
Which model is your hhkb? In case of Pro2 or JP you have to put ferrite core on cables right place to close tidily. In any case it should close.
Check MANUAL section in first post of this thread and wiki for flashing TMK HHKB Alt controller.
https://geekhack.org/index.php?topic=71517.0
https://github.com/tmk/tmk_keyboard/wiki#flash-firmware
So I actually just have to install dfu with homebrew (done already) and then run these commands:
dfu-programmer atmega32u4 erase --force
dfu-programmer atmega32u4 flash <layout I made with the TMK layout editor.hex>
dfu-programmer atmega32u4 reset
In my terminal with the keyboard connected, followed by pressing the red button, am I missing something?
Do I have to place the hexfile in a specific folder? Do I have to stand in the same folder that my hexfile is placed in?
I don't even have to stand in some specific folder or download some HHKB specific files from TMK's Github?
Also, is it normal that my alt controller board is green? All the pictures I've seen of it show the card being blue.
Hey, I just got a USB alt controller and have installed it, the keyboard doesn't close 100%, is that normal? (It's basically fine and I can live with it, it's just cracking when pushing on the back plate.)
The real question I came here to ask is how do I set up a program that actually flashes the hex files onto the keyboard?
Am I stupid? I can't seem to find anything other than some posts about "FLIP" which only seems to be available on Windows.
The only programmable keyboard I've had was the White Fox and the instructions for that was so straight forward that I managed without a hassle.
I'm a web developer and am comfortable with the command line but all the directions I've found are vague and I don't understand them, so if there's a clear guide for the USB version of the controller for Mac, it would be great if someone could give me a link or something.
Sorry if this is super noobish, I just didn't know where to turn.
Which model is your hhkb? In case of Pro2 or JP you have to put ferrite core on cables right place to close tidily. In any case it should close.
Check MANUAL section in first post of this thread and wiki for flashing TMK HHKB Alt controller.
https://geekhack.org/index.php?topic=71517.0
https://github.com/tmk/tmk_keyboard/wiki#flash-firmware
So I actually just have to install dfu with homebrew (done already) and then run these commands:
dfu-programmer atmega32u4 erase --force
dfu-programmer atmega32u4 flash <layout I made with the TMK layout editor.hex>
dfu-programmer atmega32u4 reset
In my terminal with the keyboard connected, followed by pressing the red button, am I missing something?
Do I have to place the hexfile in a specific folder? Do I have to stand in the same folder that my hexfile is placed in?
I don't even have to stand in some specific folder or download some HHKB specific files from TMK's Github?
Also, is it normal that my alt controller board is green? All the pictures I've seen of it show the card being blue.
Note that you have to press red button on your controller to enter flash(DFU bootloader) mode before running dfu-programmer commands. Of course, you have to give proper path of hex file on the command as other command line tools require. And you may need to add 'sudo' to the commands as the document says.
Yes, new revision of TMK Alt controller pcb is green, but it may be changed in future.
Howdy folks. Anyone know if the mod is compatible with the HHKB Bluetooth keyboard: PD-KB600BN ?No it's a totally different setup.
Has anyone else experienced coil whine with their bluetooth controller when in USB mode? I thought it was because I didn't have a battery in, but even with one in I get this very slight coil whine which is driving me a bit crazy!
Has anyone else experienced coil whine with their bluetooth controller when in USB mode? I thought it was because I didn't have a battery in, but even with one in I get this very slight coil whine which is driving me a bit crazy!
I think it depends on the computer and how "clean" the USB power is. On my main home computer, it works perfectly fine with no noise. On my work computer, there's a bit of a high pitched noise that comes from the controller.
At this point, is there really anything available that could extend the life of the battery? I enjoy being able to use it wirelessly and especially having a remappable layout is very nice but the time it takes to drain a battery just seems too short. I'm not sure if anyone here has a PFU BT HHKB and has looked at the internals, because whatever magic circuitry (or maybe hopefully software tricks) they use to get months off of two double-A batteries could be really useful with something like this (maybe a new revision?)
at this point unfortunately you have to write code and compile it. the code should remove LCTL before send ESC and restore the modifier state at the end. not easy but still possible.
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case ESCX:
if (record->event.pressed) {
unregister_mods(MOD_BIT(KC_LCTL));
register_code(KC_ESC);
unregister_code(KC_ESC);
register_mods(MOD_BIT(KC_LCTL));
send_keyboard_report();
}
break;
}
}
I have a plan to add action just like ACTION_MODS_KEY except for removing modifier instead of adding.
That code looks like nice. It is good idea to send both press and release of ESC in the press event of ESCX, it makes situation simple. You don't have to have send_keyboard_report(), each register/unregister functions themselves call it.
With 'record->event.pressed' you can discriminate between 'key press' and 'key release' event. action_function() is called twice when the both events occur, so in general you have to know which event you are handling at the time.
'dprintf()' spits message out to 'hid_listen' command line tool when debug is on, while 'xprintf()' always prints regardless of debug state. You can turn debug on with LShift+RShift+D combo.
Device disconnected.
Waiting for new device:.......
Listening:
debug: on
Waiting for device:
Listening:
debug: on
^[^[^[
debug: off
keyboard: on
keyboard: 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 02 00 00 00 00 00 00 00 0^[0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
debug: off
debug: on
^R
debug: off
^[^[jlij^C
It's not a big deal, since I got everything working now, but this is what I see when I add a `dprint()` and try to debug:Code: [Select]Waiting for device:
Listening:
debug: on
^[^[^[
debug: off
keyboard: on
keyboard: 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 02 00 00 00 00 00 00 00 0^[0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
keyboard: 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
debug: off
debug: on
^R
debug: off
^[^[jlij^C
I've had someone ask where I got the USB plugs for the empty holes left in the rear of my HHKB after installing Hasu's controller (which doth rock, BTW. Thanks, Hasu!).
I just did a search on Ebay for "USB port (cover,plug)" and found these:
(Attachment Link)
They are a little undersize because they are designed for hardware inside the holes, not just an empty hole. I just wrapped some Kapton tape around the body to add a little dimension and they're now a nice press fit. I used Kapton tape because it's very thin, allowing very fine "adjustment" by layering, and also because it has an adhesive which won't weep out over time.
...and it looks like this:
(Attachment Link)
Just as another point of reference, I opt'd for a slightly more custom approach. Using a design previously uploaded in this thread, saved in github https://github.com/robotmaxtron/HHKB-usb-dust-covers (https://github.com/robotmaxtron/HHKB-usb-dust-covers) I got some printed for about $10 I think at Shapeways.Show Image(http://i.imgur.com/Tv0Gu2ml.jpg)
I was just wondering if I could restore the function (FN) key to the HHKB after a Hasu Bluetooth controller has been installed. I don't see any place to set this up in the firmware, only keys to change the layers. I've gotten so used to the HHKB's layout not having the FN key is a real pain. I'd be fine with the layers if it worked like a switch but if its going to change the whole keyboard layout that won't do for multi-key commands like ctrl+alt+del or alt+printscreen, ctrl+f5 etc. Anyone have any insight on this? I'd really like to avoid remapping several layers, making new macros or doing any kind of software level keybindings.Go to the "Layer switching and etc" tab, there you'll find layer switch(momentary) options. You can use L1 and it will act exactly like the original FN key on the stock HHKB as long as you have all your functions on Layer 1.
Please let me know!
I was just wondering if I could restore the function (FN) key to the HHKB after a Hasu Bluetooth controller has been installed. I don't see any place to set this up in the firmware, only keys to change the layers. I've gotten so used to the HHKB's layout not having the FN key is a real pain. I'd be fine with the layers if it worked like a switch but if its going to change the whole keyboard layout that won't do for multi-key commands like ctrl+alt+del or alt+printscreen, ctrl+f5 etc. Anyone have any insight on this? I'd really like to avoid remapping several layers, making new macros or doing any kind of software level keybindings.it comes with FN key similar to stock controller by default, you won't need worry. use keymap editor if you want to change keymap.
Please let me know!
Hi everyone!
First I just wanted to thank Hasu for this awesome controller! I've had mine for about a month now and it has been working great!
Right now, the firmware that I've been using was created using the website in the OP (http://www.tmk-kbd.com/tmk_keyboard/editor/). I was just wondering, can I create a QMK firmware and flash that to my HHKB too?
Thanks!
Hi everyone!
First I just wanted to thank Hasu for this awesome controller! I've had mine for about a month now and it has been working great!
Right now, the firmware that I've been using was created using the website in the OP (http://www.tmk-kbd.com/tmk_keyboard/editor/). I was just wondering, can I create a QMK firmware and flash that to my HHKB too?
Thanks!
Hi,
Simple answer is no, you can't use QMK firmware with TMK keyboard editor in general. Technically it is still possible with tweaks but I guess its explanation is not what you want.
If you want to use QMK firmware you better build it from source code, they have decent documents and community support. It doesn't seems QMK has support for bluetooth controller, though.
Edit: Also, once I build the .hex file, would I just need to flash it to my keyboard like I had done previously? Or would I need to do something differently to prepare it for a different type of firmware?
Edit: Also, once I build the .hex file, would I just need to flash it to my keyboard like I had done previously? Or would I need to do something differently to prepare it for a different type of firmware?
Same method should work, there are no diffrence there.
no unfortunately at this time. to use macro you have to edit code and compile with command line tools.
I'm thinking to get a JP type-s, and noted drilling is required for Hasu BT.
Can I use USB mode without battery installed? Will the controller fits without drilling holes?
I will most likely use it wired but in case I want to try Bluetooth later.
Thanks for your reply.I'm thinking to get a JP type-s, and noted drilling is required for Hasu BT.
Can I use USB mode without battery installed? Will the controller fits without drilling holes?
I will most likely use it wired but in case I want to try Bluetooth later.
no, you need holes to install the TMK bluetooth controller into HHKB JP.
Dumb question // but if one uses the TMK keymap editor to create the hex file // do you only also need FLIP to program the controller? Or is there still a need to compile firmware first?
Nice - makes it easy.
One more question - the 4 through holes near the USB port, can they be used as break out points for the USB power / data lines (in yellow below)?Show Image(https://s22.postimg.org/ejslejok1/USBth.png)
If they are, was thinking of using a vertical PCB mount female USB A port, wired to those points, in one of the same locations that the original controller has its USB hub ports (to use a USB A port for the HHKB instead of the mini USB port).Show Image(https://s22.postimg.org/gpmw91s0h/USBAPCBV.png)
Yes, normally type B port would be best, just not sure there is room. Know a type A port would fit, since the original controller had a pair there previously.
Goal would be to have a more robust port than USB mini, for connecting the HHKB to the PC.
Hasu,
I have an already-modified HHKB that has the programmable controller but it doesn't have the bluetooth components on it. From what I've seen, it looks like the footprint is there for the bluetooth chip. Can I pick up some components from Digikey and solder them on to make it bluetooth?
I have a reflow oven if SMD soldering is necessary.
Thanks for all of your contributions to the community. I've been enjoying my AEK ALPS64 for a year now and I look forward to this enhanced HHKB.
Hasu,
I have an already-modified HHKB that has the programmable controller but it doesn't have the bluetooth components on it. From what I've seen, it looks like the footprint is there for the bluetooth chip. Can I pick up some components from Digikey and solder them on to make it bluetooth?
I have a reflow oven if SMD soldering is necessary.
Thanks for all of your contributions to the community. I've been enjoying my AEK ALPS64 for a year now and I look forward to this enhanced HHKB.
Sure, you can. It is Microchip(which merged Roving Networks some ago) RN42-I/RM. And you can find parmeter of other componets easily in schematic.
https://octopart.com/rn42-i%2Frm630-microchip-70466722
https://github.com/tmk/HHKB_controller
This BOM may be old and not updated but will be still useful. Let me know if you find any incorrectness.
https://github.com/tmk/HHKB_controller/blob/master/BOM.txt
I remember seeing something about adjusting the actuation sensitivity but I can't find it now. I notice that I occasionally will be resting my pinky on shift and selecting huge numbers of icons or rows or whatever.
I take my pinky off and the key doesn't even move but the shift key is released. I'd like to make the keys just a bit less sensitive.
Another inquiry...
I would like to add a small piezoelectric buzzer to the board the same way it exists on the Planck. My HHKB is not the JP model but there is a component called "JP" which appears to support the larger matrix for that layout. The C6 pin from the atmega controller which has the proper timers and things to support the audio mechanism is used to support one of these extra rows.
Would the JP component malfunction if the trace to PC6 is severed? From reviewing the code, as long as HHKB_JP is not defined, it shouldn't try to send or read that port.
The physical trace seems easy enough to isolate so if JP component will function without it, I'd probably clip that and jump the buzzer wire to the atmega pin directly.
I have a question about the TMK firmware.
There used to be a function layer that could be accessed by holding down the space bar. I think you could get to layer 4, anyway. My concern is that I do not see this feature anymore, and I was wondering if it's called something else now? I need it for my space FN layout. And unfortunately I'm not very good at coding myself. I tried looking at how the TMK works. But a bit out of my reach for now. I need a dual role key.
Thanks!
no unfortunately at this time. to use macro you have to edit code and compile with command line tools.
Alrighty thanks! I guess I'll start figuring that out. Cheers
at this point unfortunately you have to write code and compile it. the code should remove LCTL before send ESC and restore the modifier state at the end. not easy but still possible.
I have a plan to add action just like ACTION_MODS_KEY except for removing modifier instead of adding.
I got it to work with:Code: [Select]void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case ESCX:
if (record->event.pressed) {
unregister_mods(MOD_BIT(KC_LCTL));
register_code(KC_ESC);
unregister_code(KC_ESC);
register_mods(MOD_BIT(KC_LCTL));
send_keyboard_report();
}
break;
}
}
copying stuff from hhkb/unimap_hasu.c
It appears to be working pretty well, though I don't understand the event lifecycle, so I don't really get why the if (record->event.pressed) is necessary, i just added it because it was registering twice without it.
Please let me know if there's anything I'm missing!I have a plan to add action just like ACTION_MODS_KEY except for removing modifier instead of adding.
This would be great!
#define AC_L1 ACTION_LAYER_MOMENTARY(1)
#define AC_L2 ACTION_LAYER_MOMENTARY(2)
#define AC_1CTL ACTION_LAYER_MODS(1, MOD_LCTL)
#define AC_ESCX ACTION_FUNCTION_TAP(ESCX)
// emulates FC660C default keymap
#ifdef KEYMAP_SECTION_ENABLE
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
#else
const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = {
#endif
[0] = KMAP(
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, VOLU,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, VOLD,
1CTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT,
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP,
L2 ,LALT,LGUI, SPC, RGUI,RALT,L2, LEFT,DOWN,RGHT
),
[1] = KMAP(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,ESCX,TRNS,TRNS, MUTE,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, CAPS,TRNS,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS
),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case ESCX:
if (record->event.pressed) {
unregister_mods(MOD_BIT(KC_LCTL));
register_code(KC_ESC);
unregister_code(KC_ESC);
register_mods(MOD_BIT(KC_LCTL));
}
break;
}
}
#define AC_ESCX ACTION_FUNCTION_TAP(ESCX)
Try ACTION_FUNCTION instead of ACTION_FUNCTION_TAP.Code: [Select]#define AC_ESCX ACTION_FUNCTION_TAP(ESCX)
ACTION_FUNCTION_TAP is used when you wan to define your own tap key and dual role key(tap key) is imposed some delay inherently. In this case you don't need tap key there you can use ACTION_FUNCTION.
ACTION_FUNCTION_TAP is used when you wan to define your own tap key and dual role key(tap key) is imposed some delay inherently. In this case you don't need tap key there you can use ACTION_FUNCTION.
Got it, makes sense. Thanks so much for the info!
On an unrelated note, have you seen this article: https://danluu.com/keyboard-latency/
Unfortunately, the measurement he did was from beginning of keypress, instead of from actuation. But I was wondering if you've done any measurement/optimization of latency in the controller hardware or the tmk software.
Interesting, so does your controller and the tmk firmware add any latency? Is it negligible in comparison with the key scan rate?
Apologies if this has already been asked but is there a "reset" key on the tmk gui editor? Would love to be able to soft reset my HHKB without having to hard reset with the red button everytime I want to flash a new hex. Would be great to just be able to hit a key on the board to go into a flashable state.
.
Are there any specific instructions for using Atmel FLIP I should know about? I have Atmega32u4 selected, I generated a HEX from the online tool, I pressed the reset button on the back, but I'm getting an error that I could not read from or write to the USB device. I believe I have the correct driver installed because it shows up in the Device Manager as a libusb-win32 device.
An interesting nrf51-based hhkb pro 2 controller has arrived on taobao, claims several weeks on a single charge. @hasu what do you think https://geekhack.org/index.php?topic=71517.msg2676544#msg2676544
Please help with the HHKB matrix code on nrf52. I'm getting ghosting or something, each keystroke is followed by a sequence of symbols from the other part of the matrix.The magic 2. NOT any other keys, only KEY 2.
From what I see I don't really need a precision timer because there's no V-USB interrupts, I'm debugging on hardware USB, it's way less CPU-consuming.
I could do everything just busywaiting with delays without measuring time intervals.
The whole matrix is just 60*20us = 1200us ? 1.2ms ? Maybe double that but still, 2 ms is nothing. I can just do a critical section or something.
The "ghosting" is very specific. Each keystroke is followed by few '2's, the length of the sequence depends of how long I hold the key, it also autorepeats.
E.g. if I type qwerty I get something like q222w222e22r2222t222y222222. If I type '2' I get 2qqqq or something.
Maybe somebody knows what causes that?
See this problem in details with the code https://github.com/joric/nrfmicro/wiki/HHKB-BLE
Also video
The magic 2. NOT any other keys, only KEY 2.Ohh yangdigi! Well, thanks, at least I know somebody stumbled upon it, what you did, different timings? I didn't have any problems on pro micro (32u4) personally but I've used 5v one and nrfmicro is 3.3v maybe it needs different timings, gotta look at your firmware.
I've come across a few times with it.
When reading key state is not stable, the magic 2 comes.
But not like your video shows that several 2 come together, I just get one extra KEY 2 a time.
The magic 2. NOT any other keys, only KEY 2.Ohh yangdigi! Well, thanks, at least I know somebody stumbled upon it, what you did, different timings? I didn't have any problems on pro micro (32u4) personally but I've used 5v one and nrfmicro is 3.3v maybe it needs different timings, gotta look at your firmware. Got your controller today, very cool, I've just recently discovered Mass Storage bootloader on Atmegas (https://github.com/joric/lufa/tree/promicro/Bootloaders/MassStorage) and it still looks like magic to me. Also the layout editing site, I don't want to edit and compile firmwares anymore. But what's the reason for the flipped battery connector, was it, like, random?
I've come across a few times with it.
When reading key state is not stable, the magic 2 comes.
But not like your video shows that several 2 come together, I just get one extra KEY 2 a time.Show Image(https://i.imgur.com/bh4uwuJ.jpg)
Also that god damned miniusb. Tried to replace it with microusb, no luck, this one uses incompatible (thru-hole) footprint =( hope it needs less charging than before, I don't want to keep microusb cable on the table. What about type-c or microusb revisions? Microusb fits just fine (see https://imgur.com/a/aZIS1).
Anyway you've gone way further than me. I've had plans on nRFMicro and PCBA assembly (possibly Elecrow) but I don't think there's a demand in comparison with the HHKB controller.
Please help with the HHKB matrix code on nrf52. I'm getting ghosting or something, each keystroke is followed by a sequence of symbols from the other part of the matrix.I've got a board and took a quick test with your code.
From what I see I don't really need a precision timer because there's no V-USB interrupts, I'm debugging on hardware USB, it's way less CPU-consuming.
I could do everything just busywaiting with delays without measuring time intervals.
The whole matrix is just 60*20us = 1200us ? 1.2ms ? Maybe double that but still, 2 ms is nothing. I can just do a critical section or something.
The "ghosting" is very specific. Each keystroke is followed by few '2's, the length of the sequence depends of how long I hold the key, it also autorepeats.
E.g. if I type qwerty I get something like q222w222e22r2222t222y222222. If I type '2' I get 2qqqq or something.
Maybe somebody knows what causes that?
See this problem in details with the code https://github.com/joric/nrfmicro/wiki/HHKB-BLE
Also video
//if (matrix_prev[row] & (1<<col)) {
KEY_PREV_ON();
//}
The keys should work without "222" problem now.I've got a board and took a quick test with your code.
matrix.c 129 to 131.Code: [Select]//if (matrix_prev[row] & (1<<col)) {
The keys should work without "222" problem now.
KEY_PREV_ON();
//}
Hope this helps.
My first battery that I got from a keyboard is as what I use. So I just keep it with all my boards and batteries I bought.
Here is USB Type-C for HHKB. I don't want to destroy my case, so I make a daughter board to hole type-c.
(Attachment Link)
(Attachment Link)
I'm almost sure that code is needed for reliabble key sensing from my research and understandings, it is needed to realize key hysteresis.I haven't really tried the new code yet, still waiting for the new nRFMicro revision with an extra mosfet on board.
Here is USB Type-C for HHKB. I don't want to destroy my case, so I make a daughter board to hole type-c.Huh I just realized the USB-C riser board is not that large, it's about the size of USB-C plus a couple of 5.1K CC pulldowns.
So, I searched the thread and the forums...
Can this be used with a HHKB Lite 2; PD-KB200W/U ?
The keys should work without "222" problem now.
Hope this helps.
The keys should work without "222" problem now.
Hope this helps.
Nope, looks like it's something else. Probably timing is a bit off, need more testing.
On an unrelated note, could you please share your schematics and PCB design for the USB-C riser board for the YDKB HHKB BLE? It seems pretty complicated, couldn't figure out what is that 3.0V pin (3V looks like logic level but what does it do?) Why there's a 4 pin header but only 3 pins is used? See https://github.com/joric/usb-c/wiki
share url
share url
What bootloader are you using for the YDKB controller, btw? I have this
but it needs erasing the files before updating them, not very handy:
https://redd.it/c886jv
https://github.com/joric/lufa/tree/promicro/Bootloaders/MassStorage
https://github.com/abcminiuser/lufa/issues/148
That alt controller worked well before?
Topre stock controller had smilar issue with the cable?
In my case ribbon cable failed on another side(switch board) and I had to take apart switch board completely to replace original component with compatible one.
https://imgur.com/a/ZlibW7v
HHKB in the pics is my testbed with long cable, btw.
Random key input is almost random or has specific pattern?
Paste the random keys here, I may find clue to determine which wire is faulty.
The problem occurs on both mac and windows. I'll try disassembling/re-assemble from scratch and clean the pcb this coming weekend. Could you explain more about the removing the contacts? Im not following
In my Pro2 resistance between VW(=VH) and VL is 24.41KOhm when powered and around 65KOhm without power. I'm not sure how to measure it correctly but touched VW pin with red probe.
In my Pro2 resistance between VW(=VH) and VL is 24.41KOhm when powered and around 65KOhm without power. I'm not sure how to measure it correctly but touched VW pin with red probe.
It's possible that PFU lowered the key a known distance and then adjusted the digipot value until it would just barely actuate, which gives credence to the aptly named "calibration points". I can assume that the internal value within the digipot is also different given the different resistance.
I've made the code available via (https://pastebin.com/RQYiGK5W (https://pastebin.com/RQYiGK5W)), as I feel it's not big enough for its own repo (yet). I'll make a fork of the tmk/qmk repo if I get my hands on a controller in the near future. At a glance, it appears ports D0-D3 and F0-F1 are available either as test points or for GPIO use. Could you confirm if that's the case?
Not-used pins available for user:
- Bluetooth controller for HHKB JP has D0, D1
- Bluetooth controller for HHKB Pro2 has D0, D1, C6, C7.
- USB controller for HHKB JP has D0, D1, D2, D3, D4, D5, F0, F1, F4, F5, F6, F7, E6
- USB controller for HHKB Pro2 has D0, D1, D2, D3, D4, D5, F0, F1, F4, F5, F6, F7, E6, C6, C7
But not like your video shows that several 2 come together, I just get one extra KEY 2 a time.Bluetooth stopped working on YDKB HHKB Pro 2 controller. Green LED flashes only in bootloader mode. Battery indicator shows 12. BLE hardware reset doesn't help. Any ideas? Charger/regulator/Anything else to check/replace? Can't find what's wrong with it. Battery apparently works, green LED flashes if the keyboard is in bootloader mode even with the cable unplugged.