Commit 17792ffe authored by Pavel Vainerman's avatar Pavel Vainerman

(Pulse): небольшой рефакторинг интерфейса

next_step() --> setTiming()
parent 7b3d01f0
...@@ -35,24 +35,21 @@ namespace uniset ...@@ -35,24 +35,21 @@ namespace uniset
class Pulse class Pulse
{ {
public: public:
Pulse() noexcept {}
~Pulse() noexcept {}
// t1_msec - интервал "вкл" // t1_msec - интервал "вкл"
// t0_msec - интерфал "откл" // t0_msec - интерфал "откл"
inline void run( timeout_t _t1_msec, timeout_t _t0_msec ) noexcept inline void run( timeout_t _t1_msec, timeout_t _t0_msec ) noexcept
{ {
t1_msec = _t1_msec; setTiming(_t1_msec, _t0_msec, true);
t0_msec = _t0_msec;
t1.setTiming(t1_msec);
t0.setTiming(t0_msec);
set(true);
} }
inline void set_next( timeout_t _t1_msec, timeout_t _t0_msec ) noexcept inline void setTiming( timeout_t _t1_msec, timeout_t _t0_msec, bool run = false ) noexcept
{ {
t1_msec = _t1_msec; t1_msec = _t1_msec;
t0_msec = _t0_msec; t0_msec = _t0_msec;
t1.setTiming(t1_msec);
t0.setTiming(t0_msec);
set(run);
} }
inline void reset() noexcept inline void reset() noexcept
...@@ -62,7 +59,7 @@ namespace uniset ...@@ -62,7 +59,7 @@ namespace uniset
inline bool step() noexcept inline bool step() noexcept
{ {
if( !isOn ) if( !enabled )
{ {
ostate = false; ostate = false;
return false; return false;
...@@ -90,9 +87,9 @@ namespace uniset ...@@ -90,9 +87,9 @@ namespace uniset
inline void set( bool state ) noexcept inline void set( bool state ) noexcept
{ {
isOn = state; enabled = state;
if( !isOn ) if( !enabled )
ostate = false; ostate = false;
else else
{ {
...@@ -104,7 +101,7 @@ namespace uniset ...@@ -104,7 +101,7 @@ namespace uniset
friend std::ostream& operator<<(std::ostream& os, Pulse& p ) friend std::ostream& operator<<(std::ostream& os, Pulse& p )
{ {
return os << " idOn=" << p.isOn return os << " idOn=" << p.enabled
<< " t1=" << p.t1.getInterval() << " t1=" << p.t1.getInterval()
<< " t0=" << p.t0.getInterval() << " t0=" << p.t0.getInterval()
<< " out=" << p.out(); << " out=" << p.out();
...@@ -124,11 +121,16 @@ namespace uniset ...@@ -124,11 +121,16 @@ namespace uniset
return t0_msec; return t0_msec;
} }
bool isOn() const noexcept
{
return enabled;
}
protected: protected:
PassiveTimer t1; // таймер "1" PassiveTimer t1; // таймер "1"
PassiveTimer t0; // таймер "0" PassiveTimer t0; // таймер "0"
bool ostate = { false }; bool ostate = { false };
bool isOn = { false }; bool enabled = { false };
timeout_t t1_msec = { 0 }; timeout_t t1_msec = { 0 };
timeout_t t0_msec = { 0 }; timeout_t t0_msec = { 0 };
......
...@@ -4,70 +4,91 @@ ...@@ -4,70 +4,91 @@
#include "UniSetTypes.h" #include "UniSetTypes.h"
using namespace std; using namespace std;
using namespace uniset; using namespace uniset;
// -----------------------------------------------------------------------------
TEST_CASE("Pulse", "[Test for class 'Pulse' - impulse generator]" ) TEST_CASE("Pulse: default", "[pulse][default]" )
{ {
SECTION( "Default constructor" ) // Работа без задержки..(нулевые задержки)
{ Pulse p;
// Работа без задержки..(нулевые задержки)
Pulse p; REQUIRE( p.getT1() == 0 );
REQUIRE( p.getT0() == 0 );
REQUIRE( p.getT1() == 0 ); CHECK_FALSE( p.out() );
REQUIRE( p.getT0() == 0 );
CHECK_FALSE( p.out() ); p.step();
p.step();
CHECK_FALSE( p.out() );
}
// -----------------------------------------------------------------------------
TEST_CASE("Pulse: basic tests", "[pulse][basic]" )
{
Pulse p;
p.run(100, 60); // 100 msec ON..60 msec OFF
CHECK( p.step() );
p.step(); msleep(80);
p.step(); CHECK( p.step() );
CHECK_FALSE( p.out() );
}
SECTION( "Working" ) msleep(30);
{ CHECK_FALSE( p.step() ); // 10 - OFF
Pulse p;
p.run(100, 60); // 100 msec ON..60 msec OFF
CHECK( p.step() );
msleep(80); msleep(70);
CHECK( p.step() ); CHECK( p.step() ); // 20 - ON
msleep(30); msleep(100);
CHECK_FALSE( p.step() ); // 10 - OFF CHECK_FALSE( p.step() ); // 20 OFF
msleep(70); p.set(false);
CHECK( p.step() ); // 20 - ON msleep(100);
CHECK_FALSE( p.step() );
msleep(60);
CHECK_FALSE( p.step() );
msleep(100); p.set(true);
CHECK_FALSE( p.step() ); // 20 OFF msleep(70);
CHECK( p.step() );
msleep(40);
CHECK_FALSE( p.step() );
p.set(false); p.reset();
msleep(100); CHECK( p.step() );
CHECK_FALSE( p.step() ); msleep(110);
msleep(60); CHECK_FALSE( p.step() );
CHECK_FALSE( p.step() );
// проверка того, что при познем вызове step
// тоже всё будет хорошо..
p.reset();
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(2050);
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(70);
CHECK( p.step() );
}
// -----------------------------------------------------------------------------
TEST_CASE("Pulse: ext tests", "[pulse][ext]" )
{
Pulse p;
p.setTiming(50,100,false);
REQUIRE_FALSE( p.isOn() );
p.set(true); p.set(true);
msleep(70); REQUIRE( p.isOn() );
CHECK( p.step() ); REQUIRE( p.step() );
msleep(40); msleep(60);
CHECK_FALSE( p.step() ); REQUIRE_FALSE( p.step() );
msleep(110);
REQUIRE( p.step() );
p.reset(); p.set(false);
CHECK( p.step() ); REQUIRE_FALSE( p.isOn() );
msleep(110); REQUIRE_FALSE( p.step() );
CHECK_FALSE( p.step() );
// проверка того, что при познем вызове step p.setTiming(50,100,true);
// тоже всё будет хорошо.. REQUIRE( p.isOn() );
p.reset(); REQUIRE( p.step() );
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(2050);
CHECK( p.step() );
msleep(110);
CHECK_FALSE( p.step() );
msleep(70);
CHECK( p.step() );
}
} }
// -----------------------------------------------------------------------------
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment