dhowland / easyavr Goto Github PK
View Code? Open in Web Editor NEWEasy AVR USB Keyboard Firmware and Keymapper
License: GNU General Public License v2.0
Easy AVR USB Keyboard Firmware and Keymapper
License: GNU General Public License v2.0
The password generator function is flawed. It's not that useful for entering passwords because it doesn't travel with the user. It's hard to use because it requires entering a perfect string without visual aids to get the right password. Also it doesn't generate characters with a uniform distribution.
I don't think anyone uses it. I sure don't.
The function started as an investigation into a concept of a keyboard that changes what each key outputs each time it is pressed. Think of the enigma machine. What I ended up with didn't really resemble that at all. Perhaps I will replace it with something like that just for fun. Haven't decided yet.
In any case, the password function should be removed. It takes up a bunch of space I'd rather have back.
Right now the boards are equipped with all possible HID configurations in program flash, and they can be selected via the config console. However this is very awkward to do, it restricts the options for the user, and it takes excessive space in the crowded AVR memory space.
Instead, the HID descriptors should be configured in the keymapper GUI. The user can select 6KRO/NKRO, media enabled, mouse enabled, etc. These settings are not expected to have to change, at least not more than the keymap or macros.
This will be a good optimization. Also, it ties in well #21 and #59.
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/remlap/Desktop/EasyAVR/keymapper/easykeymap/gui.py", line 61, in <module>
import easykeymap.newboard as newboard
File "easykeymap/newboard.py", line 43, in <module>
import easykeymap.kleparse as kleparse
File "easykeymap/kleparse.py", line 58
SyntaxError: Non-ASCII character '\xc2' in file easykeymap/kleparse.py on line 58, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Hello, it is possible to separate within the "Configuration Options" the option to enable or disable the multimedia keys and mouse pointer for the "Toggle basic keyboard" function?
Keyboard acts as extended NKRO keyboard with mouse and media keys.
Keyboard acts as 6KRO keyboard plus mouse and media keys.
rgds hschraep
I have a custom board built on the GH60 Satan sold by 1Up keyboards. I created a macro with the following text:
I compile and flash the board ... then I go to execute the macro and I get this output:
jgorauskas2Gmail.com
I have other examples too ... It seems that the macro parsing / emitting of the codes is off by one when it sees a need to use shift ... at least on the GH60 Satan that I have. I have not tried any other PCB.
Let me know how I can provide any additional information to help debug this issue. I am comfortable programming in Python, but not in C or C++. I downloaded EasyAVR Release v2.05.08
The link in README.md that points to Atmel FLIP is no longer accurate. It can now b found here
So i can't set altgr or éèçà and such others
even when pushing on my french keyboard the software don't recognize them ^^
Support for caps lock num lock etc with cherry MX lock. As the current firmware works the most effective way to use it is by mapping the caps lock as a shift key.
The LEDs are always on with the Techkeys Sixkeyboard, even when set to "unassigned." I figured out a fix in my fork and submitted a pull request.
Sentraq S60-X version 1.1 have an additional key immediately left to the right shift. That is to add support for JIS & ABNT2 layouts. SOURCE: I am the PCB designer. ;)
Lines 128 & 129 for full layout should be like that:
((4, 4), (3, 12), 'HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK'),
((3, 4), (3, 13), 'HID_KEYBOARD_SC_RIGHT_SHIFT'),
The Atreus uses the Astar project board for the controller. The default bootloader on that product contains a boot process that requires a magic number to be in a boot key at a hard coded address.
static const uint16_t bootKey = 0x7777;
volatile uint16_t *const bootKeyPtr = (volatile uint16_t *)0x0800;
EasyAVR obviously does not reserve this address, thus the BOOT key doesn't work. Instead, the user must press the reset switch twice to enter the bootloader.
There doesn't seem to be any way to map a key to be a Power key, a Sleep key, or a Wake key.
The current macro mini language doesn't look very nice and isn't intuative. All the escapes require commas after them.
Change the language to use something more like either shell scripts ($(var)) or like templates ({var})
A module will have to be added to convert old macros to the new format
I've been using a Filco Majestouch 2 with a Kitten Paw (rev 20130602) controller for about three months now, and recently some keys (most notably Return) started to bounce, i.e. being registered twice instead of just once. Using the original controller, or the costar_keyboard firmware by BathroomEpiphanies, this does not happen (but I'd like to keep my custom layout, of course :).
Please let me know if you need any further details.
The config console (formerly the debug console) has some issues:
The current GUI includes several hard-coded pixel sizes that will not look right on a 4k monitor.
I have a GH60 Revision A prototype that I am still using.
If i use the gh60 satan (rev b) poker layout then 5,t,g,v, and space do not work.
If i use the gh60 (rev c) poker layout then 8,i,k, and m do not work.
hasu in tmk has used this code to support both boards.
Could something like this be done in gh60_satan.py to support both pcb's?
static matrix_row_t read_cols(void)
{
return (PINF&(1<<0) ? 0 : (1<<0)) |
(PINF&(1<<1) ? 0 : (1<<1)) |
(PINE&(1<<6) ? 0 : (1<<2)) |
(PINC&(1<<7) ? 0 : (1<<3)) |
(PINC&(1<<6) ? 0 : (1<<4)) |
(PINB&(1<<6) ? 0 : (1<<5)) |
(PIND&(1<<4) ? 0 : (1<<6)) |
(PINB&(1<<1) ? 0 : (1<<7)) |
((PINB&(1<<0) && PINB&(1<<7)) ? 0 : (1<<8)) | // Rev.A and B
(PINB&(1<<5) ? 0 : (1<<9)) |
(PINB&(1<<4) ? 0 : (1<<10)) |
(PIND&(1<<7) ? 0 : (1<<11)) |
(PIND&(1<<6) ? 0 : (1<<12)) |
(PINB&(1<<3) ? 0 : (1<<13));
}
Keyboard is completely unresponsive. I had to reload the backup I had of the layout to get the keyboard working again.
Any ideas?
Using v2.03.01 it seems trying to run a layout with F13-24 results in those keys sending no scancodes for the keys mapped to F13-24
Running evtest in linux results in no scancodes being shown when pressing F13-24.
Running wireshark to scan USB traffic shows nothing at all being sent from the board when pressing keys bound to F13-24.
Everything else works as expected.
One other individual reported being able to reproduce this.
Some media keys are available in macros, but not others. In some cases this is for good reason, but it seems that there are functions that are compatible with execution in a macro that should be included.
Hi. I have my layout saved from an older version, namely: Easy_keymap_multiplatform_20150516 as the archive name says.
Was the backward compatibility lost at some point ?
I have a Reuters D3D-KP keyboard, now i want to resurvell it with the teensy2.0.
that has 11 rows and 14cols in its phisical circult . so i want to build an firmware support 15*15 or more .
I will send a PR later
They keyboard doesn't work properly with at least some BIOSes while in NKRO mode. It appears that the "boot" keyboard profile isn't working.
It may be that I misread the HID spec. I know that other keyboards don't do the "swap" method. More investigation is needed.
The code for the keymapper is a mess. It grew organically from a simple utility to a complex application. There are several problems. The code is not functionally decomposed into logical sections (spaghetti code). The save file format is finicky and hard to use. It looks awful because of TK. It makes huge exe builds because of TK.
A new keymapper should be built from the ground up with wxPython.
Hi @dhowland
Any chance you could give some pointers as to the necessary steps for debugging the firmware code?
I've done quite a bit of reading and can't seem to figure out if external hardware is needed or not...
Cheers
This is more of a question / feature request than a bug.
I noticed that Hyper, Super, and Meta are commented out in scancodes.py
at the bottom of the file ... I was just curious for the why and if those codes can be enabled in the near future?
Mouse scroll up/down buttons.
There are mouse buttons 3, 4 and 5, but no scroll (unless that's what 4 and 5 are, but I wasn't expecting them to be. I could test this, but I have other feature requests as well so I may as well ask : ) ) - Ideally I'd like these to be rapid fire-able.
Rapid fire mode available for Media Keys.
I use the media keys, especially the volume up/down buttons. As such, I would like these to have the option to be rapid fire, as currently there is no option for this and I believe it could be possible. I use rapid fire on the keys I have mapped to backspace, delete, and arrow keys (48 ms min hold time (default is 800), default / 32 ms repeat delay), and as such would like it on my volume control too as I miss not having it. This may also be nice for macros, but that may be hard to add, as it would conflict with the length of the macros, so I don't know if this would be doable.
Accessing the default layer from another layer.
Default layer / layer 0. If I'm on another function layer, would there be a way to get back to the default layer? For example, If I was to have the "Caps" key mapped to "Fn", "W" (Qwerty layout) mapped to "Ctrl", and then I want maybe the "Enter" key mapped to "Fn0", such that I can do something like Ctrl+C without moving my hands from the home row or moving them to somewhere uncomfortable as the bottom left of my keyboard / "LCtrl" is uncomfortable to type. Whilst this is a very specific example, I'm sure there could be other uses for this. I know that the default layer can be changed, but then how would you get to layer 0?
Clipboard.
A temporary copy / paste layer, or a clipboard-style history thing. If (like me) you are using all 10 layers, and then decide you want to move some layers around, whilst the copy / paste function is nice, it isn't as helpful as it could be. Of course, the layers don't necessarily need to be moved around, but it makes it slightly easier to customise the layout if the similar layers are "grouped" (at least in my mind).
Finally, I would like to thank everyone for all their work so far on this project as it makes my one-of-a-kind keyboard possible : )
P.S.: I haven't used Git much, so I'm hoping the "Issues" page is the right place to put this : )
Specific hardware setup GH60 Satan function key mapped to lockable. The key was double tapped and locked to second layer, however I could not unlock by pressing function key again.
Not sure why this was omitted before, but it should be added and work just like Win Lock.
Which files would I need to modify before compiling and how would I generate a new build? Specifically for a GH60 Satan.
I am a programmer, but I don't have experience with programming microcontrollers.
Hi !
First, thanks for Easy AVR. I just modded a Filco TKL with a Pegasus Hoof and it does wonder.
I wanted to type characters like ő è ú í ü and other unicodes but currently it is not possible from a US layout. I wish to keep the US layout while being able to print special characters.
I have seen that it was discussed already in issue 35 about unicode, and I thought of a workaround : using Alt+XXXX to print them. But since a lot of macros is required I try to increase the maximum number of macros and layers.
(Disclaimer, I am not great with Python).
I went to guy.py and changed the number of macros from 14 to 16 as a beginning and then I added M15, M16 on the other files while pushing aside some other macros to get some bytes available (from the second parameter of the scancode table).
EasyAVR/keymapper/easykeymap/gui.py
Line 85 in 8a390db
EasyAVR/keymapper/easykeymap/scancodes.py
Line 304 in 8a390db
EasyAVR/keymapper/easykeymap/picker.py
Line 318 in e3ecba6
Line 1127 in e3ecba6
EasyAVR/firmware/src/config_keymap.h
Line 183 in e3ecba6
I will try to work it out but due to my limited knowledge in Python, any help would be appreciated.
And once again, great piece of software.
Matrix scanning needs to be either optimized or elongated because we are having trouble fitting into the schedule, especially on 8MHz boards. Another possibility is to reduce USB speed on those boards.
Requesting Apple OSX specific key codes.
Like listed here...
http://eastmanreference.com/complete-list-of-applescript-key-codes/
A lot of the Windows commands work with Mac, but there are a few that are OSX specific.
Like the Mac function keys.
Brightness down (Monitor/Screen)
Brightness up (Monitor/Screen)
Mission Control
Launchpad
Media Eject
Thanks
I'm a big fan of ¯\(ツ)/¯ (as well as many others)
But I get the following error when I try to use this as a macro:
Alt codes are certainly better than nothing, but it would be great it we could use unicode characters in macros. I've looked through macroparse.py
a bit and this seems like it might be within the realm of possibility.
Is there a way to get the boot key working with the PJRC teensy bootloader?
When I press it, the teensy does indeed reboot, but not into the teensy bootloader, it seems like another boot mode which does not work correctly.
Tested with a teensy 2.0++
That might help for this:
https://www.pjrc.com/teensy/jump_to_bootloader.html
Hello
i get this error if i do a build and reprogramming under ubuntu 16.04 with python 2.7 installed.
Is this a python problem? Something could not be found. But i could not figure out what.
dfu-programmer is installed under /usr/bin
and is working on the commandline to reprogram my keyboard.
But it would be nice if it works out of EasyAVR.
Here is the error:
I haven't done much testing, but this appears to be the case.
Media controls including volume and media play/pause, next track etc. are not working under the current version. It was working on the 10 month old release. I wouldn't know where to start looking for how to solve this in the code just yet.
Some widgets just take forever to load on Windows. In my particular case, it's wx.Choice
Robin Dunn himself has blamed this on Windows and not wxWidgets (https://groups.google.com/forum/#!topic/wxpython-users/gODkIvyj-nU)
I don't buy it. I can create a similar UI in tkinter and it will be nice and fast on Windows.
I will create demo programs of the same interface in both and then take those to Robin on stackoverflow. Other than asking the creator, I don't have any ideas for fixing this.
EasyAVR has very poor developer documentation. We should at least comment the code.
Hi recently switched to Ubuntu Budgie and tried to load some of my .dat files and EasyAVR keeps giving me:
"The save file describes a configuration that cannot be loaded."
What can I do to get my layout dat file to be compatible?
The old help manual will be converted into online documentation. The new docs should also incorporate the README info and wiki help, all into one comprehensive document. There should be developer docs as well as a users guide. Add some screenshots.
The keymapper currently has no way to assign "0" to a key. This has been reported multiple times in the geekhack thread.
Add a blank key to the scancode picker.
The old packages are apparently not maintained anymore and in any case they are difficult to use. Since I'm moving to wxPython and would have to redo the setup scripts anyway, now is a good time to move to the more modern PyInstaller.
Edit: After looking into PyInstaller, it is inferior to cx_freeze for complex packages like this one. Also, cx_freeze is actually still maintained. Therefore this issue will instead be used to remove py2exe support, update the cx_freeze scripts, and modernize the setuptools package.
Being able to send a mouse button event in a macro would make them a lot more useful.
For one simple example, allowing the use of sending mouse button click to select a word (i.e. a double click in a text field/web page selects a 'word,' triple click generally selects a line) and then sending CTRL+C in the same macro to copy the text which becomes highlighted by the mouse button click events. .. Some sort of thing like: \Mouse1\Mouse1\CTRL(c)
(in the above example one could simply be using their standard mouse to hover over the area they want to select, for this usage example mouse movement events in a macro wouldn't be required)
At the moment it doesn't seem sending a mouse button click event is possible, if there is any way we could get there it'd be great.
thanks very much for this great firmware, it worked great with my Gigabyte Osmium and a teensy 2.0++.
However, there is one big flaw so far. The backlight stays on when the usb is powered, and it does not detect a when the computer is in standby mode.
This is possible, as many other input devices do that (including the original controller on my Gigabyte Osmium), and there is also a fix for QMK to support it. As far as I remember there is a standby event built into the USB/HID interface. ('USB suspend').
In the suspend mode, the keyboard is still responsive so it can wake the computer, but the backlight is turned off.
It would be very nice to implement that into EasyAVR as well, as it is quite basic.
Maybe it is even possible to set only specific keys to wake the PC, but I don't know how hard it is to code that, but it would be a very nice and useful feature, so that you do not accidentally wake the PC.
I access Layer 1 from Fn 1
key and Layer 2 from the combination Fn 1
+Alt Gr
keys.
In order to access Layer 2, I need to press first Fn 1
and then Alt Gr
because Alt Gr
is Fn 2
on Layer 1. This solution feels a little hacky because the combination will not works when I press Fn 1
and Alt Gr
with the reverse order or at the same time.
Is it possible, using Easy AVR, to map a true combination (e.g. Fn
+Alt Gr
) to a layer?
Thank you.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.