Important Update:

- Switch from malloc/free -> new/delete for structures
- Bug fix: Move Parameter groups to Device (not class)
- Update Parameter groups:
  - Update Read/Write indicators as params are added
This commit is contained in:
Charl Wentzel
2018-12-13 12:41:37 +02:00
parent dc76d99b58
commit f1be4e9540
3 changed files with 59 additions and 34 deletions

View File

@@ -32,6 +32,8 @@ typedef struct SDeviceParam TDeviceParam;
typedef struct SDeviceParamGroup TDeviceParamGroup;
typedef struct SDeviceParamItem TDeviceParamItem;
//---------------------------------------------------------------------------
// Devices with are polled
struct SDevice {
// Device definition
@@ -43,7 +45,8 @@ struct SDevice {
bool Online = false;
// Device parameters
TDeviceParam * FirstParam = NULL;
TDeviceParam * FirstParam = NULL;
TDeviceParamGroup * FirstParamGroup = NULL;
// Device peer list
TDevice * Next = NULL;
@@ -82,6 +85,10 @@ struct SDeviceParamGroup {
char * Name = NULL;
TDevice * Device = NULL;
TDeviceParamItem * FirstParam = NULL;
bool Read = false;
bool Write = false;
TDeviceParamGroup * NextGroup = NULL;
};
@@ -112,8 +119,6 @@ protected:
TDevice * FirstDevice = NULL;
TDevice * ActiveDevice = NULL;
TDeviceParamGroup * FirstParamGroup = NULL;
// Standard channels
TChannel * DeviceChannel = NULL;
TChannel * CmdChannel = NULL;
@@ -215,13 +220,13 @@ protected:
bool DestroyParamItem( TDeviceParamItem ** Item );
// Find Param Groups
inline TDeviceParamGroup * GetParamGroup( const char * GroupName ) {
TDeviceParamGroup ** Group = GetParamGroupPtr( GroupName );
inline TDeviceParamGroup * GetParamGroup( TDevice * Device, const char * GroupName ) {
TDeviceParamGroup ** Group = GetParamGroupPtr( Device, GroupName );
return (Group)? *Group : NULL;
}
inline TDeviceParamGroup ** GetParamGroupPtr( const char * GroupName ) {
if (!GroupName || !*GroupName) return NULL;
TDeviceParamGroup ** Group = &FirstParamGroup;
inline TDeviceParamGroup ** GetParamGroupPtr( TDevice * Device, const char * GroupName ) {
if (!Device || !GroupName || !*GroupName) return NULL;
TDeviceParamGroup ** Group = &(Device->FirstParamGroup);
while (*Group && strcasecmp( (*Group)->Name, GroupName ))
Group = &((*Group)->NextGroup);
return Group;
@@ -302,12 +307,12 @@ public:
// Manage Param Groups
TDeviceParamGroup * AddParamGroup( TDevice * Device, const char * GroupName );
inline bool DestroyParamGroup( const char * GroupName ) {
TDeviceParamGroup ** Group = GetParamGroupPtr( GroupName );
inline bool DestroyParamGroup( TDevice * Device, const char * GroupName ) {
TDeviceParamGroup ** Group = GetParamGroupPtr( Device, GroupName );
return (Group)? DestroyParamGroup( Group ) : false;
};
TDeviceParamItem * AddParamItem( TDeviceParamGroup * Group, const char * ParamName );
inline bool DestroyParamItem( TDeviceParamGroup * Group, const char * ParamName ) {
inline bool DestroyParamItem( TDevice * Device, TDeviceParamGroup * Group, const char * ParamName ) {
TDeviceParamItem ** Item = GetParamItemPtr( Group, ParamName );
return (Item)? DestroyParamItem( Item ) : false;
};