%global _empty_manifest_terminate_build 0 Name: python-ElPeriodic Version: 1.2 Release: 1 Summary: Phase-locked userland scheduling library License: BSD License URL: https://github.com/sobomax/libelperiodic Source0: https://mirrors.nju.edu.cn/pypi/web/packages/de/91/16ee87d73f3f00431c9f840ec20366a52c927397e8cd05af68b9094c8a4f/ElPeriodic-1.2.tar.gz BuildArch: noarch %description [![Build Status@GitHub](https://github.com/sobomax/libelperiodic/workflows/Main%20CI/badge.svg?branch=master)](https://github.com/sobomax/libelperiodic/actions?query=branch%3Amaster++) [![Build Status](https://travis-ci.com/sobomax/libelperiodic.svg?branch=master)](https://travis-ci.com/sobomax/libelperiodic) [![Coverage Status](https://coveralls.io/repos/github/sobomax/libelperiodic/badge.svg?branch=master)](https://coveralls.io/github/sobomax/libelperiodic?branch=master) # libElPeriodic Library to run frequent periodic tasks. ## Principle of Operation The libElPeriodic is designed to simplify writing control loops that are expected to run at constant "tick" intervals with smallest possible overhead and little or no support from the underlying run time environment. The library is optimized to align active periods of the control loop to the set frequency (and optionally phase as well) by applying phase locked loop design with a proportional phase detector and a low-pass filter as an error amplifier. ## Usage Sample usage pattern is demonstrated below. The code block denoted by the square brackets will be executing 125.5 times a second, untul the value returned by the `is_runnable()` routine is non-zero. Provided of course that the "logic" does not take more than 0.01 second to run on average and that OS scheduler plays the ball. #include extern int is_runnable(void); void event_loop(void) { double frequency = 125.5; /* Hz */ void *elp; int i; prd = prdic_init(freq, 0.0); assert(prd != NULL); while (is_runnable()) { // [----------------------]; // [Insert your logic here]; // [----------------------]; prdic_procrastinate(prd); } prdic_free(prd); } ## Story It came about having to write the same code over and over again in multiple real-time projects, ranging from game [Digger](https://github.com/sobomax/digger), RTP relay server [RTPProxy](https://github.com/sippy/rtpproxy). It has also been recently utilized to replace a heavy-weight (and at the time not portable to Python 3) "Twisted" framework in the [Python Sippy B2BUA](https://github.com/sippy/b2bua) project. %package -n python3-ElPeriodic Summary: Phase-locked userland scheduling library Provides: python-ElPeriodic BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-ElPeriodic [![Build Status@GitHub](https://github.com/sobomax/libelperiodic/workflows/Main%20CI/badge.svg?branch=master)](https://github.com/sobomax/libelperiodic/actions?query=branch%3Amaster++) [![Build Status](https://travis-ci.com/sobomax/libelperiodic.svg?branch=master)](https://travis-ci.com/sobomax/libelperiodic) [![Coverage Status](https://coveralls.io/repos/github/sobomax/libelperiodic/badge.svg?branch=master)](https://coveralls.io/github/sobomax/libelperiodic?branch=master) # libElPeriodic Library to run frequent periodic tasks. ## Principle of Operation The libElPeriodic is designed to simplify writing control loops that are expected to run at constant "tick" intervals with smallest possible overhead and little or no support from the underlying run time environment. The library is optimized to align active periods of the control loop to the set frequency (and optionally phase as well) by applying phase locked loop design with a proportional phase detector and a low-pass filter as an error amplifier. ## Usage Sample usage pattern is demonstrated below. The code block denoted by the square brackets will be executing 125.5 times a second, untul the value returned by the `is_runnable()` routine is non-zero. Provided of course that the "logic" does not take more than 0.01 second to run on average and that OS scheduler plays the ball. #include extern int is_runnable(void); void event_loop(void) { double frequency = 125.5; /* Hz */ void *elp; int i; prd = prdic_init(freq, 0.0); assert(prd != NULL); while (is_runnable()) { // [----------------------]; // [Insert your logic here]; // [----------------------]; prdic_procrastinate(prd); } prdic_free(prd); } ## Story It came about having to write the same code over and over again in multiple real-time projects, ranging from game [Digger](https://github.com/sobomax/digger), RTP relay server [RTPProxy](https://github.com/sippy/rtpproxy). It has also been recently utilized to replace a heavy-weight (and at the time not portable to Python 3) "Twisted" framework in the [Python Sippy B2BUA](https://github.com/sippy/b2bua) project. %package help Summary: Development documents and examples for ElPeriodic Provides: python3-ElPeriodic-doc %description help [![Build Status@GitHub](https://github.com/sobomax/libelperiodic/workflows/Main%20CI/badge.svg?branch=master)](https://github.com/sobomax/libelperiodic/actions?query=branch%3Amaster++) [![Build Status](https://travis-ci.com/sobomax/libelperiodic.svg?branch=master)](https://travis-ci.com/sobomax/libelperiodic) [![Coverage Status](https://coveralls.io/repos/github/sobomax/libelperiodic/badge.svg?branch=master)](https://coveralls.io/github/sobomax/libelperiodic?branch=master) # libElPeriodic Library to run frequent periodic tasks. ## Principle of Operation The libElPeriodic is designed to simplify writing control loops that are expected to run at constant "tick" intervals with smallest possible overhead and little or no support from the underlying run time environment. The library is optimized to align active periods of the control loop to the set frequency (and optionally phase as well) by applying phase locked loop design with a proportional phase detector and a low-pass filter as an error amplifier. ## Usage Sample usage pattern is demonstrated below. The code block denoted by the square brackets will be executing 125.5 times a second, untul the value returned by the `is_runnable()` routine is non-zero. Provided of course that the "logic" does not take more than 0.01 second to run on average and that OS scheduler plays the ball. #include extern int is_runnable(void); void event_loop(void) { double frequency = 125.5; /* Hz */ void *elp; int i; prd = prdic_init(freq, 0.0); assert(prd != NULL); while (is_runnable()) { // [----------------------]; // [Insert your logic here]; // [----------------------]; prdic_procrastinate(prd); } prdic_free(prd); } ## Story It came about having to write the same code over and over again in multiple real-time projects, ranging from game [Digger](https://github.com/sobomax/digger), RTP relay server [RTPProxy](https://github.com/sippy/rtpproxy). It has also been recently utilized to replace a heavy-weight (and at the time not portable to Python 3) "Twisted" framework in the [Python Sippy B2BUA](https://github.com/sippy/b2bua) project. %prep %autosetup -n ElPeriodic-1.2 %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-ElPeriodic -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri May 05 2023 Python_Bot - 1.2-1 - Package Spec generated