- DataTreeCore:
- Merge TDataMember and CDataTree into => CDataMember
- Each node, incl root is now CDataMember object
- Modified function to not require BaseMember (Object is basemember)
- Split/duplicat most functions to require, or not require child path
- Added isNull/Object/Array/Sting() etc methods
- Many other methods removed or restructured
- Updated DataTree usage in: JSONparseCore,
ApplicationCore, FunctionCore, SelectableCore, WatchdogCore
- SelectableCore:
- Bug fix: correct ConnectTypeNames
- Pass handle reference to Select when adding file discriptor.
- Rename Select vars Handle -> SelectHandle
- Show type and name of handle on Select logs
- Add Resolve Delay, allow time delay before resolving address
Allow completion of other actions before blocking all to getaddr()
- Remove Handle->KeepAlive, assume always true
- SelectableCore:
- Move Serial port config params to Port/SerialConfig
- Only configure serial port if config setting provided in JSON file
- Add SerialConfig param to THandle struct, set when serial config given
- Rename method: ConfigureSerialPort() -> SetSerialPortConfig()
- New method: GetSerialPortConfig() read serial port config into Handle
- Split method SetPortHandle():
- SetPortHandle() - only set port type and address
- SetPortHandleSerial() - only set serial port parameters
- JSONparseCore:
- Bug fix: Incorrectly terminated PrintString on null
- SelectableCore:
- Add BaudRate, DataBits, Parity, StopBits, FlowCtrl, DataWait to THandle
- Include Serial Port setup in SetPortHandle()
- Read Serial Port config in LoadConfigData()
- Rename SetSerialConfig() -> ConfigureSerialPort()
- Configure Serial Port immediately after opening port
- SelectableCore:
- Split SetBuffers() into SetInBuffer() and SetOutBuffer()
- Rename SerialConfig() -> SetSerialConfig()
- Add serial port configuration (eg. baudrate) to ConfigData
- Read only no of bytes reported by FIONREAD
- DataTree:
- Bug fix: Create Int/Float/Bool params if requested
- SelectableCore:
- Split handling of Handle from Input() to InputHandle() method
- Allow multiple handles to be connected to single Channel
- Update logs to report Handle, not Channel name
- TimingCore:
- Convert all functions to inline functions in header (remove .cpp file)
- Add new function TimeLeft()
- WatchdogCore:
- Bug fix: No watchdog channel, use InputHandle() method not Input()
- Bug fix: ping ignored, use To:"watchdog" in ping command
- FunctionCore:
- Output() returns largest no of bytes written to linked input
- SelectableCore:
- Auto-manage:
- Add AutoManage param -> Persistent
- Will automatic open port if written to when Auto-Manage enabled
- Will keep port open (re-open if closed) if Persistent = true
- DNS resolve:
- Set AddressFailed if port could not open/bind
- Only use next resolved address if current address failed
- Remote Client connect not working properly
- Set Client Port no on connect
- Correctly handle create failure
- Show error on fail
- Input() fail to transfer data if Handle & Channel not same name
- Search for linked handles
- ApplicationCore:
- Rename ConfigParser -> JSONparser
- Make JSONparser a public parameter
- DataTreeCore:
- Bug fix: Insufficient memory allocation on SetValue if Len = -1
- FunctionCore_not_used:
- Started work on queued channel buffers or processing buffers
- Incomplete and temporarily abandoned due to time constraints
- Renamed modified FunctionCore -> FunctionCore_not_used
- ItemBufferCore:
- New Class for storing items in a FIFO style buffer
- FunctionCore:
- Implemented pulled input:
- Function creates static output: StoredOutput & StoredOutputLen
- Other Function pulls static output from input linked functions
- FunctionCore-ChannelBuffer:
- Tried to create a processing buffer
- Abandoned for now
- Library Clean up:
- Removed all unused C/C++ libraries from source
- First C/C++ libraries then redA libraries
- Library changes:
- renamed BufferCore -> CharBufferCore
- added ItemBufferCore
- CharBufferCore:
- Derive RollingBuffer & ShiftBuffer from common class CharBuffer
- CharBuffer is mostly a virtual class (interface)
- DataTreeCore:
- Allow types float, int & bool to be read as strings with GetStr()
- LogCore:
- Add comments to Logging parameters
- WatchDogCore:
- Call CSelectableCore::Process() in Process() to manage connect
- SelectableCore:
- Allow SetSocketHandle() to be called if Handle already set as socket
- added strlcase() method to convert string to lower case
- Update Handle structure:
- renamed Address -> HostName
- renamed PortNo -> PortName
- added AddressList for all resolved addresses
- added AddressInfo for active address
- Add ResolveAddress() method
- Domain name and protocol port resolving with GetAddrInfo()
- JSON updated:
- domain name can be provided instead of IP address
- protocol can be specified instead of Port No, e.g. "HTTP" / "SSH"
- Resolve address before connect, or use next resolved address
- CApplicationCore:
- Run() returns false if error on any Process() call
- Add TerminateOnError param to Run() method,
- if set, exit immediately if Process() on any process fails
- if not set, exit after Process() on all processes
- Remove "Terminating..." log
- FunctionCore:
- Do not auto create empty channel list
- SelectCore:
- Rename method: SetDebugLevel() -> LogLevel()
- SelectableCore:
- Do not auto create empty handles list
- Implement new ApplicationCore:
- Manage Tools: Log, DataTree, JSONparser & Selector
- Load configuration, Manage FunctionBlocks
- FunctionCore & dirived classes, SignalCore:
- affects: SelectableCore, DeviceCore, FileCore, WatchdogCore
- Do not pass Log()
- Define and pass Type
- Update/reduce included headers
- Use ProcessName and Application global vars
- Get Log, DataTree from Application
- Use virtual Init() function to set must have Channels/Handles
- DataTreeCore:
- Bug fix: Check if child members exist and destroy in SetValuePtr()
- Add method GetFirstChild with BaseMember & Path
- Bug fix: do not use RootMember if no Parent in GetChildxxx() methods
- SignalCore, SelectCore:
- Use Application->Log()
- FunctionCore:
- Add itself to Application (function list)
- Add parameter: LinkConfigMember, Type
- Use virtual LoadConfigData() to configure from DataTree
- Rename methods: LoadConfig() -> InitConfig(),
InitLogging() -> SetLogParam(), SetDebugLevel() -> SetLogLevel()
- Add method: GetType(), LoadChannelLinkData(), InitChannelLinks()
- Modify LinkIn/OutputChannel() to use name for InFunction, not pointer
- SelectableCore & Dirived classes:
- Affects DeviceCore & WatchdogClient
- Rename parameter: Select -> Selector, BaseMember -> ConfigMember
- Get Selector from Application->Selector
- Change Handles JSON structure from Array to Key:Value pairs
- Bug fix: check if Selector exist during Input()
- Bug fix: do not set PortNo if not exist
- FunctionCore:
- Fix Memory Leaks:
- Recreate Name in LoadConfig()
- Setting FirstChannel to NULL in LoadConfig()
- Fix fault on empty Log/Output in LoadConfig()
- Check if Log/Level exists in LoadConfig()
- Do not auto-create all config parameters
- SelectableCore:
- Fix Memory Leaks:
- Setting FirstHandle to NULL in LoadConfig()
- Do not auto-create all config parameters
- Update logs to specifically refer to "TCP" server/client
- CLiteProtocol:
- Set input string on methods to const char *
- Simplify checking for verification
- Ensure Length parameter can be left out on all methods
- Add quick functions for structured commands: To, From, Command
- CLogCore:
- Use only "\n", not "\r\n"
- SignalCore:
- Use std::endl instead of "\r\n"