Files
pip/main.cpp
peri4 3db26a762c first state machine code, exclusive already works
need to make final, parallel, timeouts
2024-07-17 14:16:25 +03:00

149 lines
5.0 KiB
C++

#include "pibytearray.h"
#include "picodeparser.h"
#include "piiostream.h"
#include "pijson.h"
#include "piliterals_time.h"
#include "pimathbase.h"
#include "pip.h"
#include "pivaluetree_conversions.h"
using namespace PICoutManipulators;
enum MyEvent {
meVoid,
meInt,
meString,
meIntString,
};
int main(int argc, char * argv[]) {
bool posted;
PIStateMachine * root = new PIStateMachine("Machine");
PIStateLambda * s1 = new PIStateLambda([] { piCout << "+ enter s1"; }, [] { piCout << "- exit s1"; }, "s1");
PIStateLambda * s2 = new PIStateLambda([] { piCout << "+ enter s2"; }, [] { piCout << "- exit s2"; }, "s2");
PIStateLambda * s3 = new PIStateLambda([] { piCout << "+ enter s3"; }, [] { piCout << "- exit s3"; }, "s3");
PIStateLambda * s11 = new PIStateLambda([] { piCout << " + enter s11"; }, [] { piCout << " - exit s11"; }, "s11");
PIStateLambda * s12 = new PIStateLambda([] { piCout << " + enter s12"; }, [] { piCout << " - exit s12"; }, "s12");
PIStateLambda * s13 = new PIStateLambda([] { piCout << " + enter s13"; }, [] { piCout << " - exit s13"; }, "s13");
PIStateLambda * s21 = new PIStateLambda([] { piCout << " + enter s21"; }, [] { piCout << " - exit s21"; }, "s21");
PIStateLambda * s22 = new PIStateLambda([] { piCout << " + enter s22"; }, [] { piCout << " - exit s22"; }, "s22");
PIStateLambda * s23 = new PIStateLambda([] { piCout << " + enter s23"; }, [] { piCout << " - exit s23"; }, "s23");
PIStateLambda * s211 = new PIStateLambda([] { piCout << " + enter s211"; }, [] { piCout << " - exit s211"; }, "s211");
PIStateLambda * s212 = new PIStateLambda([] { piCout << " + enter s212"; }, [] { piCout << " - exit s212"; }, "s212");
PIStateLambda * s213 = new PIStateLambda([] { piCout << " + enter s213"; }, [] { piCout << " - exit s213"; }, "s213");
root->addStates({s1, s2, s3});
s1->addStates({s11, s12, s13});
s2->addStates({s21, s22, s23});
s21->addStates({s211, s212, s213});
s1->setInitialState(s11);
s2->setInitialState(s22);
s21->setInitialState(s213);
s1->addTransition(s213, meVoid)->addAction([] { piCout << "action transition s1 -> s213"; });
s21->addTransition(s22, meVoid)->addAction([] { piCout << "action transition s21 -> s22"; });
// s2->addTransition(s3, meInt)->addGuard([](int i) { return i == 1; });
// s3->addTransition(s1, meIntString)->addGuard([](int i, PIString str) { return i == 2 && str == "hello"; });
root->setInitialState(s1);
root->start();
piCout << "initial\n";
root->print();
// piCout << root->postEvent(meVoid);
// piCout << root->postEvent(meInt, 1);
piCout << "\npost event";
posted = root->postEvent(meVoid);
piCout << "posted" << posted << "\n";
root->print();
piCout << "\npost event";
posted = root->postEvent(meVoid);
piCout << "posted" << posted << "\n";
root->print();
/*root->addStates({s1, s2, s3});
root->setInitialState(s1);
root->start();
piCout << root->postEvent(meVoid);
piCout << "";
piCout << root->postEvent(meInt, 0.5f);
piCout << "";
piCout << root->postEvent(meInt, 0);
piCout << "";
piCout << root->postEvent(meInt, 1);
piCout << "";
piCout << root->postEvent(meIntString, 2, "hello");
piCout << "";
piCout << root->postEvent(meIntString, 2, PIString("hello"));
piCout << "";*/
delete root;
/*PISerial ser;
ser.setSpeed(PISerial::S115200);
piCout << ser.open("COM15", PIIODevice::ReadWrite);
CONNECTL(&ser, threadedReadEvent, ([](const uchar * data, ssize_t size) { piCout << PIByteArray(data, size); }));
ser.startThreadedRead();
(2_s).sleep();
ser.stopAndWait();*/
/*auto test = [](PISystemTime t) {
piCout << "---------------";
piCout << t << t.toString();
piCout << PISystemTime::fromString(t.toString()) << PISystemTime::fromString(t.toString()).toString();
piCout << PIVariant(t);
piCout << PIVariant(t).toString();
};
auto test_str = [](PIString s) {
piCout << "---------------";
piCout << s;
piCout << PISystemTime::fromString(s) << PISystemTime::fromString(s).toString();
};
test(PISystemTime::current());
test(1000.123_d);
test(61_s);
test(59_s);
test(1234_us);
test(5000001_ns);
test_str("");
test_str("2020-05-04");
test_str("2020-05-04 11:12:13");
test_str("11:12:13");
test_str("11:12:13.405");
test_str("100");
test_str("5 s");
test_str("5s");
test_str("1000 d 2 h 57 m 7 s 200 ms 2 ns");
test_str("0.2 d");
test_str(".5d");
test_str("3E+2us");
test_str("0.1d 200millis");
test_str("2h 15 seconds");
test_str("4secs 2hours 100 ns 3m 5ms 1 day 6 micros ");
test_str("1hz");
test_str("5.123khz");
test_str("5khz 123 hz");
test_str("2mhz");
test_str("1ghz");
test_str("1hz 1hz");*/
// PIPair<int, PIString> p = createPIPair(0, "");
/*PIConfig conf("model.conf");
piCout << "****** config\n" << conf.allLeaves() << "******\n";
PIValueTree vt = PIValueTreeConversions::fromTextFile("model.conf");
piCout << "****** tree";
vt.forEachRecursive(
[](const PIValueTree & v, const PIString & fn) { piCout << fn << "=" << v.value().toString() << "#" << v.comment(); });
piCout << "******";*/
return 0;
}