1
0
mirror of https://github.com/gryf/linak-ctrl.git synced 2026-04-25 16:01:31 +02:00

5 Commits

Author SHA1 Message Date
gryf 32b49bd278 Cover case when no device has been found. 2021-07-29 19:31:21 +02:00
gryf 9a33f742e1 Readme update. 2021-07-07 18:00:00 +02:00
gryf e9ea91f2c3 Detach kernel driver before doing anything with device.
Initialization of the device must be done after device is detached from
kernel, otherwise exception will be thrown about device is busy message.
2021-07-07 17:34:13 +02:00
gryf aa5aecb205 DRY. Simplifying get_status method. 2021-07-07 17:33:00 +02:00
gryf 2013dffcf9 Added installation bits. 2021-07-07 17:30:58 +02:00
5 changed files with 92 additions and 19 deletions
+28
View File
@@ -2,6 +2,9 @@
Linak-ctrl Linak-ctrl
========== ==========
.. image:: https://badge.fury.io/py/linak-ctrl.svg
:target: https://badge.fury.io/py/linak-ctrl
Simple python script to control Linak powered desks and USB2LIN06 cable. Simple python script to control Linak powered desks and USB2LIN06 cable.
@@ -14,6 +17,31 @@ Requirements
* `pyusb`_ * `pyusb`_
Installation
============
There are couple of different ways for installing ``linak-ctrl``. One of the
preferred ways is to use virtualenv and pip:
.. code:: shell-session
$ git clone https://github.com/gryf/linak-ctrl
$ cd linak-ctrl
linak-ctrl $ python -m venv linak
(linak) linak-ctrl $ pip install .
(linak) linak-ctrl $ linak-ctrl status
Position: 767, height: 78.80cm, moving: False
Or, you can install it system-wide:
.. code:: shell-session
$ sudo pip install linak-ctrl
And finally, you could also install dependences from your system repositories,
and use script directly, by placing it somewhere in your ``$PATH``.
Usage Usage
===== =====
+24 -19
View File
@@ -111,6 +111,14 @@ class LinakDevice:
def __init__(self): def __init__(self):
self._dev = usb.core.find(idVendor=LinakDevice.VEND, self._dev = usb.core.find(idVendor=LinakDevice.VEND,
idProduct=LinakDevice.PROD) idProduct=LinakDevice.PROD)
if not self._dev:
raise ValueError(f'Device {LinakDevice.VEND}:'
f'{LinakDevice.PROD:04d} '
f'not found!')
# detach kernel driver, if attached
if self._dev.is_kernel_driver_active(0):
self._dev.detach_kernel_driver(0)
# init device # init device
buf = [0 for _ in range(BUF_LEN)] buf = [0 for _ in range(BUF_LEN)]
@@ -123,25 +131,18 @@ class LinakDevice:
# hold a little bit, to make it effect. # hold a little bit, to make it effect.
time.sleep(0.5) time.sleep(0.5)
# detach kernel driver, if attached
if self._dev.is_kernel_driver_active(0):
self._dev.detach_kernel_driver(0)
def get_position(self, args): def get_position(self, args):
if args.loop: try:
try: while True:
while True: report = self._get_report()
report = self._get_report() LOG.warning('Position: %s, height: %.2fcm, moving: %s',
LOG.warning('Position: %s, height: %.2fcm, moving: %s', report.position, report.position_in_cm,
report.position, report.position_in_cm, report.moving)
report.moving) if not args.loop:
time.sleep(0.2) break
except KeyboardInterrupt: time.sleep(0.2)
return except KeyboardInterrupt:
else: return
report = self._get_report()
LOG.warning('Position: %s, height: %.2fcm, moving: %s',
report.position, report.position_in_cm, report.moving)
def move(self, args): def move(self, args):
retry_count = 3 retry_count = 3
@@ -191,7 +192,11 @@ class LinakDevice:
def main(): def main():
device = LinakDevice() try:
device = LinakDevice()
except ValueError as ex:
sys.stderr.write(ex.args[0] + '\n')
sys.exit(1)
parser = argparse.ArgumentParser('An utility to interact with USB2LIN06 ' parser = argparse.ArgumentParser('An utility to interact with USB2LIN06 '
'device.') 'device.')
+2
View File
@@ -0,0 +1,2 @@
pbr
pyusb>=1.1.1
+34
View File
@@ -0,0 +1,34 @@
[metadata]
name = linak-ctrl
summary = Control Linak powered desks using USB2LIN06 cable.
description-file = README.rst
author = Roman Dobosz
author-email = gryf73@gmail.com
home-page = https://gihtub.com/gryf/linak-ctrl
license = BSD
classifier =
Development Status :: 5 - Production/Stable
Environment :: Console
Intended Audience :: End Users/Desktop
License :: OSI Approved :: BSD License
Operating System :: POSIX :: Linux
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Topic :: System :: Networking
[install]
record = install.log
[options.entry_points]
console_scripts =
linak-ctrl= linak_ctrl:main
[options]
install_requires =
pyusb
[bdist_wheel]
universal = 1
+4
View File
@@ -0,0 +1,4 @@
import setuptools
setuptools.setup(setup_requires=['pbr>=2.0.0'], pbr=True)