XJoypad is a Python2/3 iterator and wrapper API of evdev
, for reading and parsing joypad and game-controller input events.
Bash Variables
_module_name='xjoypad'
_module_https_url="https://github.com/python-utilities/${_module_name}.git"
_module_relative_path="lib/modules/${_module_name}"
Bash Submodule Commands
cd "<your-git-project-path>"
git checkout master
mkdir -vp "lib/modules"
git submodule add\
-b master --name "${_module_name}"\
"${_module_https_url}" "${_module_relative_path}"
Suggested additions for your ReadMe.md
file so everyone has a good time with submodules
Install Python dependencies
pip3 install --user evdev
Clone with the following to avoid incomplete downloads
git clone --recurse-submodules <url-for-your-project>
Update/upgrade submodules via
git submodule update --init --merge --recursive
As an import
#!/usr/bin/env python3
from lib.modules.xjoypad import XJoypad
if __name__ == '__main__':
import time
xjoypad = XJoypad()
for event_data in xjoypad:
if event_data:
print("{name} --> {value} --> {normalized_value}".format(**event_data))
time.sleep(0.001)
As a base class
#!/usr/bin/env python3
import time
from lib.modules.xjoypad import XJoypad
class XJoypad_Buffer(XJoypad):
"""Extends `XJoypad` class with buffer and timeout features"""
def __init__(self, device_index = 0, amend_settings = None, **kwargs):
"""
Use `amend_settings` to modify select `self['sleeps']` settings
"""
self['sleeps'] = {
'min': 0.001,
'max': 0.01,
'acceleration': 0.001,
'timeout': 120,
'current': 0.001,
}
super(XJoypad_Buffer, self).__init__(device_index = device_index, amend_settings = amend_settings, **kwargs)
def next(self):
"""
Throws `GeneratorExit` if timeout is set and reached, otherwise returns `event_data` when available
"""
while 1:
_event_data = super(XJoypad_Buffer, self).next()
if _event_data:
self['sleeps']['slept_start'] = None
self['sleeps']['current'] = self['sleeps']['min']
return _event_data
if not self['sleeps'].get('slept_start'):
self['sleeps']['slept_start'] = time.time()
if self['sleeps']['current'] < self['sleeps']['max']:
self['sleeps']['current'] += self['sleeps']['acceleration']
if self['sleeps'].get('timeout') and self['sleeps'].get('slept_last'):
if self['sleeps']['slept_last'] - self['sleeps']['slept_start'] > self['sleeps']['timeout']:
self.throw(GeneratorExit)
self['sleeps']['slept_last'] = time.time()
time.sleep(self['sleeps']['current'])
if __name__ == '__main__':
xjoypad = XJoypad_Buffer()
for event_data in xjoypad:
print("Event name -> {name} -- {value} -- {normalized_value}".format(**event_data))
time.sleep(0.001)
git add .gitmodules
git add lib/modules/xjoypad
## Add any changed files too
git commit -F- <<'EOF'
:heavy_plus_sign: Adds `python-utilities/xjoypad#1` submodule
# ... anything else noteworthy
EOF
git push origin master
🎉 Excellent 🎉 your repository is now ready to begin unitizing code from this project!
Pull Requests are welcome for fixing bugs and/or adding features.
Legal bits of Open Source software
XJoypad ReadMe documenting how things like this could be utilized
Copyright (C) 2019 S0AndS0
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation; version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.