Added YAS 7.1.0 package (Yet Another Serializer)
Branching off development trunk in order to arkive development trunk of inhouse serializeer. Version 4.0 will instead use the YAS serializer (Yet Another Serialzier).
Transfered the copyright from Lonfield C&D to Lonfield AB.
Added XML schema to be used by generator as well as xtUML meta model
Added a first shot at an association schema.
Added inheritance to class definitions
Replaced NonEmptyStringType with NMToken where meaningfull.
Set default state transition rule to be ILLEGAL
Added a missed type checking for state signatures
Added type integrity checks for all parameters and returns
Restructured and cleaned up the inlclusion of data types in a model.
Got type name checking working. I.e. a check that type names used for PIM variables actually exist.
Minor cleanups
Added identifier to class' member variables
Added schema for defining PSM and PIM types that can be used in a xUML model. So far only variable types are supported - NOT structured types.
Cleaned up
Added build number to the applications version tag
Added a bridge XML schema as well. Test file validates OK.
Broken out application and domain schema in separate files. Also cleaned up a bit. the test file xtu.xml now validates OK.
Added referential integrity constraint for valid state and event names in transition rules-section of FSM
Added unique keys for states and events in the FSM as well as referential integrity for selecting valid initial_state of an FSM
Separated FSM-schema into a file of its own. Broken out util types into a separate name space. Relocated old schemas.
Added new xUML description model, new XML schema as well as test file.
Updated Catch2 to version 2.13.10 (from 2.13.09).
Added a benchmark test (49_05) for Asynch ZMQ requesr-reply. Also fixed an error in testcase 49_04, which didn't use asynch communication everywhere (used synch instead).
Fixed and finished test 49_04 (working)
Added a test (TEST_CASE_49_04) for asynch communication using the ZmqTxRx-class. Also fixed some bugs in ZmqTxRx.
Added a benchmark test for synchronous Req-Rep communication over ZMQ. Also made some minor clean-up after running code checker.
Ini-file reader/writer for PSM settings
Added a fully functional, synchronous socket, Request-Reply cycle to test 49_02.
Synchronous Req-Reply transmission works accoring to test case 49_02 (not yet finished).
Cleaned up the Zmq socket classes. There is no only one ZmqSocketT<> template that can handle both the requiring side as well as the providing side of a bridge.
A commit in preparation for a restructuring and cleanup of the ZMQ-code. All tests are working.
Divided ZmqRequirerT<>'s synch and asynch processing of ZMQ requests / ZMQ replys into separate methods and state machines in order to clean up the code. Done the same in the ZMQ requirer scheduling task. The provider side needs the same treatment .
Relocated sequence number generation for SigOps to ZmqRequirerT<>. Tweaked Test_27 to make it more robust against clock sqew. Minor renaming and clean-up.
Added a template that generates an integer type that isone size larger than the input type (GetNextWiderIntegerT<>). Also added a test (43_03) to test that correct the correct, wider type is generated. The template can automatically match signed/unsigend of input types when generating the wider output type.
Moved setName()/getName() from BrdigeT<> to BridgeDeclarationT<> and fixed all occurances using BridgeT<>. All tests executes OK.
Added plog-master package for the event that this will be the one to integrated in the PSM - handlign log.
A better log solution for the PSM
A better log solution for the PSM
Added some more support classes to PsmUtils. scheduler and requiring side of ZMQ bridge is getting closer.
Code clean-up. Also added a PSM-specific exception, PsmCriticalXXXX generates a hard Abort meaning that e.g. illegal state table transitions can't be tested. SIGABRT is messy to catch and validate. Catch2 supports exception much better for testing purposes.
Now there is a working Serializable-wrapper for SigOps so that they can be first be enqueued in the outgoing requirer queue of a distributed bridge, end then be serialzied in batches just before transfer over a network to the providing side. Also added new test cases for this as well as updated all other testcases (where applicable).
Added two new tests for serialization on a grander scale, verifying correct serialzied size, as well as a benchmark for serialization. Some minor clean-up as well based on CppChecker.
Have a testable working version of the SigOp serializable wrapper (SerializableSigOpT<>). This is needed so that SigOps send over a distribuetd bridge can be queued up in a generic queueu (using virtual base pointers) and yet be serialized by the scheduler without it knowing the exact types of the SigOp. Added test_46_05 to test this SigOp serializable wrapper.
Added a serialization wrapper template SerializableSigOpT<>. This, and its base class, provides a generic interface to the scheduler for distributed bridges so that it can serialize SigOps without knowing their explicit type. SerializableSigOpT<> and its base class (SerializableSigOpBaseT<>) uses a regular virtual base construct, with virtual methods, to handle the separation between scheduling a generic SigOp and its associated type-specific serialization/deserialization. This virtula base-...
CInserted a new template class between Processable and SignalSignatureT/OperationSignatureT. This helps separate signals and operations better and enables some additional code clean up.
Corrected an error in the serialization protocol of the ZmqSigOpSerDes class. It turned out that a 1-byte unsigned integer wasn't possible to separate from a boolean type by the SigOp variable header. The specific problem was that the least significant bit of the variable header coded for 3 different things :-/
Separated serializion buffers and deserialization buffers into 2 separate class types. Fixed a race condition in the LockableOperationT<> template. Rewritten FixedQueueT<> template in order to clean up and understand the problem/solution better. Made it into a cached Lamport SPSC FIFO. Fixed tests to work with updated code.
Created a specific class for serialization/Deserialization buffers. Moved the serialization buffer outside the serializer. This prevents a copy when creating a batch of serialzie SigOps.
Cleanup & made iSsignal/isOperation methods static.
Fixed yet another bug in the LockableOperation. Some naming clean up and added the Catch 2 package to the repo so that the development environment can be recreated independent on what version is available at the official Catch repo.
Fixed the locking mechanism in the LockableOperationT template.
Started to drawn a BridgePoint-model of the distributed ZeroMQ bridge.
Moved the SigOpBatchSize parameter of the default scheduler to be a runtime settinf as opposed to a comptime setting. This makes more sense. As a results, chnaged the name of DefaultSchedulerT to DefaultScheduler (no T) since it's not a template anylonger. Also fixed test 35 that executed unecessary slow which had a bad impact on Valgrind profiling execution time.
Some code cleanup of the requirer and provider templates.
Zmq requirer & provider can now send a signal (request) and deserialize received SigOp header at the provider side. Fixed som newly found bugs.
Started fixing test 50 as well as the ZmqRequirerT<> ZmqProviderT<> templates.
Clean-up after static code analysis using CppCheck.
Fixed so that Test 49 works. Now, all tests up to and including 49 seems OK. Also some minor code clean-up.
NON-working interims.
Updated all tests for integer & boolean serialization to be compatible with the new message format.
Separated serialization tests for unsigend (TEST_46_01) and signed ints (TEST_46_02).
Corrected text 46 so that is also now checking for number of serialized variables. All tests 1-46 works.
Updated test 46 to be compatible with the new ZMQ message header format, also depicting number of variables. All tests up to 46 work.
Updated test case 45 to use 1-based SigOp IDs
Changed valid SigOp type IDs to be in the numericla region [1-255] (previously [0-255]). SigOp ID 0 (zero) will instead be used for Bridge control and status commands. Updated tests to reflect this change.
Tests 1 - 44 successfully compile and run.
Found a more optimal solution for setting and reading the SigOp type id using a ProcessableBase pointer.
Fixed the SigOp type ID solution, which didn't work using base class pointers. So, instead of an efficient compile time solution, the current is using pure virtual base method for the ProcessableBase class, having associated overhead.
Interims commit. Compiles and runs tests 43_01 & 43_02 only.
NON-WORKING interims commit. In the middle of cleaning up the distributed ZMQ-bridge.
Separated the state enums for the requiring side and providing side of a distributed bridge into separate enums.
Fixed a bug in test 43 owing to changed name for sigio tuple method names
Bumbed C++ from C++11 to C++14 in order to get access to template variables. Also got binary litterals and a number of other useful additions. This means that the next release of XTU will be version 4.0 since backward compatibility hereby is broken.
Cleaned up the requiring side of the bridge
Changed provider and requirer socket classes to be templates instead. This on order to more tightly connect socket types and their respective bridge.
NON-WORKING interims committ. Restructuring the ZQM provider and requirer sockets into separate classes in order to make the ZMQ provider and ZMQ requirer cleaner classes.
Relocated scheduling of received ZMQ signals
NON-Workin, intermis commit.
Started to convert test 50 to the new bridge code structure. Test 50 compiles and runs so far.
Merging branch restructuring_bridges into trunk
All tests up to TEST 49 run without errors.
Cleaned up the dynamic queue pusg-code and separated the queue size incremeant to its own methid. It seems as if it works.
NON-WORKING. Added locking and non-locking methods for the DynamicQueueT<> since there was race conditions between reading bridge properties (size, empty, etc) and pushing/poping items on the queue.
NON WORKING - Identified race condition for when resizing dynamic queue and also asking for properites (Empty(), Count(), etc.) at the same time.
Tests 1-41_XX works. Added two more subtest (41_03 & 41_04 for fixed size queues.
Added a non-threadsafe dynamic queue. Separated Test 41 into subtest for testing each kind of queue in its own test.
Made BridgeQueueBaseT interface more generic
Tests 1-49 works.
Tests 1-44 + 49 works
Tests 1 - 44 work.
Fixed a bug in the increment of head/tail indexes in DynamicQueueT<>.
Tests 1-41 works. Test 42 generates a segfault in the scheduler. It pops a NULL from the SigOp queue of either the ping bridge or the pong bridge.
Tests 1-40 works.
Tests 1-25 works.
Tests 1-20 works.
Tests 1-15 works. Corrected some minor bugs.