summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-05 07:26:11 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-05 07:26:11 +0000
commita33c2706aa7973393d6d9b57f93c73114531ba94 (patch)
tree2e6edb112467144fdc7c1f2b8057929df0345110
parent38512e2e5eb50e43844dfea937f52f10e490c72e (diff)
automatic import of python-ioctl-optopeneuler20.03
-rw-r--r--.gitignore1
-rw-r--r--python-ioctl-opt.spec318
-rw-r--r--sources1
3 files changed, 320 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..a97875a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/ioctl-opt-1.3.tar.gz
diff --git a/python-ioctl-opt.spec b/python-ioctl-opt.spec
new file mode 100644
index 0000000..96410a0
--- /dev/null
+++ b/python-ioctl-opt.spec
@@ -0,0 +1,318 @@
+%global _empty_manifest_terminate_build 0
+Name: python-ioctl-opt
+Version: 1.3
+Release: 1
+Summary: Functions to compute fnctl.ioctl's opt argument
+License: GPL 2+
+URL: http://github.com/vpelletier/python-ioctl-opt
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/33/58/4e7c0921c0e92dd18928043ce167952d6201206703ff31c44e3477523362/ioctl-opt-1.3.tar.gz
+BuildArch: noarch
+
+
+%description
+Pythonified linux ``asm-generic/ioctl.h`` .
+
+So you can replicate driver's code computing ``fcntl.ioctl``'s ``opt`` argument.
+
+For example, starting from the following IOCTL declaration (taken from ``input.h``):
+
+.. code:: C
+
+ #include <sys/ioctl.h>
+ #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
+
+you could write the following:
+
+.. code:: python
+
+ from ioctl_opt import IOC, IOC_READ
+ EVIOCGNAME = lambda length: IOC(IOC_READ, ord('E'), 0x06, length)
+
+The differences are minimal, and all come from python language or coding style:
+
+- macros/constants to use from ``ioctl_opt`` for not start with an underscore
+- defined macro becomes a callable (here a lambda, could be function)
+- ``IOC``'s ``nr`` argument has to be an integer, so C's single-quote char becomes an ``ord`` call
+- avoid shadowing built-in ``len`` function
+
+The ``length`` argument is an object (typically serving as an I/O buffer with the ``fcntl.ioctl()``
+call), the size of which is incorporated in the generated ioctl ``opt`` value. ``IOC()`` will
+calculate the size of the object. Supported object types are:
+
+- any ``ctypes`` type or instance
+- ``memoryview``
+- ``bytearray``
+- ``struct.Struct``
+- ``array.array``
+
+You may want to then write a pythonic function to conveniently access that ioctl:
+
+.. code:: python
+
+ import ctypes
+ import fcntl
+
+ def getDeviceName(fd, length=1024):
+ name = (ctypes.c_char * length)()
+ actual_length = fcntl.ioctl(fd, EVIOCGNAME(length), name, True)
+ if actual_length < 0:
+ raise OSError(-actual_length)
+ if name[actual_length - 1] == b'\x00':
+ actual_length -= 1
+ return name[:actual_length]
+
+More advanced example defining hidraw ioctls, requiring structures (for more on how structures are defined, check python's ctype documentation for your python version):
+
+.. code:: python
+
+ import ctypes
+ from ioctl_opt import IOR, IOC, IOC_READ, IOC_WRITE
+
+ # hid.h
+ HID_MAX_DESCRIPTOR_SIZE = 4096
+
+ # hidraw.h
+ class hidraw_report_descriptor(ctypes.Structure):
+ _fields_ = [
+ ('size', ctypes.c_uint),
+ ('value', ctypes.c_ubyte * HID_MAX_DESCRIPTOR_SIZE),
+ ]
+
+ class hidraw_devinfo(ctypes.Structure):
+ _fields_ = [
+ ('bustype', ctypes.c_uint),
+ ('vendor', ctypes.c_short),
+ ('product', ctypes.c_short),
+ ]
+
+ HIDIOCGRDESCSIZE = IOR(ord('H'), 0x01, ctypes.c_int)
+ HIDIOCGRDESC = IOR(ord('H'), 0x02, hidraw_report_descriptor)
+ HIDIOCGRAWINFO = IOR(ord('H'), 0x03, hidraw_devinfo)
+ HIDIOCGRAWNAME = lambda length: IOC(IOC_READ, ord('H'), 0x04, length)
+ HIDIOCGRAWPHYS = lambda length: IOC(IOC_READ, ord('H'), 0x05, length)
+ HIDIOCSFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x06, length)
+ HIDIOCGFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x07, length)
+
+
+%package -n python3-ioctl-opt
+Summary: Functions to compute fnctl.ioctl's opt argument
+Provides: python-ioctl-opt
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-ioctl-opt
+Pythonified linux ``asm-generic/ioctl.h`` .
+
+So you can replicate driver's code computing ``fcntl.ioctl``'s ``opt`` argument.
+
+For example, starting from the following IOCTL declaration (taken from ``input.h``):
+
+.. code:: C
+
+ #include <sys/ioctl.h>
+ #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
+
+you could write the following:
+
+.. code:: python
+
+ from ioctl_opt import IOC, IOC_READ
+ EVIOCGNAME = lambda length: IOC(IOC_READ, ord('E'), 0x06, length)
+
+The differences are minimal, and all come from python language or coding style:
+
+- macros/constants to use from ``ioctl_opt`` for not start with an underscore
+- defined macro becomes a callable (here a lambda, could be function)
+- ``IOC``'s ``nr`` argument has to be an integer, so C's single-quote char becomes an ``ord`` call
+- avoid shadowing built-in ``len`` function
+
+The ``length`` argument is an object (typically serving as an I/O buffer with the ``fcntl.ioctl()``
+call), the size of which is incorporated in the generated ioctl ``opt`` value. ``IOC()`` will
+calculate the size of the object. Supported object types are:
+
+- any ``ctypes`` type or instance
+- ``memoryview``
+- ``bytearray``
+- ``struct.Struct``
+- ``array.array``
+
+You may want to then write a pythonic function to conveniently access that ioctl:
+
+.. code:: python
+
+ import ctypes
+ import fcntl
+
+ def getDeviceName(fd, length=1024):
+ name = (ctypes.c_char * length)()
+ actual_length = fcntl.ioctl(fd, EVIOCGNAME(length), name, True)
+ if actual_length < 0:
+ raise OSError(-actual_length)
+ if name[actual_length - 1] == b'\x00':
+ actual_length -= 1
+ return name[:actual_length]
+
+More advanced example defining hidraw ioctls, requiring structures (for more on how structures are defined, check python's ctype documentation for your python version):
+
+.. code:: python
+
+ import ctypes
+ from ioctl_opt import IOR, IOC, IOC_READ, IOC_WRITE
+
+ # hid.h
+ HID_MAX_DESCRIPTOR_SIZE = 4096
+
+ # hidraw.h
+ class hidraw_report_descriptor(ctypes.Structure):
+ _fields_ = [
+ ('size', ctypes.c_uint),
+ ('value', ctypes.c_ubyte * HID_MAX_DESCRIPTOR_SIZE),
+ ]
+
+ class hidraw_devinfo(ctypes.Structure):
+ _fields_ = [
+ ('bustype', ctypes.c_uint),
+ ('vendor', ctypes.c_short),
+ ('product', ctypes.c_short),
+ ]
+
+ HIDIOCGRDESCSIZE = IOR(ord('H'), 0x01, ctypes.c_int)
+ HIDIOCGRDESC = IOR(ord('H'), 0x02, hidraw_report_descriptor)
+ HIDIOCGRAWINFO = IOR(ord('H'), 0x03, hidraw_devinfo)
+ HIDIOCGRAWNAME = lambda length: IOC(IOC_READ, ord('H'), 0x04, length)
+ HIDIOCGRAWPHYS = lambda length: IOC(IOC_READ, ord('H'), 0x05, length)
+ HIDIOCSFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x06, length)
+ HIDIOCGFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x07, length)
+
+
+%package help
+Summary: Development documents and examples for ioctl-opt
+Provides: python3-ioctl-opt-doc
+%description help
+Pythonified linux ``asm-generic/ioctl.h`` .
+
+So you can replicate driver's code computing ``fcntl.ioctl``'s ``opt`` argument.
+
+For example, starting from the following IOCTL declaration (taken from ``input.h``):
+
+.. code:: C
+
+ #include <sys/ioctl.h>
+ #define EVIOCGNAME(len) _IOC(_IOC_READ, 'E', 0x06, len) /* get device name */
+
+you could write the following:
+
+.. code:: python
+
+ from ioctl_opt import IOC, IOC_READ
+ EVIOCGNAME = lambda length: IOC(IOC_READ, ord('E'), 0x06, length)
+
+The differences are minimal, and all come from python language or coding style:
+
+- macros/constants to use from ``ioctl_opt`` for not start with an underscore
+- defined macro becomes a callable (here a lambda, could be function)
+- ``IOC``'s ``nr`` argument has to be an integer, so C's single-quote char becomes an ``ord`` call
+- avoid shadowing built-in ``len`` function
+
+The ``length`` argument is an object (typically serving as an I/O buffer with the ``fcntl.ioctl()``
+call), the size of which is incorporated in the generated ioctl ``opt`` value. ``IOC()`` will
+calculate the size of the object. Supported object types are:
+
+- any ``ctypes`` type or instance
+- ``memoryview``
+- ``bytearray``
+- ``struct.Struct``
+- ``array.array``
+
+You may want to then write a pythonic function to conveniently access that ioctl:
+
+.. code:: python
+
+ import ctypes
+ import fcntl
+
+ def getDeviceName(fd, length=1024):
+ name = (ctypes.c_char * length)()
+ actual_length = fcntl.ioctl(fd, EVIOCGNAME(length), name, True)
+ if actual_length < 0:
+ raise OSError(-actual_length)
+ if name[actual_length - 1] == b'\x00':
+ actual_length -= 1
+ return name[:actual_length]
+
+More advanced example defining hidraw ioctls, requiring structures (for more on how structures are defined, check python's ctype documentation for your python version):
+
+.. code:: python
+
+ import ctypes
+ from ioctl_opt import IOR, IOC, IOC_READ, IOC_WRITE
+
+ # hid.h
+ HID_MAX_DESCRIPTOR_SIZE = 4096
+
+ # hidraw.h
+ class hidraw_report_descriptor(ctypes.Structure):
+ _fields_ = [
+ ('size', ctypes.c_uint),
+ ('value', ctypes.c_ubyte * HID_MAX_DESCRIPTOR_SIZE),
+ ]
+
+ class hidraw_devinfo(ctypes.Structure):
+ _fields_ = [
+ ('bustype', ctypes.c_uint),
+ ('vendor', ctypes.c_short),
+ ('product', ctypes.c_short),
+ ]
+
+ HIDIOCGRDESCSIZE = IOR(ord('H'), 0x01, ctypes.c_int)
+ HIDIOCGRDESC = IOR(ord('H'), 0x02, hidraw_report_descriptor)
+ HIDIOCGRAWINFO = IOR(ord('H'), 0x03, hidraw_devinfo)
+ HIDIOCGRAWNAME = lambda length: IOC(IOC_READ, ord('H'), 0x04, length)
+ HIDIOCGRAWPHYS = lambda length: IOC(IOC_READ, ord('H'), 0x05, length)
+ HIDIOCSFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x06, length)
+ HIDIOCGFEATURE = lambda length: IOC(IOC_WRITE|IOC_READ, ord('H'), 0x07, length)
+
+
+%prep
+%autosetup -n ioctl-opt-1.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-ioctl-opt -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..a2be360
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+0a8991b5f58ff91bd55916eb143a65af ioctl-opt-1.3.tar.gz