#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"); root->addOnFinish([] { piCout << "finish"; }); 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"); PIStateFinal * s214 = new PIStateFinal([] { piCout << " + enter s214 final"; }, "s214f"); root->addStates({s1, s2, s3}); s1->addStates({s11, s12, s13}); s2->addStates({s21, s22, s23}); s21->addStates({s211, s212, s213}); // root->addState(s214); s2->setParallel(true); root->setInitialState(s2); s1->setInitialState(s11); s2->setInitialState(s21); s21->setInitialState(s213); s213->addTransition(s13, meVoid)->addAction([] { piCout << "action transition s21 -> s22"; }); s3->addTransition(s212, meVoid)->addAction([] { piCout << "action transition s1 -> s213"; }); // 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->start(); piCout << "initial" << root->isRunning() << "\n"; piCout << "active atomics" << root->activeAtomics(); root->print(); piCout << "\npost event"; posted = root->postEvent(meVoid); piCout << "posted" << posted << "\n"; piCout << "active atomics" << root->activeAtomics(); 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 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; }