1. Yes.
2. Most probably not.
It may not be obvious what that is supposed to do if you've never taken a Filco tenkeyless apart... I should have found a picture, there are no dumb questions =)
There is a picture of the original controller showing in this thread http://geekhack.org/index.php?topic=6557.0
Will this allow a Filco to utilize LEDs on switches?
Will this allow a Filco to utilize LEDs on switches?
It's not magic, there's still no traces under the switches for LEDs and there's no controller lines left to control LEDs. It will be able to control the Scroll Lock and Caps Lock LEDs if my eyes aren't playing tricks on me.
Another dumb question (and probably unrelated)... with additional modding would be possible to make it wireless?
I would be interested too. 6kr shipping in a letter?
I would be down for 2 if this takes off.
OT: Does the Filco PCB have holes for LEDs where the caps lock and scroll lock are? I can't remember. You could remove the LEDs from their current locations and run wires to connect them under the switch housing, but it would be better if the PCB had holes there, so you could wire it under the PCB.
Don't have a Filco, but might someday
In for one :D
lol this controller idea made half of the phantom builds obsolete (excludes people that bought phantom for winkeyless or cherry modifiers). I bought phandom hardware for the idea of programing native colmak/dvorak into the keyboard.
Will this controller have muli layer functions?
If the controller replaces the original one, all it sees is the activating keys, and if the software remains similar to the Phantom controller, then the functionality ought to remain the same. Why wouldn't it have multilayer functions?Because I'm not a software or hardware engineer, and don't know how these things work haha. I just based it on: Filco and it's controller does not support multilayer functions, and since this is reverse engineered from a filco controller, it probably won't have mutilayer ability. Wasn't sure, so that's why I asked.
I'm a little confused on how this works. How is the reprogramming done? [Yes, I've searched and haven't found much.] Is a firmware rebuild and reload required? I'm a software developer and don't mind tweaking and rebuilding firmware... just like to know what's involved before I commit.
Definitely interested in at least one unit if the programming/load process isn't too difficult.
Hey, this should also work on a CM Storm Quickfire Rapid (really fast, gogogo, super speed) model.The mounting pins would need to be identical. And the matrix would need to be very close to identical for it to work at all. If that is not the case there is still the option to build a cruder version, using just a regular Teensy plus some multiplexing component to expand the number of IO lines. It will be more or less exactly the same thing.
You know, it's been so long since I had my Filco apart that I don't recall what it looks like... I'm ASSuming that the controller for a std. ANSI 104-key board is completely different and therefore I have no use for this controller?No, the full size boards have another daughter board. It uses the same controller but is totally different. Actually harder to fit an ATmega onto I think. Unfortunate since I am a full size proponent myself..
I'm a little confused on how this works. How is the reprogramming done? [Yes, I've searched and haven't found much.] Is a firmware rebuild and reload required? I'm a software developer and don't mind tweaking and rebuilding firmware... just like to know what's involved before I commit.You will need to have a hex-file, a compiled firmware, that is loaded to the chip through an interfacing software on your computer. With the Teensy this is done with their own TeensyLoader. With the stock Atmel or open source LUFA bootloader there are different programs. I've tried the Linux ones and got that working just fine. I still need to try on Windows, but that should be no problem either.
Definitely interested in at least one unit if the programming/load process isn't too difficult.
you think you can get it down to 20$ stuffed/unit?
I want to get one or two. Is $20 including components or just the PCB?This is nothing like ordering a mega large keyboard PCB. It is ~ 2.2" x 1.3", they are super cheap =D I still sort of haven't factored in shipping from China, but with these amounts that should divide down to manageable amounts. The ATmega is the only expensive component at ~$6
Hey Bphiphany, I never got an answer in the DT thread, how much memory is available on the teensy for macros and such? After the firmware is loaded, approximately how much is left I guess would be the relevant question. As far as I know, all Cherry programmable ones are limited to about 16 characters.Sorry, didn't catch that =) There is 32kB of flash memory on the chip. The non-Teensy bootloaders take 4kB of that, and then the actual code takes some. The current Phantom code is ~9kB with a single layer. That would leave almost 20kB for other layers and macros, and the actual code to implement the functionality. There is also 1kB of EEPROM memory available for the controller to use. I haven't messed around with the EEPROM myself though. This is the part of the memory that can actually be modified at runtime, the flash memory is only written during flashing the chip. There is also 2.5kB of SRAM for the actual running program to use.
I expect that a lot of code will be added in the future as people realize that it can do anything. Are there any unused pins on the teensy, for instance the analogue input that can measure the voltage? One could make all kinds of shenanigan with it. Attach a photo resistor and use the value to adjust the brightness of the LEDs, a potentiometer to adjust the voltage on analogue in and use that value to adjust the brightness, or a thermistor which would be weird etc. I expect the amount of somewhat useless functions to grow a lot in the future when people realize the capabilities and more people start writing their code, especially when people start to receive their parts.not to be a downer but i hoped that would happen with the phantom and it really hasnt the only real progress made was the hacked in layer support.
I expect that a lot of code will be added in the future as people realize that it can do anything. Are there any unused pins on the teensy, for instance the analogue input that can measure the voltage? One could make all kinds of shenanigan with it. Attach a photo resistor and use the value to adjust the brightness of the LEDs, a potentiometer to adjust the voltage on analogue in and use that value to adjust the brightness, or a thermistor which would be weird etc. I expect the amount of somewhat useless functions to grow a lot in the future when people realize the capabilities and more people start writing their code, especially when people start to receive their parts.
Ah, I am still in phantom-thoughts I guess. It uses a teensy which comes with ADC on one pin from the factory, right?
It is not a Teensy. There are 2 (3 stretching it) free IO pins on the controller. None of them are connected to an ADC, and they will be tricky to connect to since you would need to solder wires directly to the legs of the chip...
The Teensy itself has the HWB pin bound to ground, which is required to enter the bootloader at reset. (I actually set this design up the same way.) That pin works as a regular IO pin though if you would want to hack into it =) This makes entering the bootloader a bit trickier...
Here's a picture of my CMstorm controller.Hey, this should also work on a CM Storm Quickfire Rapid (really fast, gogogo, super speed) model.The mounting pins would need to be identical. And the matrix would need to be very close to identical for it to work at all. If that is not the case there is still the option to build a cruder version, using just a regular Teensy plus some multiplexing component to expand the number of IO lines. It will be more or less exactly the same thing.
Couldn't you connect those pins to traces on the PCB that "go nowhere" but to holes in the PCB? Or is the design locked in already? Just a thought...
Very impressive!
I think this will get very strong demand here in Japan if Filco users in Japan find this thread.
Actually, how does the bootloader come up? By pushing a button on the controller board like Teensy?
Or there is any trick in your custom LUFA bootloader?
Filco gen2 controller
Here's a picture of my CMstorm controller.
As you can see, it's pretty similar in size/shape to filco. I still don't know about the matrix, though, I can to look into it (if you want to try to include Cmstorm support)
http://i.imm.io/CxMs.jpeg
http://i.imm.io/CxMx.jpeg
Darn, they got to ruin our fun again! I guess I'll have to just print my own or something. Chalk up another tiny difference.Here's a picture of my CMstorm controller.
As you can see, it's pretty similar in size/shape to filco. I still don't know about the matrix, though, I can to look into it (if you want to try to include Cmstorm support)
http://i.imm.io/CxMs.jpeg
http://i.imm.io/CxMx.jpeg
That is like a perfect copy of the Filco except they had to go and make the interfacing connectors different. Couldn't they just have made a proper rip-off =P I think it will be hard to fit the controller between the pins and the other edge of the PCB like I did. Perhaps there can be another CMstorm controller in the future if there is enough interest...
bpiphany, how much more would it be if we pay for SMD soldering at the factory?
How difficult would it be to program in something like a function layer?
I'm seriously considering getting one of these, even if I don't have a Filco at the moment.
Would shipping to Australia be a problem? I'll pay the extra shipping costs.
If not, then put me down for one :)
What the firmware does is entirely up to you, the only difference in an MXLock is that it has some mechanics that keeps the key pressed for you. How you make the firmware respond to that is entirely up to you.Great! Thank you.
The main keyboard PCB is just traces, diodes and switches (and 2 LEDs) in a matrix optimized for the Holtek controller. The atmega can deal with any matrix layout, not needing modifiers on separate traces to deal with NKRO.
Open the keyboard, unplug the old controller from the socket, plug this new one in, close it back up, and THEN play. :P
Open the keyboard, unplug the old controller from the socket, plug this new one in, close it back up, and THEN play. :P
There is no soldering required?
I might just have to get a Filco or 2 just to do this.
Okay. Well if there's no soldering I'm down to buy one. How much?
if there's an option to do the soldering myself (reduced or not, doesn't matter) i'd be all for it. i like getting my hands dirty.
I believe Hasu's firmware has very similar facility with layer switches also being real key presses under certain circumstances.
Are there already any decent firmwares out that could be linked in this thread? I'm interested but not sure what is already out that I could mess with.
I'd like to solder everything on myself as well.
I'm in for one for sure, and if these are compatible with the Quickfire Rapid, I'm in for 3.
No QF Rapid, they made the connection to the main board 2 double-row headers instead of 2 single row headers. grrrrrSorry 'bout that...
Yeah I'm for sure in for one. Could give my board different language layers.This may not be as easy as you might be thinking, unfortunately =P You are still tied down by the language map the OS is set to. The keyboard has nothing to do with how the OS decides to interpret key presses. If your OS for example is set to a US layout you will have a hard time getting for example åäöΩµn and the such. Those were actually all available in my Swedish layout. So if you can find one where all characters you are interested are at least hidden away on some layer already you could probably get it to work. Hacking your own layout on the OS side may be an easier way in this case. Or a combo of a custom language layout and a programmable controller of course ;D
Meh, I program for a living and though I've never done keyboard firmware I don't think it'll be that hard. Make two layouts and put them on separate layers. Have a keypress like shift+menu swap the layout. I mean, Korean keyboards have that by default, shouldn't be that hard.Yeah I'm for sure in for one. Could give my board different language layers.This may not be as easy as you might be thinking, unfortunately =P You are still tied down by the language map the OS is set to. The keyboard has nothing to do with how the OS decides to interpret key presses. If your OS for example is set to a US layout you will have a hard time getting for example åäöΩµn and the such. Those were actually all available in my Swedish layout. So if you can find one where all characters you are interested are at least hidden away on some layer already you could probably get it to work. Hacking your own layout on the OS side may be an easier way in this case. Or a combo of a custom language layout and a programmable controller of course ;D
Meh, I program for a living and though I've never done keyboard firmware I don't think it'll be that hard. Make two layouts and put them on separate layers. Have a keypress like shift+menu swap the layout. I mean, Korean keyboards have that by default, shouldn't be that hard.
Macro keys that send alt codes?Alt codes are for windows users :p
Macro keys that send alt codes?Easier just to send 0xf2 scancode. I don't ever use the menu key, I'll just map that to it.
Bpiphany: Have you thought about a CMstorm GB after this one? I can get some good measurements to see if that chip will fit with that extra row of pins. There are some other options of course.
It's actually not that hard. I did it after watching 2 vids on youtube :)
I think its safe to say that interest exceeded your expectations. Is there any chance of a price break?I was counting a bit low to start with, but yes parts will be a bit cheaper in these amounts. No one has actually paid yet though, and it remains to be seen how many comes through on that part. I will probably order ~100 PCBs. They are one of the more expensive parts of this build. I got all the tiny bits in huge amounts by now, and I think I will order the larger components for 25 units at a time. That way I can build and ship completed units spreading the spending and receiving of money a bit =)
Also, those SMD leads are awfully small. How on earth do you guys plan on soldering those by hand?The 0603 footprint, or 1208 in "metric" is just that 1.2x0.8 mm. They are the hardest part. Not so much because of they are hard soldering, more because they disappear if you look away for a second =P The TQFP package is 0.8 mm pitch, and that is wide and nice to solder. The SOIC is 1.27 mm pitch and just a breeze =D It takes some care lining them up but after that it is quick to hit all the pads.
JFC... I have a Weller WLC100 that I am pondering replacing with something a bit more modern. The Weller has issues retaining the tip and is a little slow to heat and the temp adjustment is brain-dead.I was considering this unit when I bought my soldering station. I looks spiffy =)
Where's the link to pay?
I will order components and build a number at a time. When I have completed units to sell I will ask for money. Building them all is going to take a while. Paypal is probably the most reasonable payment option for non-EU citizens. I think there are no transaction fees for inter-EU bank transactions, but I am not completely sure. Paypal transaction fees are ~3-5% depending on which country you send me money from, plus $0.30. I'll add you to the interest list.So, you are not only designing and making these yourself, you are also testing them before sending them out, and you're not asking for a dime until they're ready, and not only that, but you're charging a really inexpensive rate?
I'm going to order the PCBs on Monday. They will take ~14 days to arrive here and then I will start soldering, programming, and testing...
You are very kind guys =) I think the testing is going to be very quick. I'll just pop the new controller into a board, use that Aqua KeyTest, see that all keys register. Probably do some quick jabbing to see if any seem to behave strange. Soldering is going to be the time consuming part. There is a small margin to keep me out of trouble, but I'm working very cheap =D Even if I just took off with the potential 100 x $20 that would be a pretty lousy salary...
To be fair I'm sure a good handful of people would be willing to pay a little more for your hard work. An extra $5 to the total for those of which you put together can go a long way.I concur.
Would anyone else have any objections to paying that extra $5 for his hard work?
I might just have to up my interest check to 2 units too!Ditto.
You are very kind guys =) I think the testing is going to be very quick. I'll just pop the new controller into a board, use that Aqua KeyTest, see that all keys register. Probably do some quick jabbing to see if any seem to behave strange. Soldering is going to be the time consuming part. There is a small margin to keep me out of trouble, but I'm working very cheap =D Even if I just took off with the potential 100 x $20 that would be a pretty lousy salary...
If it's not surface mount, I could solder it myselfI think these almost have to be surface-mount.
I think that if you make a CM Storm you would get enough orders that you could tack on buying the keyboard since you dont have one onto the price and it wouldnt increase very much due to the amount demanded.
Why have the function layer arrow keys away from the right hand's home position? JKL, with I above it for your inverted T.I admit that its not perfect, it is still; a work in progress. I based it off of my Phantom layout which has a few more keys that make it much more effective. The Phantom layout is below.
You'd just need to shift that whole right side two keys to the left, then you wouldn't have to move your right hand over every time you wanted to use the arrow keys. Seems to make a lot more sense to me.
Ah... Okay, I didn't notice the right side Fn key. I assume you have the right side of the Fn layer there so you can use the arrows with one hand, but I find it pretty hard hold down the right Fn position with my pinky and use those arrow keys. Personally I think just using the Fn button opposite the side of the Fn layer you want to use and then having the Fn layer optimized for that is a bit cooler.
lol how do you just "lose" something big like a keyboard?
bpiphany, please post a status update before you start soldering. I'd like to solder my own if possible. Less work for you :)
Show Image(http://i.qkme.me/35cbi6.jpg)
Sky's the limit if you can code. Layers, macros, silly tricks with 2 LEDs.
Are there measurements anywhere? I'd like to know the exact dimensions of the PCB.
parallel pin headers, a pair of 2x?? but otherwise very much like the Filco. Just enough different to be incompatible.
found pic...
This is from OCN, so the drinking straw and random spooge around the switch and a missing switch are totally expected.
LOL. You people and your QFR's. Y U NO BUY REAL THING? Step up, son. Get yourself a Filco and welcome to the adult table. I have 5 Filco's.
I th8ink yiou get that grey color when the flatbed scanner isnt fully closed.
No, the Aikon firmware is not open.
I am working on an AIKON. Then all we would need to do is solder in the AIKON as a daughter board into a socket designed for that keyboard, if that makes sense. I'll hop on my desktop and draw something up quick in a bit...
Also, to flash firmware to Aikon, it requires installing some USB driver/library on 32-bit Windows (doesn't work on 64-bit Windows). Luckily I still have one old machine running 32-bit Windows 7.
Also, to flash firmware to Aikon, it requires installing some USB driver/library on 32-bit Windows (doesn't work on 64-bit Windows). Luckily I still have one old machine running 32-bit Windows 7.
Boo, I'll have to bust out an old machine or something.
Thanks for the video, didn't expect the tabs so that's nice to know.
I thought my leading questions were clear enough. Don't use the AIKON ;)Well what about just using Linux instead? Much easier to get a Linux distro up vs 32bit windows lol.
Also, to flash firmware to Aikon, it requires installing some USB driver/library on 32-bit Windows (doesn't work on 64-bit Windows). Luckily I still have one old machine running 32-bit Windows 7.
Well what about just using Linux instead? Much easier to get a Linux distro up vs 32bit windows lol.
It's not that the KB needs a 32bit host... it's that the driver to talk to it with the programming software requires 32bit Windows. Which Linux is not.
Can we order a DIY kit?
What's the difference in arrival times between pre-soldered and DIY?well its SMD probably not the best type to start learning on.
Also, would this be possible for someone with knowledge of soldering concepts but no soldering experience? Specifically is there any way to go about figuring out what to do?
This is going to be my firmware dev/test platform :)any interest in programing my layout then?
The goal is a pretty flexible firmware, since my GUI is already working with the phantom branch of bp's firmware I'm pretty sure compatibility with this branch is already there. Mapping a layout will be no big deal. Where I'm interested is in layers and PC->keyboard communication.Yes i need a layer and not of the toggleable variety one where you have to hold the Fn key if you know what I mean.
Yeah, I intend on both 'settable' and `Fn` style layers.
Guess I should start asking for money.
I think this video will be helpful if you haven't opened up a Filco before.
bpiphany, might want to add it to first post ;D
Every one who wants one so far will have one =)
Haven't actually tried the case top to see if it fits yet.. That would be fun if it didn't, but it would also be very surprising. Haven't got it here at the moment either =P
I am excited as well. And man, everyone has moonprismpwr avatars... gotta get mine done soon.
Might I ask, how did you get it first? I was under the impression bpiphany was going to work down the list from the top...
nsfw, porn:(http://www.robotvsbadger.com/wp-content/uploads/2010/11/meme-tshirts.png)Show Image(http://puu.sh/1fqQO)
\o/
Now I'll just have to program this beat, but that'll have to wait until tonight, probably.
fruktstund: Did you try closing the case? I noticed my controller is a little bit higher than the stock one. It fit just perfectly in my case. Hopefully the Filco tolerances are tight.. Otherwise there is room to sand away some PCB material to make it fit. There is nothing important that close to the edges =)Yeah, I managed to close it. I had some problems closing the case, but I think that was more because of my inexperience when it comes to closing Filco cases. First time actually!
YAY!
Quickie question: Two of the legs of the controller is supposed to not be used, right? I don't see any pads where you would solder them to anyway, so I guess they are supposed to be that way. Just wanted to make sure.
Probably the first time ever living in Sweden is good when it comes to keyboard stuff. :>fruktstund: Did you try closing the case? I noticed my controller is a little bit higher than the stock one. It fit just perfectly in my case. Hopefully the Filco tolerances are tight.. Otherwise there is room to sand away some PCB material to make it fit. There is nothing important that close to the edges =)Yeah, I managed to close it. I had some problems closing the case, but I think that was more because of my inexperience when it comes to closing Filco cases. First time actually!
It didn't even occur to me that the controller might be too high, but it certainly didn't feel like it was the controller that was making me have problems with closing the case. Maybe it was though, I'll notice next time I open and close the case. :)
Now I just need to know how to program this thing, and I'm pretty sure I saw you writing somewhere about it, but I can't find it. I guess I can find the source on GitHub at least?
Reverse engineering the matrix is the easiest part. Only takes a Teensy++, a bunch of wires, and some patience.. After that, and with the appropriate firmware, you just punch away on the keys and let the engineering do itself =D
Reverse engineering the matrix is the easiest part. Only takes a Teensy++, a bunch of wires, and some patience.. After that, and with the appropriate firmware, you just punch away on the keys and let the engineering do itself =D
That's true. Anything else on the headers? I assume vcc, gnd, usb D-/D+, outputs for status leds, plus all the rows and columns for the keys. Anything else I'm missing? Are you planning on releasing a schematic for this?
Also if you are still taking down people interested in buying one the filco board please add me to the list.
nsfw, porn:Show Image(http://puu.sh/1fqQO)
\o/
Now I'll just have to program this beat, but that'll have to wait until tonight, probably.
Does it come pre-programmed?
Does it come pre-programmed?
It should.. And if it doesn't I missed testing it as well.. But I think I got my workflow pretty clean =)
And general information: I'm working my way down the interest list. Sending out a couple of PMs every day or so. Meaning if you don't answer reasonably soon, other people will skip you in line. No worry though, everyone who has spoken up so far will have theirs eventually. I still haven't got the big heap of header pins from ebay. It's been quite some time now, and it can be ordering from China... Other components is not a limiting factor (except the PCBs of course, 150 of them).
The firmware doesn't do much of course, just mimics the Filco, with an additional double-shift-kill-switch...
(Attachment Link)
Hope that doesn't spill anything too private.. Date stamped Tuesday =)
Here is the current code at github for now https://github.com/BathroomEpiphanies/HID-Liberation-DeviceWoohoo, I'll check it out!
Now I need to do some other stuff...
Edit: And also the very start of the guide for the DIY kit... http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions
White backplate?It's from a pink Filco, so yes, it comes in white. Maybe the white Filcos also do, but I have no idea really. <: Seems kind of reasonable though.
Is there a filco that comes with that or did you color it yourself?
I uploaded the schematic here http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions at the very end. It's not quite correct. It used to be two separate files for the matrix and the controller parts. I just merged them, so there is some overlap, and I am not exactly sure which columns 1-18 A-R that should be paired up. But that is the general idea.
And yes, rows, columns, LEDs, and USB connectors should be all there is to it.
Glissant, are you going to try to do SMD soldering with standard iron with small tip or do you have a hot air station?
1. this is awesome. Huge props to bpiphany
2. Sadly, its been years since i messed with microcontrollers
1. Anybody dig up that Atmel bootloader for windows? Ideally one that works with windows 7
2. to turn C->hex, i assume i need to run the makefile through a compiler... For those of us who have become lame javascript coders, what is an easy compiler to install and run on windows
3. Didnt see a micro USB port on the chip. I assume im going to need a USB -> serial pin adapter. Any ideas?
4. Is the best way to deal with the code to mess with the matrix or to dabble with the main? OK, i assume this question is answered by some post/wiki on teensy.. can someone link it up in this thread?
I figure these are all questions that other people are wondering as well. Thanks for being patient with me.. its been about a decade since i could do this stuff.
Glissant, are you going to try to do SMD soldering with standard iron with small tip or do you have a hot air station?
When I find the time I will be trying to SMD solder with a standard iron with small tip. I bought it as a learning tool =).
Aha! I notice the thread title has changed from [Interest Check] to [GB]. Good things ahead!
:D
Thanks for helping me out on that Reaper =)
BOARD = hib_liber
LAYOUT = ansi_iso_jis
MCU = atmega32u4
F_CPU = 16000000
B_LOADER = \"jmp\ 0x7000\"
make clean; make
And to flash the firmware to the controllerdfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash avr_keyboard.hex
dfu-programmer atmega32u4 start
1. Get "Make for Windows"
a. Download this http://sourceforge.net/projects/gnuwin32/files/make/3.81/make-3.81.exe/download?use_mirror=iweb&download=
b. Install it, preferably to C:/GnuWin32/
c. Open the Control Panel
d. Select System
e. Select Advanced System Settings
f. Go to the Advanced tab
g. Select Environment Variables
h. In the lower box, called System Variables, scroll down and find "Path"
i. Click Edit...
j. In the Variable value box, go all the way to the end. If there isn't a semi-colon, put one. After the semi-colon add C:\GnuWin32\bin or wherever you actually installed it to plus an extra \bin at the end.
2. Get WinAVR
a. Download this http://cmtk3.webring.org/l/rd?ring=avr;id=59;url=http%3A%2F%2Fwinavr.sourceforge.net%2F
b. Install it and when you do make sure to leave the "Add directory to PATH" option enabled (it's on by default)
3. Get the source code for the keyboard
a. Download this https://github.com/BathroomEpiphanies/AVR-Keyboard/zipball/master
b. Extract it somewhere easy to get to
c. In the folder, open "Makefile" with a text editing program. The regular Windows Notepad seems to butcher the formatting, but WordPad works fine if you don't have anything else. If you're looking for something a bit better, you could try downloading and installing Notepad++ http://download.tuxfamily.org/notepadplus/6.2/npp.6.2.Installer.exe
d. Find this line and remove the word "end" from it
build: avr_keyboard.hex avr_keyboard.eep end
e. Find this line and remove the words "end" and "clean" from it
.PHONY : build hex eep end clean
f. Remove these two whole sections (all they do is delete the .dep folder that will be created later on, which you can do manually if you want)
end:
@echo
find . -regextype posix-awk -regex \
"(.*\.cof|.*\.elf|.*\.map|.*\.sym|.*\.lss|.*\.o|.*\.lst|.*\.s|.*\.d|.*\.i)" \
-exec rm {} +
rm -rf .dep
clean:
@echo
@echo Cleaning everything:
find . -maxdepth 1 -regextype posix-awk -regex \
"(.*\.hex|.*\.eep|.*\.cof|.*\.elf|.*\.map|.*\.sym|.*\.lss|.*\.o|.*\.lst|.*\.s|.*\.d|.*\.i)" \
-exec rm {} +
rm -rf .dep
4. Make your custom keyboard layout
a. Go to the folder hid_liber and open ansi_iso_jis.c in a text editor.
b. This is where you can rebind your keys. For example, you can replace KEY_A with KEY_Z or whatever you wish. For those interested in layers, it isn't covered in this tutorial, this just deals with basic changes.
c. Save the file when you're done.
d. Go back to the main folder (that contains the file called "Makefile"). Hold Ctrl+Shift and right-click in the folder.
e. Select "Open command window here".
f. Type "make" and press enter. You'll now have a new avr_keyboard.hex file in that folder.
5. Install FLIP (the ATmega32U4 programming tool)
a. Download this http://www.atmel.com/Images/JRE%20-%20Flip%20Installer%20-%203.4.7.112.exe
( alternatively, if you already have a Java runtime environment installed you can get this instead http://www.atmel.com/Images/Flip%20Installer%20-%203.4.7.112.exe )
b. Install FLIP.
6. Install the bootloader driver
a. Plug in your keyboard.
b. Press both shifts. Windows will detect the bootloader but will fail to find drivers for it. Note that this will probably make your keyboard and mouse inputs weird because it thinks you're still holding down shift. For me I found the easiest way to fix this is to press the Windows button and write "keyboard" in the search box then open the "On-Screen Keyboard" program. Typing anything while it's open seems to fix it.
c. Open the Control Panel.
d. Select Device Manager and you'll see the bootloader listed among the devices.
e. Right-click on it and select Update Drivers.
f. Browse to where you installed FLIP and there is a folder called "usb" inside of it. Point the driver updater to that.
7. Loading the hex file to the keyboard
a. Run FLIP (you'll have a shortcut on your desktop if you chose that during install).
b. Press the first icon from the left (looks like an integrated circuit) or you can pick Device > Select from the menu.
c. Select ATmega32U4 from the list.
d. Press the second icon from the left (looks like a USB cable) or you can pick Settings > Communication > USB.
e. Press Open at the prompt.
f. Press the third icon from right (looks like an arrow pointing at an open book) or you can pick File > Load HEX File.
g. Browse to avr_keyboard.hex which we made in step 4.
h. Press the Run button at the bottom left. You're done! Disconnect and reconnect your keyboard and enjoy.
Damn, I pay $60 for 12/2 and that's in the top tier around here.I pay $60 for 3/1 because monopolies suck. I'm too far from the college campus to get a cantenna working.
Bpiphany, why did you poke the atmel chip during the soldering video?Just to release it from the tweezers. I need to force them to go that far apart, and I just don't want to crook the orientation pulling them off =)
Got these in today :D . My goodness some of the components are smaller than I thought. Props to you bipiphany for being able to do SMD soldering with just an iron. How long did it take you to solder each one? I'll start playing around with the programming when I have time. Here are some pics in the meantime.I would like to say that I am able to squeeze out 4 an hour when I am up to speed, but it's probably closer to 3... It takes some extra time doing the final steps and inspection and corrections. Packaging, keeping track of payments, and such also takes some time in the end.
They come soldered, unless you request for one unsoldered. All you have to do is pluck the stock filco controller off and plug this one in, so soldering required.
Got mine today. Realy nice packaging and quick shiping.
Yes, it should work with a Filco Camo. As far as I know the only difference between a Camo and a normal Majestouch 2 Filco is the case.
I didn't have time to mess with reprogramming yet, but one thing I noticed is that when holding both shifts down and pressing a few other keys, the keyboard disconnect from the computer and is no longer recognized or responds. Unplugging and replugging the USB cable back in reboots the keyboard to working condition again. Is this normal or a bug in the firmware?
I changed that on mine since I would probably accidentally hit both shifts at some times. I have mine set to both controls, both alts and both shifts all together. :)I like that definitely not going to accidentally do that.
:( still haven't gotten a pm about getting some :( but its cool ive got some other projects at the moment also
Thanks just got the pm you can leave the headers off mine if you want as i can easily solder those on but I have nothing to do SMD otherwise i would have done that too.:( still haven't gotten a pm about getting some :( but its cool ive got some other projects at the moment also
Let's do that today then ;) I should be able to start putting headers onto the units I've got almost ready tomorrow. Then shippings can resume again. Disregarding the ones lacking headers, I've either soldered or made DIY kits of 99 of the PCBs (Soldered most of them...).
Thanks just got the pm you can leave the headers off mine if you want as i can easily solder those on but I have nothing to do SMD otherwise i would have done that too.
http://tinyurl.com/jp2vl
What does SMD mean? One of the UrbanDictionary definitions says "so many dinosaurs" but it doesn't really fit the context here.
We need some place to talk about your firmware, bp... There are some things that I don't have enough know-how to deal with that it would be nice to share and get opinions on, makes no sense to do it in this thread.I don't know what kind of resources there are on github to discuss, I didn't see any forum at a quick glance. But I guess a thread here would do as well. I've started some wiki pages regarding the controller on the deskthority wiki.
That said, I've crashed the KB a number of times with the way I type. Something about the right shift and an all-caps word or phrase. Haven't pinned it down yet, for all I know I am transitioning from the left shift to the right fast enough to hit the bootloader.This reboot condition can be changed quite easily, to include more keys, or to something completely different. Or just remove it altogether and use the magnet switch to reset the controller.
I think that my space bar switch is causing an occasional double space.This I have experienced myself. With space in particular (only space actually I think), I don't know if the de-bouncing time needs to be increased perhaps.
Another interesting thing is that I can get the KB to register both Win keys and the Menu key as down by using them with the Alt-key. Either Alt can do it to any of the 3 Win/Menu keys. Hold Alt, press Win/Menu, release the Win/Menu, release Alt. This sticks the Win/Menu key. Releasing Alt before Win/Menu does not do this.Nothing like this ever happened to me as far as I know. Honestly I'm not using the latest firmware much. I should probably update my regular keyboard to use it as well to see if I can catch any bugs. Keys sticking in firmware sounds very odd in general, since they should be released by themselves very quickly if not registering as pressed. An actual hardware error (bad solder joint) wouldn't really explain it either. That should rather make the key flicker on and off. I would guess this is an OS issue (or OS-firmware compatibility issue at least).
If you want to check this out I suggest that you use Aqua's Key Test.I still suggest using a proper OS ;) No, seriously, that seems odd, and of course it should work on all OSs. I haven't experienced anything like that myself. I use the Gnome "Show Layout Chart" for testing purposes.
Are there any of these HID Liberation Devices still available, I am interested in getting a couple if the postage to Australia is not to much.
Cheers,
kb_jockey
If you want to check this out I suggest that you use Aqua's Key Test.I still suggest using a proper OS ;) No, seriously, that seems odd, and of course it should work on all OSs. I haven't experienced anything like that myself. I use the Gnome "Show Layout Chart" for testing purposes.
Postage to Australia is the same as every other non-EU country =) But I am seriously considering only sending out units to the ones that made it onto the list (which is no longer available online, but safe on my computer...). I need to redesign this to use automatic production. It's taking way to long for me to do it by hand. And there are other keyboard models which would be interesting to support as well. I at least need some sort of break from producing more units. But I've got material to produce more than the interest check was for. Although people are ordering more than they said. I've already sent out more than what was asked for ;)
Filco TKL only
From BP's git the phantom and this are the same thing. Just a different matrix config file.Alright thanks for the quick response shouldnt be too hard then to get Tranquilites working on this as well
So...I know you just finished the Filco controller and all, but are you planning on doing a QFRapid Controller? If not, may we get the Gerber files to modify the Filco controller?
So...I know you just finished the Filco controller and all, but are you planning on doing a QFRapid Controller? If not, may we get the Gerber files to modify the Filco controller?
A QFR one would be nice. Im sure there are s lot of people here with QFRs.
This should work with a Filco Camo right?
Lol just concentrate on driving!
Has anyone configured their board with multiple layers?will be working on this with tranquilite once i get my controllers.
Care to share any info how to do so?
Thanks!
Has anyone configured their board with multiple layers?will be working on this with tranquilite once i get my controllers.
Care to share any info how to do so?
Thanks!
Um, this was motionless with no typing. It's NOT a debounce issue. The same setup works fine 10 feet removed from the car and inverter.
so you'll only get one press due to emi per unit time instead of 500? hah!
ALUMINUM FOIL, ALARIC. TINFOIL HAT FOR YOUR FILCO
so you'll only get one press due to emi per unit time instead of 500? hah!I was considering this, but since it's in a car, you won't have earth, and the ground might not be clean enough for a proper faraday cage. Still, can't hurt. I'd back the tinfoil with tape so as to not short out the controller, then ground it to the case (Which should be grounded to the USB shield anyway) Since it's a laptop, it's all probably floating anyway, but sometimes you'll have to take what you can get.
ALUMINUM FOIL, ALARIC. TINFOIL HAT FOR YOUR FILCO
ering this, but since it's in a car, you won't have earth, and the ground might not be clean enough for a proper faraday cage. Still, can't hurt. I'd back the tinfoil with tape so as to not short out the controller, then ground it to the case (Which should be grounded to the USB shield anyway) Since it's a laptop, it's all probably floating anyway, but sometimes you'll have to take what you can get.
This is one reason why the Data911 KB's are grounded so well, I'm sure.
But the debouncing thing should work as well. The only downside I see is that you won't be able to register extremely quick keypresses, but I take that as a good substitute: You're not that fast.
I do like the magnetic switch for resets.
I'm interested in one also. Is it too late?
I'm still waiting :))
I'm very curious on how this shipment will come out. I definitely never shipped anything anywhere close to Vietnam before. I got one on its way to Indonesia as well =)
I'm very curious on how this shipment will come out. I definitely never shipped anything anywhere close to Vietnam before. I got one on its way to Indonesia as well =)
yeah, mine! no sight of it yet, though. anyway, before getting my hands dirty with it, is this thing brickproof?
'programming it' is a rather wide open question since technically you could write an entirely new firmware from scratch if you wanted to.I haven't started yet, but if anyone feel up to it, please help out on the wiki page =) http://deskthority.net/wiki/AVR-Keyboard
What is it you are trying to accomplish?
'programming it' is a rather wide open question since technically you could write an entirely new firmware from scratch if you wanted to.
What is it you are trying to accomplish?
The remapping is dead easy, recompiling afterward is harder.Roadmap.. that is software engineering talk. I hate software engineering =P I've been tripping over a "term paper" I need to write for a class on the subject for years now. And that is pretty much all I have left before moving onto my bachelor thesis. So I am designing keyboard PCBs instead =D That course was a joke all the way though. I've never done anything more pointless I think...
The LED thing... I'm not even going there until I have my key map stuff solid with layers and other fun stuff.
I added some info to the wiki page bp started at DT re: flashing the firmware, and there's also a version of this on the GH wiki now. http://wiki.geekhack.org/index.php?title=AVR-Keyboard
bpiphany - how do you want to handle changes to your firmware? Should people be sending patches? Is there a road map of stuff that you're already working on (or someone else is?) that will be rolled into the main branch?
I'm planning on re-implementing layer support this or next weekend. The firmware hasn't changed much from Teensy-Keyboard to AVR-keyboard so it shouldn't be that hard.you might be able to talk to hazu about that as he has all of that in his firmware.
Unfortunately we won't ever get the more fun features such as Media keys, mouse Mouse keys, and NKRO over USB until someone figures out how to modify all of the usb enumeration stuff located in usb_keyboard. Low-level USB stuff is black-magic to me.
I am inches away from having Hasu's code working.nice once yo udo think yuo could make a version for the phantom as well?
I dont think the rosewill has a removable controller...
He did release the schematic actually... it's in one of his DT wiki links.
Ok, so I just finished adding multiple layer support. You can find my fork of bpiphany's source here (https://github.com/Tranquilite0/AVR-Keyboard). Mapping different layers is pretty straightforward, but a few aspects could use an explanation anyway.
Unlike my previous layer implementation, the only place you need to change things is in the layout file (ansi_iso_jis.c for the Filco controller) where you can place the function key(s). I've also implemented the function key in a number of different ways:
KEY_FN_TOGGLE - Press to toggle between layer 0/1
KEY_FN_HOLD - Hold for layer 1, release for layer 0
KEY_FN_SWITCH - Mostly like FN_HOLD, but sends you to layer 8 when pressed, and returns you to the previous layer when released. This was made so that you can get to the KEY_FN_# keys which i placed in layer 8 which will let you switch to layers 0-7. Although you can place KEY_FN_# in any layer though make sure you don't make it so you can get stuck in a layer.
These function key implementations can also be mixed, though I don't really see much reason why.
Have fun!
PS. I haven't tested this on the custom Filco controller, but it works just fine on my Phantom.
PPS. I also added a windows batch file which will do the make clean operation, because I cannot in the life of me make WinAVR's find.exe work properly.
yeah, get it into the flashing mode by using a magnet.
why don't you just make a two-dimensional array out of the different layouts?I can see how using a 2D array would have have been an effective way of managing layers, but at the same time it wasn't very hard to implement it the way I did, so I'm not sure how much "easier" it would have been. Regardless, the code works well enough for me.
I think that would make it easier.
Three weeks since payment, still waiting...
@Tranquilite
I tried your layer implementation on the custom Filco controller and it doesn't seem to work. The keyboard is no longer recognized when using the hex file that is generated. There's little that I can offer in terms of debugging info though.
It's probably just homeland security installing their keylogger. You should flash a new firmware when it arrives...
Ill get to testing for you tranquilite on one of my filcos I hope for the best@Tranquilite
I tried your layer implementation on the custom Filco controller and it doesn't seem to work. The keyboard is no longer recognized when using the hex file that is generated. There's little that I can offer in terms of debugging info though.
That's very strange, it works just fine for my phantom, and I didn't do anything to the hid_liber specific parts of the code except add more layer arrays. I don't own a Filco either, so I really don't have anything to go on at this point.
TMK has NKRO if you compile the pjrc branch. Then you need to enable NKRO with a double shift command, on my tab so I can't look it up. Of course double shift is also changeable.
I just sent out PMs to the last persons on my list. If you feel you haven't got a PM and should have been on that list you'll need to contact me. MechKey, you don't seem to accept PMs I haven't ignored you...
Edit: And by the way, I am heading out for the night. So don't expect to hear back from me too soon again =)
Paid :p
TMK, would you be able to put together a short how-to explaining how to build the firmware?
Thanks!
Just to clear up some possible confusion... the tmk firmware is hasu (http://geekhack.org/index.php?action=profile;u=3412)'s. As for how to... pjrc has a quickie on getting the right compiler installed here (http://www.pjrc.com/teensy/gcc.html)
tjweir asked for how to build the firmware. Your question is too vague to address, honestly.
1<<14 = 0b00000000000000000100000000000000
1<<15 = 0b11111111111111111000000000000000
1<<16 = 0b00000000000000000000000000000000
Not sure whether my question is stupid or not,
are there any leftovers?
This should work with a Filco Camo right?
Yep. Just installed one into a Camo. Works fine.
(Attachment Link)
will it work for KBT pure?
lol thanks man,will it work for KBT pure?
KBT Pure has the controller soldered to the PCB. This daughterboard fits ONLY on the Filco TKL.
If you are looking for a 60% keyboard with programmable ATmega32u4 controller, you will want to get in on the GH60 keyboard, once they are tested and into the group buy phase. You can see more about it here (http://geekhack.org/index.php?topic=34959.0).
And welcome to Geekhack! Say goodbye to your wallet. You are now broke.
Anybody have luck with V+ and V- keyboard calls? media keys and everything else are working...
Strange
Anybody have luck with V+ and V- keyboard calls? media keys and everything else are working...Im using firmware Tranquilite modified from Hazu's code for me and everything works here.
Strange
I still have the stock firmware on mine. *shame*It has NKRO if that way you mean i think it might only work over USB though which i believe is a standard feature of Hazu's firmware
Does Tranquilite's have support for PS/2? With the stock firmware it only works over USB.
... feature of Hazu's firmware ...
ok, that's 3 times in a row so it's obviously not a typo. Dude's handle is hasu not Hazu.me bad :( id get own wrong if hadnt been using it for years. hasu I apologise.
ok, figured it out.. usb hub was being weird.. Volume stuff works now..Idk i working on making my KPAD a macro pad though so ill let you know what i come up with.
this may seem silly.. but what else are people macro-ing up for their keyboards? Other than media keys and calculator.. im surprising out of ideas :-p Is it easy to macro application launches (i would suspect no)
App launches you would generally take care of in the OS, so AHK for Windows and whatnot.I did it on the KPAD pretty easily though it is a tad more easy to configre
Hey does anyone know the HID code for eject in OSX/Windows7?I thought eject was just F15 (or one of the F keys anyway) in OSX, though I could be wrong on that.
This commit seems to add EJECT HID usage.I like your software hasu, and I just wanted to say thanks.
I don't know how this works in actually in windows/ osx.
https://github.com/tufty/tmk_keyboard/commit/97d7ca33cea562291429bd0536850a4eb20d2a00
This commit seems to add EJECT HID usage.
I don't know how this works in actually in windows/ osx.
https://github.com/tufty/tmk_keyboard/commit/97d7ca33cea562291429bd0536850a4eb20d2a00
My PC motherboard is weird. When it boots, I can't choose anything on the GRUB menu (which OS to boot) using a USB keyboard. Only PS/2.I recommend going into the bios and turning on "legacy keyboard support", or "legacy USB support". If either of those two options are already on, then try turning them off, if that doesn't work/those options are not available, then proceed to get a new computer :P
This commit seems to add EJECT HID usage.I like your software hasu, and I just wanted to say thanks.
I don't know how this works in actually in windows/ osx.
https://github.com/tufty/tmk_keyboard/commit/97d7ca33cea562291429bd0536850a4eb20d2a00
Do you know how hard it would be to add macros? Defining a string, and then make a key press activate a function which outputs the string, character by character, with at a 50ms interval or something?
My friend figured out how to add in the eject for OSX. It's the 16 bit consumer code 0x00E9. He added it as KC_EJECT. We haven't tested it in Windows yet so we'll see about that.
I've also added profiles to the firmware. Basically it just enables you to switch to different permanent layouts with their own set of layers.
Better explanation:
[
// Default Profile 0
[default layer 0, layer 1,..., layer 7],
// Profile 1
[default layer 0, layer 1,..., layer 7],
.
.
.
// Profile N
[default layer 0, layer 1,..., layer 7]
]
The fork on github is https://github.com/callenrosario/tmk_keyboard. It's not finished and it only works for the HID Liberation so far (still need to refactor some code and fix the other firmwares).
Thanks. I'll looking into your repository later.
0x00E9? You mean 0x00B8 in report.h?
Looking HID usage specification I'm expecting a code for eject should be 0x00B8 or 0x00CC.My friend figured out how to add in the eject for OSX. It's the 16 bit consumer code 0x00E9. He added it as KC_EJECT. We haven't tested it in Windows yet so we'll see about that.
I've also added profiles to the firmware. Basically it just enables you to switch to different permanent layouts with their own set of layers.
Better explanation:
[
// Default Profile 0
[default layer 0, layer 1,..., layer 7],
// Profile 1
[default layer 0, layer 1,..., layer 7],
.
.
.
// Profile N
[default layer 0, layer 1,..., layer 7]
]
The fork on github is https://github.com/callenrosario/tmk_keyboard. It's not finished and it only works for the HID Liberation so far (still need to refactor some code and fix the other firmwares).
I've ween working on 'new keycodes' this several weeks to support new features including macro like you described. But I'm being stuck for a while and struggling now.
Recently I came across this very neat firmware for kinesis project which already has fancy features like macro and mousekeys and full programmability with virtual machine. Porting the firmware to this controler might be very interesting.
http://geekhack.org/index.php?topic=37991.0
God job =) Nice to see someone else build one for a change... First one I know of to have done it. I think I am up to at least 100 by now. To me the ATmega is no problem at all. I just point solder them 2 leads at a time. There is a video somewhere.. The crystal on the other hand wasn't even designed to be hand soldered. I would say that is the trickiest part.
I don't suppose there are any more of these laying around? :)
Just flashed to hasu's firmware with Index's profile addition and it works great. I've got a profile for Colemak and for Qwerty that each have a function layer similar to this:
Ignore the Esc and `~ which were there for first layer on 60% keyboard layouts. I also added media keys to the arrows and lower 3 of the sixpack.
The only thing that doesn't seem to be working for me of what I've tried is KC_PEQL which is the numpad equals key. The rest of the numpad keys seem to work fine. I actually used regular numbers instead of numpad numbers in the embedded number pad because then I can also hold shift to get the symbols associated with them (!@#$%^&*().
I'll put up a little tutorial for people who are daunted by fiddling with this kind of stuff. Hopefully late tonight when I get back from work, otherwise this weekend. I have a feeling that most people aren't really making the best use of the HID Liberation device because they aren't playing with the firmware. I certainly know that I wasn't until just now.
Show Image(http://i.imgur.com/gZSkp.png)
diff --git a/keyboard/hid_liber/keymap.c b/keyboard/hid_liber/keymap.c
index 55fe872..e0ba1e7 100644
--- a/keyboard/hid_liber/keymap.c
+++ b/keyboard/hid_liber/keymap.c
@@ -136,7 +136,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, INS, HOME, PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, END, PGDN, \
FN1, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, \
- LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, \
+ LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL, LEFT, DOWN, RGHT),
/* EXAMPLE ISO keymap, see the NUBS and NUHS keycodes
@@ -172,7 +172,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9,MUTE, VOLD, VOLU, BSPC, INS, HOME, PGUP, \
TAB, Q, W, E, R, T, Y, U, I,MSTP,MPLY, MPRV, MNXT, MSEL, DEL, END, PGDN, \
FN1, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, \
- LSFT, NO, Z, X,CALC, V, B, N, M, COMM, DOT, SLSH, CAPS, UP, \
+ LSFT, NUBS, Z, X,CALC, V, B, N, M, COMM, DOT, SLSH, CAPS, UP, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL, LEFT, DOWN, RGHT),
And I believe this firmware will also work on ANSI keyboard without problem, can someone try?
Plz let me know the result, your layout and OS.
Thanks in advance.
http://i.imgur.com/MdvRd.png
Then I remove and add those places in the key map tables further down where they are assigned their values, so that the rows aren't shifted one place to the left/right.
* Tenkeyless keyboard default layout, ISO & ANSI (ISO is between Left Shift
* and Z, and the ANSI \ key above Return/Enter is used for the additional ISO
* switch in the ASD row next to enter. Use NUBS as keycode for the first and
* NUHS as the keycode for the second.
on lines 91-94 of https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hid_liber/keymap.c (https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hid_liber/keymap.c)I had helped 4LI4Z out with an ISO board and used the 2 non-US codes listed in your keycode.h. He reported back that it worked fine. This is why I sent you this:Code: [Select]* Tenkeyless keyboard default layout, ISO & ANSI (ISO is between Left Shift
on lines 91-94 of https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hid_liber/keymap.c (https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hid_liber/keymap.c)
* and Z, and the ANSI \ key above Return/Enter is used for the additional ISO
* switch in the ASD row next to enter. Use NUBS as keycode for the first and
* NUHS as the keycode for the second.
as part of the last update I sent.
I don't know what you did exactly. Can you post patch or your repository URL?
http://i.imgur.com/MdvRd.png
Then I remove and add those places in the key map tables further down where they are assigned their values, so that the rows aren't shifted one place to the left/right.
I had helped 4LI4Z out with an ISO board and used the 2 non-US codes listed in your keycode.h. He reported back that it worked fine.
KEYMAP(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR, SLCK, BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, INS, HOME, PGUP, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, NUHS, DEL, END, PGDN, \
CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, \
LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, \
LCTL, FN1, LALT, SPC, RALT, RGUI, APP, RCTL, LEFT, DOWN, RGHT),
One of these just showed up at my door today! October 22, 2012 to January 12, 2013... Twelve weeks.
biphany definitely has some.
BTW biphany, did you build all of them with reed switches? I can't remember if mine had one or not, but the magnet doesn't seem to be working.
BTW biphany, did you build all of them with reed switches? I can't remember if mine had one or not, but the magnet doesn't seem to be working.
Well, I bricked my controller...
Used the magnet to get it into boot mode and Flip was able to erase the device but refuses to program it. Has anyone successfully programmed theirs?
Update: 2012-10-20
Group buy is sort of closed. Asking for order confirmations at the moment. Half of the ordered PCBs have been built into complete controllers. There may be left overs after all interested have been supplied.
A wiki page with instructions for the controller have been created at http://deskthority.net/wiki/HID_Liberation_Device_-_Instructions
There is also another one with solder yourself instruction, with a name confusingly alike http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions
Please contribute there if you've got information to share =)
What is this all about?
Ever wanted your Filco tenkeyless to have a programmable controller? Thought it sounded a bit insane to build a Phantom only for this reason? What if you could just simply replace the stock controller daughter board in your keyboard with a programmable one? Why not I say.
With this replacement daughter board you will basically have a Teensy that plugs conveniently into your Filco tenkeyless. There are a number of different keyboard project with code running on the Teensy that should be easily adopted to work with this controller.
The ATmega32u4 chip
This is the same chip as on the Teensy2.0. It is a 16MHz 8-bit AVR from Atmel.
It has 32kB of flash to hold the bootloader, firmware code and key matrix information. The flash memory is read only during normal operation, so it can only be altered when loading code onto it through the bootloader. Both the stock bootloader from Atmel and the open source bootloader from LUFA take 4kB of the flash memory. The very basic code for the Phantom with one single layer key matrix takes almost 9kB. This leaves more than 18kB for custom layers and macros or whatever.
There is 2.5kB of SRAM memory, this is used to run the program and store variables during runtime. It is like normal RAM memory erased when the power is cut.
There is also 1kB of EEPROM memory available, this can be used to store data when the power is off. So any recorded macro or on the fly remappings should be stored here.
Flashing the firmware
Almost all code for AVRs you will find is written in c and compiled to hex files. It is these hex files that are flashed to the chip. The flashing is done through a program running on your computer, talking to the chip via the bootloader. I haven't tried this in Windows but there are applications to do this that should be easily maneuvered. I will look into this and make sure there are no problems. In Linux I've got everything under control.
The TeensyLoader that the Teensys use will unfortunately not be available since that is PJRC proprietary. This is only a slight drawback. It may be more user friendly, and their bootloader is much smaller, but all in all this doesn't make a big difference.
Compatibility
I have based this design on my "gen2" Filco tenkeyless. I believe there are no differences compared to the "gen1" keyboard except the higher quality PCB. Electrically everything is the same. I cannot guarantee that it will work for everyone though since there may be differences I don't know about. If your keyboard turns out to be incompatible this would of course be handled somehow. Passing it on to someone else for example, or in the worst case returning it for a refund.
The Filco main PCB that I have reverse engineered is a "gen2" marked "CST-F87/88/89/91-MB V1.1" 2010-11-09, and the controller is marked "Tenkeyless PCBA Rev 2.1-ESD" 2010-08-24.
There are pictures of the stock controller in this thread http://geekhack.org/index.php?topic=6557 (http://geekhack.org/index.php?topic=6557)
Pricing
Pre-soldered controller $20
Solder yourself kit $20 (free shipping)
Shipping $4
Shown interest:
I've got all names as of 2012-10-20 stored away. Still sending out PMs a couple a day.
I have based this design on my "gen2" Filco tenkeyless. I believe there are no differences compared to the "gen1" keyboard except the higher quality PCB. Electrically everything is the same. I cannot guarantee that it will work for everyone though since there may be differences I don't know about. If your keyboard turns out to be incompatible this would of course be handled somehow. Passing it on to someone else for example, or in the worst case returning it for a refund.
The Filco main PCB that I have reverse engineered is a "gen2" marked "CST-F87/88/89/91-MB V1.1" 2010-11-09, and the controller is marked "Tenkeyless PCBA Rev 2.1-ESD" 2010-08-24.
Any of the pre-soldered ones left? How do I actually fit this to the keyboard? Is it just a case of plugging it in?
I'd get a pre soldered as well... Also, how hard would it be to solder? I kinda need one as my controller died. :( I also need a new pcb, where can I get one?
I'd get a pre soldered as well... Also, how hard would it be to solder?
I'd get a pre soldered as well... Also, how hard would it be to solder?
I've done 4 of them, and it's pretty hard... especially if you don't have a good iron and a really small tip and precision tweezers. Mine have all worked, but they haven't looked as pretty as the one bpiphany did that I also have. :)
there still are components for about ten controllers left. I don't really feel like doing more soldering myself. It takes me too long. But kits are available, and if someone wants to buy the lot for building and passing them on I'm sure we can agree on a good price for them.
I have an 888D and a 0.2 mm tip... I was looking at a phantom PCB... Would it fit a QFR case? I have a custom plate, so that's not needed.
Anyone got a spare one that they can sell already soldered?
So how does the flashing procedure go from start to finish?
bpiphany was nice enough to flash a default firmware so you can plug it in and start using right away. But since he doesn't have anymore presoldered ones, you're SOL :p
I would actually be able to flash the loose chips if I was kind enough. I have an adapter board that holds the ATmega chips =) I just didn't think about that with the DIY kits... And the whole idea is to flash new things onto them anyway.
WhiteFireDragon bought the DIY kits I had left. I have a couple of extra PCBs without components. I need to keep some myself for reference, but in a pinch it would be possible to squeeze a few more controllers out...
6. Install the bootloader driver
a. Plug in your keyboard.
b. Press both shifts. Windows will detect the bootloader but will fail to find drivers for it. Note that this will probably make your keyboard and mouse inputs weird because it thinks you're still holding down shift. For me I found the easiest way to fix this is to press the Windows button and write "keyboard" in the search box then open the "On-Screen Keyboard" program. Typing anything while it's open seems to fix it.
c. Open the Control Panel.
d. Select Device Manager and you'll see the bootloader listed among the devices.
e. Right-click on it and select Update Drivers.
f. Browse to where you installed FLIP and there is a folder called "usb" inside of it. Point the driver updater to that.
I might not be able to re-program it... When I was on the stock firmware, I was tired of entering that weird bootloader mode when I mistyped question mark by hitting both shifts, so I modified config.h. I changed MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) into becoming MOD_BIT(KC_ESCAPE) | MOD_BIT(KC_PSCREEN) | MOD_BIT(KC_SCKLOCK) | MOD_BIT(KC_PAUSE) because I thought making the key combo more complicated would make it harder for me to accidentally press it. But now, when I hit the new combination, nothing seems to happen. Anyone see how to fix this issue?
bool curr_bit = *row_pin[row] & row_bit[row];
should be changed tobool curr_bit = rows & (1<<row);
I'm not sure that it worked - I brought it back home to the original computer I flashed it on + one more machine (Windows Vista), and somehow it didn't work (even though it was fine before). Then, I re-made it with the new matrix.c, and got the same result.
I also tried re-seating the controller, thinking maybe the commute did something to it, but still nothing seemed to happen.
cgbuen, I'd like to comfirm your situation correctly.
You mean, your keyboard didn't work even before you flased new firmware? Or it got into not working after you flashed?
Old firmware without my fix sitll works on your keyboard?
cgbuen, I'd like to comfirm your situation correctly.
You mean, your keyboard didn't work even before you flased new firmware? Or it got into not working after you flashed?
Old firmware without my fix sitll works on your keyboard?
It worked properly when I first flashed it at home for a couple of days. But somehow when I took it to my office, it stopped working, and it stayed broken when I brought it back home (even after trying to re-flash with old and new versions).
Thank, cgbuen. I'm not sure your problem was caused by hardware or my firmware. maybe hardware?
OK. Now, I'd like to ask someone else to confirm whether the latest firmware(with my fix) works or not. Can someone check it?
How do I reset this thing to a stock ANSI layout?
How do I reset this thing to a stock ANSI layout?
flash the firmware that is in github that should be the stock ansi layout
How do I reset this thing to a stock ANSI layout?
flash the firmware that is in github that should be the stock ansi layout
You're gonna need to break that down a little more simple. Github?
I had tried to install FLIP on Windows first but when I ran into problems tried moving to Ubuntu. However, trying to install it there proved even more troublesome and I ended up coming back to Windows. Here are some instructions to get people started:
1. Go to http://www.atmel.com/tools/FLIP.aspx and download FLIP. For most people you'll want the 2nd one on the list which is "FLIP 3.4.7 for Windows (Java Runtime Environement included)".
2. Install FLIP.
3. Plug in your keyboard and press both Shifts. Windows will detect the bootloader but will fail to find drivers for it. (@bpiphany Assuming it's not super obvious when we look at... whatever it is we use to configure this, could you inform us how to change this to something even more obscure? Sometimes I'll press both shifts for a split second when I realize I'm holding down the "wrong" shift, i.e. not the one opposite to the key I need to press so I switch to hit the other and may accidentally hit both)
4. Go to Device Manager and you'll see the bootloader listed among the devices.
5. Right-click on it and select Update Drivers.
6. Browse to your FLIP folder and there is a folder called "usb" inside of it. Point the driver updater to that.
7. Run FLIP (you'll have a shortcut on your desktop if you chose that during install).
8. Press the first icon from the left (looks like an integrated circuit) or you can pick Device > Select from the menu.
9. Select ATmega32U4 from the list.
10. Press the second icon from the left (looks like a USB cable) or you can pick Settings > Communication > USB.
11. Press Open at the prompt and you're connected!
Now if someone can give me a hint about how to actually setup the hex files to load onto it I'd be happy to hear it! :D
If you're feeling super generous and just want to set up a Colemak layout file for me, even better! http://colemak.com/ (just the letters and caps lock to backspace are different relative to Qwerty)
Edit: Looked at the Github repo for this, saw the makefile and was thinking to myself, "woohoo, this should be easy!"
I moved over to Ubuntu, fiddled with the avr_keyboard.c file and changed the keys I needed easily enough and tried to run make... but alas no, I need avr-gcc which has several dependencies which have dependencies of their own! http://www.nongnu.org/avr-libc/user-manual/install_tools.html
I was working through them slowly but at the very end I had a version mismatch and was consumed with sadness! Might have a stab at this again a bit later, but easy answers would be nice as well!
I get an exception saying that Flip can't connect.
If Windows would let me install the driver, I'd be done. :|
Does the magnet trick reset the whole thing so it's stock ANSI?
I may try that... Do I just hold a magnet up to the glass diode?
Nothing but direct commands from flip will erase the firmware. The magnet simply tells the controller to reboot into the bootloader and wait for further commands. You then use flip to load in a new firmware.
It sounds a whole lot like you installed a chip-compatible firmware that was compiled for a different matrix.
"The program can't start because libusb0.dll is missing from your computer. Try reinstalling the program to fix this problem".
Good news. Pressing caps lock activates 3# so the trace and switch work, it's just mapped differently.
If only I could get this to work.
Good news. Pressing caps lock activates 3# so the trace and switch work, it's just mapped differently.
If only I could get this to work.
Magnet got me working the boatloader.
Flashed the new hex without a hitch.
Problem? Caps Lock still doesn't work. I don't know what to do anymore.
Hold down the caps and hit the right shift. If this turns on caps, you are running my map which appears to be the stock hid_liber map for tmk if you don't change anything at all.
Trying to load the ANSI_ISO_JIS.hex ends up with a "Invalid HEX file syntax" and if you try to run it, it runs through everything fine until the VErify portion and says Verify device fail at 0x00000
Good to see you got all that figured out without me getting involved =)
I have it, yes. Just don't want to open up the casing :( Do I have to get the magnet right over the controller or can I try it through the case? And do you have a pointer to Hasu's firmware / loader? Thank you!
Thank you! If I just flash those as they are, I will get a default Filco ANSI layout?
Okay I see a problem... I need to install a C compiler for Windows, right? "'make' is not recognized as an internal or external command, operable program or batch file."
That link is not working. Trying to download that is. Just tried doing make in Linux (virtual box), and it's giving a "missing separator" error :( Sigh.
edit: I've flashed 2 different hex files now, one made from Makefile.pjrc and one from Makefile.lufa with the ANSI layout... and I still get the same errors where some keypresses are repeated / incorrect letters are inserted.
edit: I've flashed 2 different hex files now, one made from Makefile.pjrc and one from Makefile.lufa with the ANSI layout... and I still get the same errors where some keypresses are repeated / incorrect letters are inserted.
what layout are you trying to flash?
upload the keymap and makefile maybe something is wrong.
https://dl.dropboxusercontent.com/u/98044719/hid_liber_pjrc.hex (that is the stock file from the tmk github which is the standard ansi layout)
I just compiled it.
Thanks, that's worth trying. The other issue was additional characters that were not doubled. It would like something like this:
Thtis is an nexeamplpe.
I'm trying to install the bootloader driver but it doesn't show up in the Device Manager, or at least I can't find it if it's there. What should I do?
That's what I'm trying to do but I can't determine which item in the Device Manager tree is the keyboard's bootloader. When I plug the keyboard in, like 7 new entries appear under Human Interface Devices. If I try to update any of them (I've tried all of them), directing it to the proper folder (... /Flip 3.4.7/usb), it says "Windows has determined the driver software for your device is up to date" and Flip still can't open the device.
diff --git a/keyboard/hid_liber/matrix.c b/keyboard/hid_liber/matrix.c
index adf6ac8..d1a7341 100644
--- a/keyboard/hid_liber/matrix.c
+++ b/keyboard/hid_liber/matrix.c
@@ -156,7 +156,7 @@ uint8_t matrix_scan(void)
{
for (uint8_t col = 0; col < MATRIX_COLS; col++) { // 0-7
pull_column(col); // output hi on theline
- _delay_us(5); // without this wait it won't read stable value.
+ _delay_us(100); // without this wait it won't read stable value.
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { // 0-17
bool prev_bit = matrix_debouncing[row] & (1<<col);
bool curr_bit = *row_pin[row] & row_bit[row];
EDIT: aaaah, I missed unit of delay and confused between ns and us :) IGNORE THIS.
Photoelectric,
hmm, interesting. Then, it doesn't seem to be a debounce problem, likey a bug in my firmware.
After browsing source code, circuit and datasheets, I might found a clue/flaw related to this problem. 74HC238 which used in HID liberation requires around 50us 'propagaton dealy' while tmk firmware wait only for 5us. This is completely out of spec and likey causes a wrong output state. I guess other people also should had experience of this problem.
http://www.mouser.com/ds/2/405/cd74hct138-84279.pdf
http://www.nxp.com/documents/data_sheet/74HC_HCT238.pdf
Propagation delay of 74HC238 may vary depending on manufacturers, let's take 100us for safety purpose.
Can you try this patch? Just change value at line 231 of matrix.c.Code: [Select]diff --git a/keyboard/hid_liber/matrix.c b/keyboard/hid_liber/matrix.c
index adf6ac8..d1a7341 100644
--- a/keyboard/hid_liber/matrix.c
+++ b/keyboard/hid_liber/matrix.c
@@ -156,7 +156,7 @@ uint8_t matrix_scan(void)
{
for (uint8_t col = 0; col < MATRIX_COLS; col++) { // 0-7
pull_column(col); // output hi on theline
- _delay_us(5); // without this wait it won't read stable value.
+ _delay_us(100); // without this wait it won't read stable value.
for (uint8_t row = 0; row < MATRIX_ROWS; row++) { // 0-17
bool prev_bit = matrix_debouncing[row] & (1<<col);
bool curr_bit = *row_pin[row] & row_bit[row];
This may not be related, but just curious. what is your wpm? are you very fast typer?
// hid_liber ANSI
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default ANSI
*
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Ins|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------.
* |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Hom|PgU|End|
* |-----------------------------------------------------------| |-----------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|PgD|Ret|
* |-----------------------------------------------------------| `-----------'
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,---.
* |Shft|iso| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
* |-----------------------------------------------------------| ,-----------.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
* `-----------------------------------------------------------' `-----------'
*/
KEYMAP(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR, SLCK, INS, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, PGUP, END, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, PGDN, ENT, \
CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, \
LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL, LEFT, DOWN, RGHT),
};
static const uint16_t PROGMEM fn_actions[] = {};
// hid_liber ANSI
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default ANSI
*
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------.
* |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Hom|PgU|End|
* |-----------------------------------------------------------| |-----------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|PgD|Ret|
* |-----------------------------------------------------------| `-----------'
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------| ,---.
* |Shft|iso| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
* |-----------------------------------------------------------| ,-----------.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig|
* `-----------------------------------------------------------' `-----------'
*/
KEYMAP(\
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR, SLCK, BRK, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, PGUP, END, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, DEL, PGDN, ENT, \
CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, \
LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, \
LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL, LEFT, DOWN, RGHT),
};
static const uint16_t PROGMEM fn_actions[] = {};
Unfortunately my post count isn't high enough to post in the classified for this but I thought it might help to ask here. Does anyone happen to have an extra controller they got in the GB that they'd be willing to part with?
Why don't you use DFU instead of Flip though?Isn't that just paranoid? Java as a web plugin, yes perhaps. Java as a runtime environment locally, not so much..
Java is a major security risk.
Another weird thing happened here at work today with it.. [my first original strange issue here (http://geekhack.org/index.php?topic=35065.msg940239#msg940239) and here (http://geekhack.org/index.php?topic=35065.msg940751#msg940751)]
With my Windows machine off, I unplugged my Filco, shifted my workspace around, and then I plugged it back into a different port and turned the machine back on. It seems to have swapped a few keys with each other (LCtrl became Caps Lock and vice versa, and LWin became LAlt and vice versa). Which became incredibly annoying, because I programmed Caps Lock to LCtrl and kept LCtrl as is, but now they're both Caps Lock. I then plugged it into a Mac and these swaps still seem to be there.
Is this further confirmation that I have hardware issues, or is this something that might be fixed by taking it back home and re-flashing with hasu's firmware (which might have been updated in the past month)?