Convert spec file to use pyproject.toml build system
- Convert spec file to use pyproject.toml build system - Add 8 patches from upstream (spelling fixes, typo corrections, cleanups) - Modernize packaging with %pyproject_wheel and %pyproject_install macros - Bump release to 3.9-6 Resolves: RHEL-114900 Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
parent
3f52c034e8
commit
726ffcefd2
102
rteval-Add-pyproject.toml-for-modern-Python-packagin.patch
Normal file
102
rteval-Add-pyproject.toml-for-modern-Python-packagin.patch
Normal file
@ -0,0 +1,102 @@
|
||||
From 65554081a01bf507224ce6f9ff950936e265241c Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Fri, 31 Oct 2025 15:47:47 -0400
|
||||
Subject: [PATCH 8/8] rteval: Add pyproject.toml for modern Python packaging
|
||||
|
||||
Add pyproject.toml to support modern PEP 517/518/621 packaging while
|
||||
keeping setup.py for backwards compatibility with older distributions.
|
||||
|
||||
The pyproject.toml provides project metadata (name, version, dependencies,
|
||||
authors) and works alongside setup.py which handles script installation
|
||||
(copying rteval-cmd to rteval).
|
||||
|
||||
Requires Python >=3.10 and setuptools >=61.0.
|
||||
|
||||
Assisted-by: Claude <noreply@anthropic.com>
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
pyproject.toml | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
rteval-cmd | 2 +-
|
||||
2 files changed, 59 insertions(+), 1 deletion(-)
|
||||
create mode 100644 pyproject.toml
|
||||
|
||||
diff --git a/pyproject.toml b/pyproject.toml
|
||||
new file mode 100644
|
||||
index 000000000000..9fc681f3f91b
|
||||
--- /dev/null
|
||||
+++ b/pyproject.toml
|
||||
@@ -0,0 +1,58 @@
|
||||
+[build-system]
|
||||
+requires = ["setuptools>=61.0", "wheel"]
|
||||
+build-backend = "setuptools.build_meta"
|
||||
+
|
||||
+[project]
|
||||
+name = "rteval"
|
||||
+dynamic = ["version"]
|
||||
+description = "Evaluate system performance for Realtime"
|
||||
+readme = {text = """\
|
||||
+The rteval script is used to judge the behavior of a hardware
|
||||
+platform while running a Realtime Linux kernel under a moderate
|
||||
+to heavy load.
|
||||
+
|
||||
+Provides control logic for starting a system load and then running a
|
||||
+response time measurement utility (cyclictest) for a specified amount
|
||||
+of time. When the run is finished, the sample data from cyclictest is
|
||||
+analyzed for standard statistical measurements (i.e mode, median, range,
|
||||
+mean, variance and standard deviation) and a report is generated.
|
||||
+""", content-type = "text/plain"}
|
||||
+requires-python = ">=3.10"
|
||||
+license = {text = "GPL-2.0-or-later"}
|
||||
+dependencies = [
|
||||
+ "lxml",
|
||||
+ "requests",
|
||||
+]
|
||||
+authors = [
|
||||
+ {name = "Clark Williams", email = "williams@redhat.com"},
|
||||
+ {name = "David Sommerseth", email = "davids@redhat.com"},
|
||||
+ {name = "John Kacur", email = "jkacur@redhat.com"},
|
||||
+]
|
||||
+maintainers = [
|
||||
+ {name = "John Kacur", email = "jkacur@redhat.com"},
|
||||
+]
|
||||
+
|
||||
+[project.urls]
|
||||
+Homepage = "https://git.kernel.org/pub/scm/utils/rteval/rteval.git"
|
||||
+
|
||||
+[tool.setuptools]
|
||||
+packages = [
|
||||
+ "rteval",
|
||||
+ "rteval.modules",
|
||||
+ "rteval.modules.loads",
|
||||
+ "rteval.modules.measurement",
|
||||
+ "rteval.sysinfo"
|
||||
+]
|
||||
+
|
||||
+[tool.setuptools.dynamic]
|
||||
+version = {attr = "rteval.version.RTEVAL_VERSION"}
|
||||
+
|
||||
+[tool.setuptools.package-dir]
|
||||
+rteval = "rteval"
|
||||
+"rteval.modules" = "rteval/modules"
|
||||
+"rteval.modules.loads" = "rteval/modules/loads"
|
||||
+"rteval.modules.measurement" = "rteval/modules/measurement"
|
||||
+"rteval.sysinfo" = "rteval/sysinfo"
|
||||
+
|
||||
+[tool.setuptools.package-data]
|
||||
+rteval = ["*.xsl", "rteval.conf"]
|
||||
diff --git a/rteval-cmd b/rteval-cmd
|
||||
index 7af179321fe2..8fd37b98b069 100755
|
||||
--- a/rteval-cmd
|
||||
+++ b/rteval-cmd
|
||||
@@ -307,7 +307,7 @@ if __name__ == '__main__':
|
||||
default_kernel_file = ModuleParameters().get('source').get('default')
|
||||
if os.path.exists(tarfl):
|
||||
if rtevcfg.srcdownload == default_kernel_file:
|
||||
- sys.exit("Default kernel already exists, will not download")
|
||||
+ sys.exit(f"Default kernel {default_kernel_file} already exists, will not download")
|
||||
prompt = input("Kernel already exists, download and overwrite anyway? (y/n) ")
|
||||
prompt = prompt.lower()
|
||||
if prompt in ('no', 'n'):
|
||||
--
|
||||
2.51.1
|
||||
|
||||
42
rteval-Clean-up-MANIFEST.in-and-fix-newnet.py-copyri.patch
Normal file
42
rteval-Clean-up-MANIFEST.in-and-fix-newnet.py-copyri.patch
Normal file
@ -0,0 +1,42 @@
|
||||
From 544566d95a75e4b3b7ee7a5e1e47dd7e7e34a132 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Fri, 31 Oct 2025 15:12:42 -0400
|
||||
Subject: [PATCH 7/8] rteval: Clean up MANIFEST.in and fix newnet.py copyright
|
||||
header
|
||||
|
||||
Remove unnecessary entries from MANIFEST.in (rteval-cmd inclusion and
|
||||
dist/ exclusions) and fix the copyright header in newnet.py (remove
|
||||
duplicate SPDX tag, fix missing email bracket, update year to 2025).
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
MANIFEST.in | 3 +--
|
||||
rteval/sysinfo/newnet.py | 3 +--
|
||||
2 files changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/MANIFEST.in b/MANIFEST.in
|
||||
index 82560a8f957b..fa6ed3ab7de5 100644
|
||||
--- a/MANIFEST.in
|
||||
+++ b/MANIFEST.in
|
||||
@@ -1,3 +1,2 @@
|
||||
-include COPYING MANIFEST.in rteval-cmd
|
||||
+include COPYING MANIFEST.in
|
||||
recursive-include doc *.? *.txt
|
||||
-exclude dist/rteval dist/rteval.8.gz
|
||||
diff --git a/rteval/sysinfo/newnet.py b/rteval/sysinfo/newnet.py
|
||||
index 5dd95ae94e19..07427bb27771 100644
|
||||
--- a/rteval/sysinfo/newnet.py
|
||||
+++ b/rteval/sysinfo/newnet.py
|
||||
@@ -1,8 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
''' Module to obtain network information for the rteval report '''
|
||||
#
|
||||
-# Copyright 2022 John Kacur <jkacur@redhat.com
|
||||
-# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+# Copyright 2022 - 2025 John Kacur <jkacur@redhat.com>
|
||||
#
|
||||
|
||||
import os
|
||||
--
|
||||
2.51.1
|
||||
|
||||
66
rteval-Fix-spelling-of-occurrences-in-measurement-mo.patch
Normal file
66
rteval-Fix-spelling-of-occurrences-in-measurement-mo.patch
Normal file
@ -0,0 +1,66 @@
|
||||
From ca2ef31957e21194907cdfae6995da1eb1f5905d Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 10:48:45 -0400
|
||||
Subject: [PATCH 1/8] rteval: Fix spelling of 'occurrences' in measurement
|
||||
modules
|
||||
|
||||
Fixed typo 'occurances' -> 'occurrences' in both cyclictest.py and
|
||||
timerlat.py measurement modules for consistency.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval/modules/measurement/cyclictest.py | 6 +++---
|
||||
rteval/modules/measurement/timerlat.py | 6 +++---
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
|
||||
index 3d25c20b69cb..f32ad2690f45 100644
|
||||
--- a/rteval/modules/measurement/cyclictest.py
|
||||
+++ b/rteval/modules/measurement/cyclictest.py
|
||||
@@ -92,7 +92,7 @@ class RunData:
|
||||
mid = int(self.__numsamples / 2) + 1
|
||||
|
||||
# mean, mode, and median
|
||||
- occurances = 0
|
||||
+ occurrences = 0
|
||||
lastkey = -1
|
||||
for i in keys:
|
||||
if mid > total and mid <= total + self.__samples[i]:
|
||||
@@ -104,8 +104,8 @@ class RunData:
|
||||
lastkey = i
|
||||
total += self.__samples[i]
|
||||
total_us += (i * self.__samples[i])
|
||||
- if self.__samples[i] > occurances:
|
||||
- occurances = self.__samples[i]
|
||||
+ if self.__samples[i] > occurrences:
|
||||
+ occurrences = self.__samples[i]
|
||||
self.__mode = i
|
||||
self.__mean = float(total_us) / float(self.__numsamples)
|
||||
|
||||
diff --git a/rteval/modules/measurement/timerlat.py b/rteval/modules/measurement/timerlat.py
|
||||
index 5bfc495217ea..733929666784 100644
|
||||
--- a/rteval/modules/measurement/timerlat.py
|
||||
+++ b/rteval/modules/measurement/timerlat.py
|
||||
@@ -84,7 +84,7 @@ class TLRunData:
|
||||
mid = int(self.__numsamples / 2) + 1
|
||||
|
||||
# mean, mode and median
|
||||
- occurances = 0
|
||||
+ occurrences = 0
|
||||
lastkey = -1
|
||||
for i in keys:
|
||||
if mid > total and mid <= total + self.__samples[i]:
|
||||
@@ -96,8 +96,8 @@ class TLRunData:
|
||||
lastkey = i
|
||||
total += self.__samples[i]
|
||||
total_us += i * self.__samples[i]
|
||||
- if self.__samples[i] > occurances:
|
||||
- occurances = self.__samples[i]
|
||||
+ if self.__samples[i] > occurrences:
|
||||
+ occurrences = self.__samples[i]
|
||||
self.__mode = i
|
||||
self.__mean = float(total_us) / float(self.__numsamples)
|
||||
|
||||
--
|
||||
2.51.1
|
||||
|
||||
28
rteval-Fix-typo-in-comment.patch
Normal file
28
rteval-Fix-typo-in-comment.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From fbdf84d07a512b49be5287e0f326a0ae0dd9082e Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 11:05:06 -0400
|
||||
Subject: [PATCH 2/8] rteval: Fix typo in comment
|
||||
|
||||
Fixed typo 'summay.xml' -> 'summary.xml' in rteval-cmd comment.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval-cmd | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rteval-cmd b/rteval-cmd
|
||||
index 4e13d312a24a..b936ade23d86 100755
|
||||
--- a/rteval-cmd
|
||||
+++ b/rteval-cmd
|
||||
@@ -68,7 +68,7 @@ def summarize(repfile, xslt):
|
||||
xsltdoc = lxml.etree.parse(xsltfp)
|
||||
xsltprs = lxml.etree.XSLT(xsltdoc)
|
||||
|
||||
- # Load the summay.xml report - with some simple sanity checks
|
||||
+ # Load the summary.xml report - with some simple sanity checks
|
||||
with open(summaryfile, "r") as xmlfp:
|
||||
xmldoc = lxml.etree.parse(xmlfp)
|
||||
|
||||
--
|
||||
2.51.1
|
||||
|
||||
33
rteval-Remove-unused-function-remove_offline.patch
Normal file
33
rteval-Remove-unused-function-remove_offline.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From e18cc3a11f982609cba26da5a341ecb457630ebd Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 13:20:30 -0400
|
||||
Subject: [PATCH 3/8] rteval: Remove unused function remove_offline
|
||||
|
||||
Remove unused function remove_offline()
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval-cmd | 7 -------
|
||||
1 file changed, 7 deletions(-)
|
||||
|
||||
diff --git a/rteval-cmd b/rteval-cmd
|
||||
index b936ade23d86..7af179321fe2 100755
|
||||
--- a/rteval-cmd
|
||||
+++ b/rteval-cmd
|
||||
@@ -207,13 +207,6 @@ def parse_options(cfg, parser, cmdargs):
|
||||
|
||||
return cmd_args
|
||||
|
||||
-def remove_offline(cpulist):
|
||||
- """ return cpulist in collapsed compressed form with only online cpus """
|
||||
- tmplist = expand_cpulist(cpulist)
|
||||
- tmplist = SysTopology().online_cpulist(tmplist)
|
||||
- return collapse_cpulist(tmplist)
|
||||
-
|
||||
-
|
||||
if __name__ == '__main__':
|
||||
from rteval.sysinfo import dmi
|
||||
|
||||
--
|
||||
2.51.1
|
||||
|
||||
28
rteval-cyclictest-Fix-typo-in-comment.patch
Normal file
28
rteval-cyclictest-Fix-typo-in-comment.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From 3aa64cc2846fbcfcf7597fffa9ae3eeea0ecc7c3 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 13:36:34 -0400
|
||||
Subject: [PATCH 5/8] rteval: cyclictest: Fix typo in comment
|
||||
|
||||
Fixed typo 'runing' -> 'running' in comment.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval/modules/measurement/cyclictest.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
|
||||
index f32ad2690f45..f7039ab2749f 100644
|
||||
--- a/rteval/modules/measurement/cyclictest.py
|
||||
+++ b/rteval/modules/measurement/cyclictest.py
|
||||
@@ -270,7 +270,7 @@ class Cyclictest(rtevalModulePrototype):
|
||||
|
||||
def _WorkloadTask(self):
|
||||
if self.__started:
|
||||
- # Don't restart cyclictest if it is already runing
|
||||
+ # Don't restart cyclictest if it is already running
|
||||
return
|
||||
|
||||
self._log(Log.DEBUG, f'starting with cmd: {" ".join(self.__cmd)}')
|
||||
--
|
||||
2.51.1
|
||||
|
||||
30
rteval-rtevalConfig-Remove-redundant-is-True-compari.patch
Normal file
30
rteval-rtevalConfig-Remove-redundant-is-True-compari.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 0830a556300ec44551bb78f0b1a2a687ac06d1f9 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 13:41:45 -0400
|
||||
Subject: [PATCH 6/8] rteval: rtevalConfig: Remove redundant 'is True'
|
||||
comparison
|
||||
|
||||
Simplified boolean check by removing redundant 'is True' comparison.
|
||||
ConfigParsed() already returns a boolean value.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval/rtevalConfig.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rteval/rtevalConfig.py b/rteval/rtevalConfig.py
|
||||
index 0c2fc6b5761a..e0922c5adda6 100644
|
||||
--- a/rteval/rtevalConfig.py
|
||||
+++ b/rteval/rtevalConfig.py
|
||||
@@ -234,7 +234,7 @@ class rtevalConfig:
|
||||
self.__info("no config file")
|
||||
return
|
||||
|
||||
- if self.ConfigParsed(cfgfile) is True:
|
||||
+ if self.ConfigParsed(cfgfile):
|
||||
# Don't try to reread this file if it's already been parsed
|
||||
return
|
||||
|
||||
--
|
||||
2.51.1
|
||||
|
||||
28
rteval-timerlat-Fix-typo-in-log-message.patch
Normal file
28
rteval-timerlat-Fix-typo-in-log-message.patch
Normal file
@ -0,0 +1,28 @@
|
||||
From c27f77bf1c401efab7a046c532470d9ba45b1519 Mon Sep 17 00:00:00 2001
|
||||
From: John Kacur <jkacur@redhat.com>
|
||||
Date: Sun, 12 Oct 2025 13:29:20 -0400
|
||||
Subject: [PATCH 4/8] rteval: timerlat: Fix typo in log message
|
||||
|
||||
Fixed typo 'sampples' -> 'samples' in debug log message.
|
||||
|
||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||
---
|
||||
rteval/modules/measurement/timerlat.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/rteval/modules/measurement/timerlat.py b/rteval/modules/measurement/timerlat.py
|
||||
index 733929666784..95fb7f136c25 100644
|
||||
--- a/rteval/modules/measurement/timerlat.py
|
||||
+++ b/rteval/modules/measurement/timerlat.py
|
||||
@@ -66,7 +66,7 @@ class TLRunData:
|
||||
""" Calculate statistics """
|
||||
# Check to see if we have any samples. If there are 1 or 0, return
|
||||
if self.__numsamples <= 1:
|
||||
- self._log(Log.DEBUG, f"skipping {self.__id} ({self.__numsamples} sampples)")
|
||||
+ self._log(Log.DEBUG, f"skipping {self.__id} ({self.__numsamples} samples)")
|
||||
self.__mad = 0
|
||||
self.__stddev = 0
|
||||
return
|
||||
--
|
||||
2.51.1
|
||||
|
||||
41
rteval.spec
41
rteval.spec
@ -1,6 +1,6 @@
|
||||
Name: rteval
|
||||
Version: 3.9
|
||||
Release: 5%{?dist}
|
||||
Release: 6%{?dist}
|
||||
Summary: Utility to evaluate system suitability for RT Linux
|
||||
|
||||
Group: Development/Tools
|
||||
@ -10,7 +10,7 @@ Source0: https://www.kernel.org/pub/linux/utils/%{name}/%{name}-%{version}.tar.x
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python3-setuptools
|
||||
BuildRequires: pyproject-rpm-macros
|
||||
Requires: python3-lxml
|
||||
Requires: python3-libxml2
|
||||
Requires: realtime-tests
|
||||
@ -39,6 +39,14 @@ Patch2: rteval-Change-the-default-interval-for-timerlat-to-1100us.patch
|
||||
Patch3: rteval-Change-default-measurement-module-to-cyclictest.patch
|
||||
Patch4: rteval-services.py-Fix-SyntaxWarning.patch
|
||||
Patch5: rteval-Make-timerlat-the-default-for-rteval.patch
|
||||
Patch6: rteval-Fix-spelling-of-occurrences-in-measurement-mo.patch
|
||||
Patch7: rteval-Fix-typo-in-comment.patch
|
||||
Patch8: rteval-Remove-unused-function-remove_offline.patch
|
||||
Patch9: rteval-timerlat-Fix-typo-in-log-message.patch
|
||||
Patch10: rteval-cyclictest-Fix-typo-in-comment.patch
|
||||
Patch11: rteval-rtevalConfig-Remove-redundant-is-True-compari.patch
|
||||
Patch12: rteval-Clean-up-MANIFEST.in-and-fix-newnet.py-copyri.patch
|
||||
Patch13: rteval-Add-pyproject.toml-for-modern-Python-packagin.patch
|
||||
|
||||
%description
|
||||
The rteval script is a utility for measuring various aspects of
|
||||
@ -51,26 +59,37 @@ to the screen.
|
||||
|
||||
%prep
|
||||
%autosetup -v -p1
|
||||
# Delete setup.py so pyproject.toml build doesn't use it
|
||||
rm -f setup.py
|
||||
# Prepare rteval script for installation (save to a separate location to avoid directory conflict)
|
||||
cp -p rteval-cmd %{_builddir}/rteval-script
|
||||
# Compress man page
|
||||
gzip -c doc/rteval.8 > %{_builddir}/rteval.8.gz
|
||||
|
||||
%build
|
||||
%{__python3} setup.py build
|
||||
%pyproject_wheel
|
||||
|
||||
%install
|
||||
%{__python3} setup.py install --root=$RPM_BUILD_ROOT
|
||||
%pyproject_install
|
||||
%pyproject_save_files rteval
|
||||
# Install the rteval script
|
||||
install -D -m 0755 %{_builddir}/rteval-script %{buildroot}%{_bindir}/rteval
|
||||
# Install the compressed man page
|
||||
install -D -m 0644 %{_builddir}/rteval.8.gz %{buildroot}%{_mandir}/man8/rteval.8.gz
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%{python3_sitelib}/*.egg-info
|
||||
%files -f %{pyproject_files}
|
||||
%doc README doc/rteval.txt
|
||||
%license COPYING
|
||||
%dir %{_datadir}/%{name}
|
||||
%{python3_sitelib}/rteval
|
||||
%{_mandir}/man8/rteval.8.gz
|
||||
%config(noreplace) %{_sysconfdir}/rteval.conf
|
||||
%{_datadir}/%{name}/rteval_*.xsl
|
||||
%{_bindir}/rteval
|
||||
|
||||
%changelog
|
||||
* Fri Oct 31 2025 John Kacur <jkacur@redhat.com> - 3.9-6
|
||||
- Convert spec file to use pyproject.toml build system
|
||||
- Add 8 patches from upstream (spelling fixes, typo corrections, cleanups)
|
||||
- Modernize packaging with %%pyproject_wheel and %%pyproject_install macros
|
||||
Resolves: RHEL-114900
|
||||
|
||||
* Thu Jun 19 2025 John Kacur <jkacur@redhat.com> - 3.9-5
|
||||
- Make timerlat the default measurement module
|
||||
- Make the default interval 100us
|
||||
|
||||
Loading…
Reference in New Issue
Block a user