From 5271c1a88abd9652eff5bebaac65a813cf971860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 24 Dec 2025 12:33:41 +0100 Subject: [PATCH 001/103] Updated iteration to for loop style from while iteration --- ...print_data_descriptor_and_calculater_sample_rate.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index a373d70..dc3b61a 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -22,18 +22,18 @@ int main(void) daqList* availableSignals = NULL; daqDevice_getSignalsRecursive(simulator, &availableSignals, NULL); - daqIterator* iterator = NULL; - daqList_createStartIterator(availableSignals, &iterator); - daqConstCharPtr signalNameConstChar = NULL; daqString_getCharPtr(signalName, &signalNameConstChar); daqSignal* wantedSignal = NULL; - while (daqIterator_moveNext(iterator) == DAQ_SUCCESS) + daqSizeT listSize = 0; + daqList_getCount(availableSignals, &listSize); + + for (daqSizeT i = 0; i < listSize; i++) { daqSignal* currentSignal = NULL; - daqIterator_getCurrent(iterator, (daqBaseObject**)¤tSignal); + daqList_getItemAt(availableSignals, i, (daqBaseObject**) ¤tSignal); daqDataDescriptor* signalDescriptor = NULL; daqSignal_getDescriptor(currentSignal, &signalDescriptor); @@ -55,7 +55,6 @@ int main(void) daqReleaseRef(currentSignal); } - daqReleaseRef(iterator); daqReleaseRef(availableSignals); daqDataDescriptor* dataDescriptor = NULL; From 44da1ba1738bc564d75872c20b6aaf7e8b486cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 24 Dec 2025 13:13:45 +0100 Subject: [PATCH 002/103] Added a utility method for retrieval of sample rate from domain data descriptor --- examples/util_headers/daq_utils.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index c2bac9b..dc4a67d 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -39,6 +39,12 @@ static inline void printDaqFormattedString(const char* string, daqString* daqStr */ static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader, daqDataDescriptor** domainDescriptor); +/* + * Method that takes the tick resolution from domain data descriptor + * and returns the calculated sample rate. + */ +static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); + void daqSleepMs(int milliseconds) { #ifdef _WIN32 @@ -286,4 +292,21 @@ static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader return DAQ_SUCCESS; return DAQ_ERR_INVALID_DATA; +} + +static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor) +{ + daqRatio* ratio = NULL; + daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); + + daqInt numerator = 1; + daqRatio_getNumerator(ratio, &numerator); + + daqInt denominator = 1; + daqRatio_getDenominator(ratio, &denominator); + + *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator); + + daqReleaseRef(ratio); + return DAQ_SUCCESS; } \ No newline at end of file From d4b9472984f44bf799074862062b7a5bf5029b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 10:39:05 +0100 Subject: [PATCH 003/103] 2.0 example draft --- examples/2_0_tree_traversal.c | 25 +++++++++++++++++++++++++ examples/CMakeLists.txt | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 examples/2_0_tree_traversal.c diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c new file mode 100644 index 0000000..1c3527a --- /dev/null +++ b/examples/2_0_tree_traversal.c @@ -0,0 +1,25 @@ +/* + * In this example we will demonstrate the structure of openDAQ tree structure + * by traversing across it. + * + * + */ + +#include + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + // Example code + + daqReleaseRef(instance); + daqReleaseRef(simulator); + daqReleaseRef(simulatorInstance); + return 0; +} \ No newline at end of file diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6cd68e7..98672a5 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,7 +12,8 @@ set(C_MODIFIED_EXAMPLES 5_stream_reader_read_in_loop.c 6_read_with_formatted_timestamps.c 7_print_data_descriptor_and_calculater_sample_rate.c - 8_create_and_read_sample_rate_buffers.c) + 8_create_and_read_sample_rate_buffers.c + 2_0_tree_traversal.c) foreach(src ${C_MODIFIED_EXAMPLES}) From 1e67a957f62108a40bb4851d5b0f3037364b4273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 11:21:02 +0100 Subject: [PATCH 004/103] tree_traversal example update --- examples/2_0_tree_traversal.c | 40 +++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 1c3527a..e42402d 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -1,8 +1,6 @@ /* - * In this example we will demonstrate the structure of openDAQ tree structure - * by traversing across it. - * - * + * In this example we will demonstrate the structure of openDAQ tree structure + * by traversing across it. */ #include @@ -17,6 +15,40 @@ int main() addSimulator(&simulator, &instance); // Example code + daqList* listOfComponents = NULL; + daqList_createList(&listOfComponents); + // Go through all the folders that are available on the device + daqFolder* simulatorIOFolder = NULL; + daqDevice_getInputsOutputsFolder(simulator, &simulatorIOFolder); + + daqList* simulatorIOItems = NULL; + daqSearchFilter* filterIOAny = NULL; + daqSearchFilter_createAnySearchFilter(&filterIOAny); + daqFolder_getItems(simulatorIOFolder, &simulatorIOItems, filterIOAny); + + daqIterator* ioItemsIterator = NULL; + daqList_createStartIterator(simulatorIOItems, &ioItemsIterator); + + while (daqIterator_moveNext(ioItemsIterator) == DAQ_SUCCESS) + { + daqDataDescriptor* ioItem = NULL; + daqIterator_getCurrent(ioItemsIterator, &ioItem); + + daqDict* itemMetadata = NULL; + daqDataDescriptor_getMetadata(ioItem, &itemMetadata); + + + } + + daqReleaseRef(ioItemsIterator); + daqReleaseRef(filterIOAny); + daqReleaseRef(simulatorIOItems); + daqReleaseRef(simulatorIOFolder); + // Search for all the signals + + // Check for additional devices + + // Repeat the procedure for all connected devices (recursively) daqReleaseRef(instance); daqReleaseRef(simulator); From 6b346c185f1835ae9a25e3b90b91a6595538956f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 15:07:17 +0100 Subject: [PATCH 005/103] Updated Tree traversal example --- examples/2_0_tree_traversal.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index e42402d..3f71400 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -5,6 +5,21 @@ #include +typedef enum ComponentType +{ + Unknown = 0, + Device, + FunctionBlock, + IOFolder, + Channel, + Server, + Signal, + Folder, + Component, + SyncComponent, + InputPort +}; + int main() { daqInstance* simulatorInstance = NULL; @@ -14,7 +29,6 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - // Example code daqList* listOfComponents = NULL; daqList_createList(&listOfComponents); // Go through all the folders that are available on the device @@ -26,6 +40,7 @@ int main() daqSearchFilter_createAnySearchFilter(&filterIOAny); daqFolder_getItems(simulatorIOFolder, &simulatorIOItems, filterIOAny); + // Going through the components in IOFolder daqIterator* ioItemsIterator = NULL; daqList_createStartIterator(simulatorIOItems, &ioItemsIterator); @@ -38,6 +53,9 @@ int main() daqDataDescriptor_getMetadata(ioItem, &itemMetadata); + + daqReleaseRef(itemMetadata); + daqReleaseRef(ioItem); } daqReleaseRef(ioItemsIterator); From eb83099076f967102757dff8001b58e028f7c461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 9 Jan 2026 16:00:54 +0100 Subject: [PATCH 006/103] Added first iteration of tree traversal --- examples/2_0_tree_traversal.c | 277 +++++++++++++++++++++++++++++++++- 1 file changed, 274 insertions(+), 3 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 3f71400..fd6f027 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -20,6 +20,279 @@ typedef enum ComponentType InputPort }; +struct ComponentInfo +{ + daqComponent* reference; + enum ComponentType type; +}; + + + +void componentTreePrintOut(daqDevice* headDevice) +{ + // Device -> Folder -> FB/Channel -> Signal + // \-> SyncComponent + + /* + * daqDevice_getDevices() + * Device checklist: + * daqDevice_getInputsOutputsFolder() + * daqDevice_getFunctionBlocks() + * daqDevice_getSyncComponent() + * daqDevice_getServers() + */ + + daqFolder* ioFolder = NULL; + daqDevice_getInputsOutputsFolder(headDevice, &ioFolder); + + daqList* devices = NULL; + daqDevice_getDevices(headDevice, &devices, NULL); + + daqList* functionBlocks = NULL; + daqDevice_getFunctionBlocks(headDevice, &functionBlocks, NULL); + + daqSyncComponent* syncComponent = NULL; + daqDevice_getSyncComponent(headDevice, &syncComponent); + + daqList* servers = NULL; + daqDevice_getServers(headDevice, &servers); + + /* + * daqFolder_getItems + * IOFolder checklist: + * daqList zapelji se skozi celoten seznam in pošlji vsako posebej naprej + * (Spremeni pogled na function block na pogled na kanal (Channel) in iz njega pridobi zaznamke (tags) in si jih shrani) + * daqFunctionBlock_getFunctionBlocks() + * daqFunctionBlock_getInputPorts() + * daqFunctionBlock_getSignals() + */ + + daqList* itemsIOFolder = NULL; + daqFolder_getItems(ioFolder, &itemsIOFolder, NULL); + + daqList* functionBlocks = NULL; + daqFunctionBlock_getFunctionBlocks((daqFunctionBlock*) ioFolder, &functionBlocks, NULL); + + daqList* inputPorts = NULL; + daqFunctionBlock_getInputPorts((daqFunctionBlock*) ioFolder, &inputPorts, NULL); + + daqList* listOfSignals = NULL; + daqFunctionBlock_getSignals((daqFunctionBlock*) ioFolder, &listOfSignals, NULL); + + /* + * daqFunctionBlock_getFunctionBlocks() + * Function Block checklist: + * daqFunctionBlock_getInputPorts() + * daqFunctionBlock_getSignals() + */ + + // Function block checks are the same as above + + /* + * Input ports checklist: + * daqInputPort_getSignals() + */ + + daqInputPort* inputPort = NULL; + daqBaseObject* inputPortObj = NULL; + daqList_getItemAt(inputPorts, 0, &inputPortObj); + daqQueryInterface(inputPortObj, DAQ_INPUT_PORT_INTF_ID, &inputPort); + + daqSignal* signal = NULL; + daqInputPort_getSignal(inputPort, &signal); + + /* + * Server folder checklist: + * daqServer_getSignals() + * daqServer_getStreaming() + */ + + daqServer* server = NULL; + daqBaseObject* serverObj = NULL; + daqList_getItemAt(servers, 0, &serverObj); + daqQueryInterface(serverObj, DAQ_SERVER_INTF_ID, &server); + + daqList* signals = NULL; + daqServer_getSignals(server, &signals, NULL); + + daqStreaming* streaming = NULL; + daqServer_getStreaming(server, &streaming); + + /* + * Sync Component checklist: + * samo to kar je na njemu (torej samo pointer do objekta je dovolj) + */ + + /* + * Signal checklist: + * tisto kar je, več ni potrebno + */ + +} + +// Note: The case when getters fial should be handled so no crashes happen (at least not from this) + +void printDevice(daqDevice* device) +{ + // Missing printing of itself. + + daqFolder* ioFolder = NULL; + daqDevice_getInputsOutputsFolder(device, &ioFolder); + if (ioFolder != NULL) + { + printFolder(ioFolder); + daqReleaseRef(ioFolder); + } + + daqSyncComponent* syncComponent = NULL; + daqDevice_getSyncComponent(device, &syncComponent); + if (syncComponent != NULL) + { + printSyncComponent(syncComponent); + daqReleaseRef(syncComponent); + } + + // The following Structures can appear in multiples, so we handle each and everyone of them. + daqList* devices = NULL; + daqDevice_getDevices(device, &devices, NULL); + if (devices != NULL) + { + daqSizeT numberOfSubdevices = 0; + daqList_getCount(devices, &numberOfSubdevices); + + for (daqSizeT i = 0; i < numberOfSubdevices; i++) + { + daqDevice* currentSubdevice = NULL; + daqList_getItemAt(devices, i, ¤tSubdevice); + + printDevice(currentSubdevice); + daqReleaseRef(currentSubdevice); + } + daqReleaseRef(devices); + } + + daqList* functionBlocks = NULL; + daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); + if (functionBlocks != NULL) { + daqSizeT numberOfFunctionBlocks = 0; + daqList_getCount(functionBlocks, &numberOfFunctionBlocks); + + for (daqSizeT i = 0; i < numberOfFunctionBlocks; i++) + { + daqFunctionBlock* currentFunctionBlock = NULL; + daqList_getItemAt(functionBlocks, i, ¤tFunctionBlock); + + printFunctionBlock(currentFunctionBlock); + daqReleaseRef(currentFunctionBlock); + } + daqReleaseRef(functionBlocks); + } + + daqList* servers = NULL; + daqDevice_getServers(device, &servers); + if (servers != NULL) + { + daqSizeT numberOfServers = 0; + daqList_getCount(servers, &numberOfServers); + + for (daqSizeT i = 0; i < numberOfServers; i++) + { + daqServer* currentServer = NULL; + daqList_getItemAt(servers, i, ¤tServer); + + printServer(currentServer); + daqReleaseRef(currentServer); + } + daqReleaseRef(servers); + } +} + +void printFunctionBlock(daqFunctionBlock* functionBlock) +{ + // Missing self display + + daqList* functionBlocks = NULL; + daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); + if (functionBlocks != NULL) + { + daqSizeT numberOfFunctionBlocks = 0; + daqList_getCount(functionBlocks, &numberOfFunctionBlocks); + + for (daqSizeT i = 0; i < numberOfFunctionBlocks; i++) + { + daqFunctionBlock* currentFunctionBlock = NULL; + daqList_getItemAt(functionBlocks, i, ¤tFunctionBlock); + + printFunctionBlock(currentFunctionBlock); + daqReleaseRef(currentFunctionBlock); + } + daqReleaseRef(functionBlocks); + } + + daqList* inputPorts = NULL; + daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); + if (inputPorts != NULL) + { + daqSizeT numberOfInputPorts = 0; + daqList_getCount(inputPorts, &numberOfInputPorts); + + for (daqSizeT i = 0; i < numberOfInputPorts; i++) + { + daqInputPort* currentInputPort = NULL; + daqList_getItemAt(inputPorts, i, ¤tInputPort); + + printInputPort(currentInputPort); + daqReleaseRef(currentInputPort); + } + daqReleaseRef(inputPorts); + } + + daqList* listOfSignals = NULL; + daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); + if (listOfSignals != NULL) + { + daqSizeT numberOfSignals = 0; + daqList_getCount(listOfSignals, &numberOfSignals); + + for (daqSizeT i = 0; i < numberOfSignals; i++) + { + daqSignal* currentSignal = NULL; + daqList_getItemAt(listOfSignals, i, ¤tSignal); + + printSignal(currentSignal); + daqReleaseRef(currentSignal); + } + daqReleaseRef(listOfSignals); + } +} + +void printFolder(daqFolder* folder) +{ + // Self descriptrion + + // Items +} + +void printServer(daqServer* sserver) +{ + +} + +void printSyncComponent(daqSyncComponent* syncComp) +{ + +} + +void printInputPort(daqInputPort* inputPort) +{ + +} + +void printSignal(daqSignal* signal) +{ + +} + int main() { daqInstance* simulatorInstance = NULL; @@ -52,8 +325,6 @@ int main() daqDict* itemMetadata = NULL; daqDataDescriptor_getMetadata(ioItem, &itemMetadata); - - daqReleaseRef(itemMetadata); daqReleaseRef(ioItem); } @@ -66,7 +337,7 @@ int main() // Check for additional devices - // Repeat the procedure for all connected devices (recursively) + // Repeat the procedure for all connected devices daqReleaseRef(instance); daqReleaseRef(simulator); From 0fafd54d3fbb4984a543438fbf220068501b7017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 12 Jan 2026 10:27:32 +0100 Subject: [PATCH 007/103] Updated framework of the example --- examples/2_0_tree_traversal.c | 217 ++++++++++++++++++++++------------ 1 file changed, 143 insertions(+), 74 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index fd6f027..4420465 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -26,7 +26,7 @@ struct ComponentInfo enum ComponentType type; }; - +// Note: The case when getters fail should be handled so no crashes happen (at least not from this). void componentTreePrintOut(daqDevice* headDevice) { @@ -130,7 +130,114 @@ void componentTreePrintOut(daqDevice* headDevice) } -// Note: The case when getters fial should be handled so no crashes happen (at least not from this) +void printObjectList(daqList* list) +{ + // Check for emptyness of list should be done outside + daqBaseObject* listMember = NULL; + daqList_getItemAt(list, 0, &listMember); + enum ComponentType componentType = Unknown; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_DEVICE_INTF_ID) && (componentType == Unknown)) + componentType = Device; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SERVER_INTF_ID) && (componentType == Unknown)) + componentType = Server; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == Unknown)) + componentType = SyncComponent; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == Unknown)) + componentType = FunctionBlock; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FOLDER_INTF_ID) && (componentType == Unknown)) + componentType = Folder; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_INPUT_PORT_INTF_ID) && (componentType == Unknown)) + componentType = InputPort; + + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SIGNAL_INTF_ID) && (componentType == Unknown)) + componentType = Signal; + + daqSizeT numberOfObjects = 0; + daqList_getCount(list, &numberOfObjects); + + for (daqSizeT i = 0; i < numberOfObjects; i++) + { + daqList_getItemAt(list, i, &listMember); + + switch (componentType) + { + case Device: + { + daqDevice* device = NULL; + daqQueryInterface(listMember, DAQ_DEVICE_INTF_ID, &device); + printDevice(device); + daqReleaseRef(device); + daqReleaseRef(listMember); + break; + } + case Server: + { + daqServer* server = NULL; + daqQueryInterface(listMember, DAQ_SERVER_INTF_ID, &server); + printServer(server); + daqReleaseRef(server); + daqReleaseRef(listMember); + break; + } + case SyncComponent: + { + daqSyncComponent* syncComponent = NULL; + daqQueryInterface(listMember, DAQ_SYNC_COMPONENT_INTF_ID, &syncComponent); + printSyncComponent(syncComponent); + daqReleaseRef(syncComponent); + daqReleaseRef(listMember); + break; + } + case FunctionBlock: + { + daqFunctionBlock* functionBlock = NULL; + daqQueryInterface(listMember, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); + printFunctionBlock(functionBlock); + daqReleaseRef(functionBlock); + daqReleaseRef(listMember); + break; + } + case Folder: + { + daqFolder* folder = NULL; + daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &folder); + printFolder(folder); + daqReleaseRef(folder); + daqReleaseRef(listMember); + break; + } + case InputPort: + { + daqInputPort* inputPort = NULL; + daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &inputPort); + printInputPort(inputPort); + daqReleaseRef(inputPort); + daqReleaseRef(listMember); + break; + } + case Signal: + { + daqSignal* signal = NULL; + daqQueryInterface(listMember, DAQ_SIGNAL_INTF_ID, &signal); + printSignal(signal); + daqReleaseRef(signal); + daqReleaseRef(listMember); + break; + } + default: + { + daqReleaseRef(listMember); + break; + } + } + } +} void printDevice(daqDevice* device) { @@ -157,34 +264,15 @@ void printDevice(daqDevice* device) daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) { - daqSizeT numberOfSubdevices = 0; - daqList_getCount(devices, &numberOfSubdevices); - - for (daqSizeT i = 0; i < numberOfSubdevices; i++) - { - daqDevice* currentSubdevice = NULL; - daqList_getItemAt(devices, i, ¤tSubdevice); - - printDevice(currentSubdevice); - daqReleaseRef(currentSubdevice); - } + printObjectList(devices); daqReleaseRef(devices); } daqList* functionBlocks = NULL; daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); - if (functionBlocks != NULL) { - daqSizeT numberOfFunctionBlocks = 0; - daqList_getCount(functionBlocks, &numberOfFunctionBlocks); - - for (daqSizeT i = 0; i < numberOfFunctionBlocks; i++) - { - daqFunctionBlock* currentFunctionBlock = NULL; - daqList_getItemAt(functionBlocks, i, ¤tFunctionBlock); - - printFunctionBlock(currentFunctionBlock); - daqReleaseRef(currentFunctionBlock); - } + if (functionBlocks != NULL) + { + printObjectList(functionBlocks); daqReleaseRef(functionBlocks); } @@ -192,17 +280,7 @@ void printDevice(daqDevice* device) daqDevice_getServers(device, &servers); if (servers != NULL) { - daqSizeT numberOfServers = 0; - daqList_getCount(servers, &numberOfServers); - - for (daqSizeT i = 0; i < numberOfServers; i++) - { - daqServer* currentServer = NULL; - daqList_getItemAt(servers, i, ¤tServer); - - printServer(currentServer); - daqReleaseRef(currentServer); - } + printObjectList(servers); daqReleaseRef(servers); } } @@ -215,17 +293,7 @@ void printFunctionBlock(daqFunctionBlock* functionBlock) daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) { - daqSizeT numberOfFunctionBlocks = 0; - daqList_getCount(functionBlocks, &numberOfFunctionBlocks); - - for (daqSizeT i = 0; i < numberOfFunctionBlocks; i++) - { - daqFunctionBlock* currentFunctionBlock = NULL; - daqList_getItemAt(functionBlocks, i, ¤tFunctionBlock); - - printFunctionBlock(currentFunctionBlock); - daqReleaseRef(currentFunctionBlock); - } + printObjectList(functionBlocks); daqReleaseRef(functionBlocks); } @@ -233,17 +301,7 @@ void printFunctionBlock(daqFunctionBlock* functionBlock) daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); if (inputPorts != NULL) { - daqSizeT numberOfInputPorts = 0; - daqList_getCount(inputPorts, &numberOfInputPorts); - - for (daqSizeT i = 0; i < numberOfInputPorts; i++) - { - daqInputPort* currentInputPort = NULL; - daqList_getItemAt(inputPorts, i, ¤tInputPort); - - printInputPort(currentInputPort); - daqReleaseRef(currentInputPort); - } + printObjectList(inputPorts); daqReleaseRef(inputPorts); } @@ -251,17 +309,7 @@ void printFunctionBlock(daqFunctionBlock* functionBlock) daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); if (listOfSignals != NULL) { - daqSizeT numberOfSignals = 0; - daqList_getCount(listOfSignals, &numberOfSignals); - - for (daqSizeT i = 0; i < numberOfSignals; i++) - { - daqSignal* currentSignal = NULL; - daqList_getItemAt(listOfSignals, i, ¤tSignal); - - printSignal(currentSignal); - daqReleaseRef(currentSignal); - } + printObjectList(listOfSignals); daqReleaseRef(listOfSignals); } } @@ -270,29 +318,50 @@ void printFolder(daqFolder* folder) { // Self descriptrion - // Items + daqList* listOfItems = NULL; + daqFolder_getItems(folder, &listOfItems, NULL); + if (listOfItems != NULL) + { + printObjectList(listOfItems); + daqReleaseRef(listOfItems); + } } -void printServer(daqServer* sserver) +void printServer(daqServer* server) { + // Self description + daqList* listOfSignals = NULL; + daqServer_getSignals(server, &listOfSignals, NULL); + if (listOfSignals != NULL) + { + printObjectList(listOfSignals); + daqReleaseRef(listOfSignals); + } } void printSyncComponent(daqSyncComponent* syncComp) { - + // Leaf node + // Self description } void printInputPort(daqInputPort* inputPort) { - + // Self description } void printSignal(daqSignal* signal) { - + // Leaf node + // Self Description } +// There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) +// The IOFolder would use get signals as a substitute for a recursive search with getItems, but presenting a flat structure in return. +// It can be used to display an alterantive way of parsing and recieving items in a folder +// (due to limitations imposed upon IOFolder, we could afford it in this givin function). + int main() { daqInstance* simulatorInstance = NULL; From b5a15c30e1fb2fd42a235005ecd79bdff245195d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 12 Jan 2026 11:20:26 +0100 Subject: [PATCH 008/103] Updated numenclatire and creted a simple version of the display sctript --- examples/2_0_tree_traversal.c | 178 ++++++++++++---------------------- 1 file changed, 60 insertions(+), 118 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 4420465..a185004 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -7,7 +7,7 @@ typedef enum ComponentType { - Unknown = 0, + Unk = 0, Device, FunctionBlock, IOFolder, @@ -26,13 +26,17 @@ struct ComponentInfo enum ComponentType type; }; +void printDaqSignal(daqSignal* signal); +void printInputPort(daqInputPort* inputPort); +void printDaqSyncComponent(daqSyncComponent* syncComp); +void printDaqServer(daqServer* server); +void printDaqFolder(daqFolder* folder); +void printDaqFunctionBlock(daqFunctionBlock* functionBlock); +void printDaqDevice(daqDevice* device); + + // Note: The case when getters fail should be handled so no crashes happen (at least not from this). -void componentTreePrintOut(daqDevice* headDevice) -{ - // Device -> Folder -> FB/Channel -> Signal - // \-> SyncComponent - /* * daqDevice_getDevices() * Device checklist: @@ -42,21 +46,6 @@ void componentTreePrintOut(daqDevice* headDevice) * daqDevice_getServers() */ - daqFolder* ioFolder = NULL; - daqDevice_getInputsOutputsFolder(headDevice, &ioFolder); - - daqList* devices = NULL; - daqDevice_getDevices(headDevice, &devices, NULL); - - daqList* functionBlocks = NULL; - daqDevice_getFunctionBlocks(headDevice, &functionBlocks, NULL); - - daqSyncComponent* syncComponent = NULL; - daqDevice_getSyncComponent(headDevice, &syncComponent); - - daqList* servers = NULL; - daqDevice_getServers(headDevice, &servers); - /* * daqFolder_getItems * IOFolder checklist: @@ -67,18 +56,6 @@ void componentTreePrintOut(daqDevice* headDevice) * daqFunctionBlock_getSignals() */ - daqList* itemsIOFolder = NULL; - daqFolder_getItems(ioFolder, &itemsIOFolder, NULL); - - daqList* functionBlocks = NULL; - daqFunctionBlock_getFunctionBlocks((daqFunctionBlock*) ioFolder, &functionBlocks, NULL); - - daqList* inputPorts = NULL; - daqFunctionBlock_getInputPorts((daqFunctionBlock*) ioFolder, &inputPorts, NULL); - - daqList* listOfSignals = NULL; - daqFunctionBlock_getSignals((daqFunctionBlock*) ioFolder, &listOfSignals, NULL); - /* * daqFunctionBlock_getFunctionBlocks() * Function Block checklist: @@ -86,37 +63,16 @@ void componentTreePrintOut(daqDevice* headDevice) * daqFunctionBlock_getSignals() */ - // Function block checks are the same as above - - /* - * Input ports checklist: - * daqInputPort_getSignals() - */ - - daqInputPort* inputPort = NULL; - daqBaseObject* inputPortObj = NULL; - daqList_getItemAt(inputPorts, 0, &inputPortObj); - daqQueryInterface(inputPortObj, DAQ_INPUT_PORT_INTF_ID, &inputPort); - - daqSignal* signal = NULL; - daqInputPort_getSignal(inputPort, &signal); - /* * Server folder checklist: * daqServer_getSignals() * daqServer_getStreaming() */ - - daqServer* server = NULL; - daqBaseObject* serverObj = NULL; - daqList_getItemAt(servers, 0, &serverObj); - daqQueryInterface(serverObj, DAQ_SERVER_INTF_ID, &server); - - daqList* signals = NULL; - daqServer_getSignals(server, &signals, NULL); - daqStreaming* streaming = NULL; - daqServer_getStreaming(server, &streaming); + /* + * Input ports checklist: + * daqInputPort_getSignals() + */ /* * Sync Component checklist: @@ -127,7 +83,20 @@ void componentTreePrintOut(daqDevice* headDevice) * Signal checklist: * tisto kar je, več ni potrebno */ - + +void componentTreePrintOut(daqDevice* headDevice) +{ + // Device -> Folder -> FB/Channel -> Signal + // \-> SyncComponent + + /*daqFolder* ioFolder = NULL; + daqDevice_getInputsOutputsFolder(headDevice, &ioFolder); + + daqServer* server; + + daqStreaming* streaming = NULL; + daqServer_getStreaming(server, &streaming); + */ } void printObjectList(daqList* list) @@ -135,27 +104,27 @@ void printObjectList(daqList* list) // Check for emptyness of list should be done outside daqBaseObject* listMember = NULL; daqList_getItemAt(list, 0, &listMember); - enum ComponentType componentType = Unknown; + enum ComponentType componentType = Unk; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_DEVICE_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_DEVICE_INTF_ID) && (componentType == Unk)) componentType = Device; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SERVER_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SERVER_INTF_ID) && (componentType == Unk)) componentType = Server; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == Unk)) componentType = SyncComponent; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == Unk)) componentType = FunctionBlock; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FOLDER_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FOLDER_INTF_ID) && (componentType == Unk)) componentType = Folder; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_INPUT_PORT_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_INPUT_PORT_INTF_ID) && (componentType == Unk)) componentType = InputPort; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SIGNAL_INTF_ID) && (componentType == Unknown)) + if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SIGNAL_INTF_ID) && (componentType == Unk)) componentType = Signal; daqSizeT numberOfObjects = 0; @@ -171,7 +140,7 @@ void printObjectList(daqList* list) { daqDevice* device = NULL; daqQueryInterface(listMember, DAQ_DEVICE_INTF_ID, &device); - printDevice(device); + printDaqDevice(device); daqReleaseRef(device); daqReleaseRef(listMember); break; @@ -180,7 +149,7 @@ void printObjectList(daqList* list) { daqServer* server = NULL; daqQueryInterface(listMember, DAQ_SERVER_INTF_ID, &server); - printServer(server); + printDaqServer(server); daqReleaseRef(server); daqReleaseRef(listMember); break; @@ -189,7 +158,7 @@ void printObjectList(daqList* list) { daqSyncComponent* syncComponent = NULL; daqQueryInterface(listMember, DAQ_SYNC_COMPONENT_INTF_ID, &syncComponent); - printSyncComponent(syncComponent); + printDaqSyncComponent(syncComponent); daqReleaseRef(syncComponent); daqReleaseRef(listMember); break; @@ -198,7 +167,7 @@ void printObjectList(daqList* list) { daqFunctionBlock* functionBlock = NULL; daqQueryInterface(listMember, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); - printFunctionBlock(functionBlock); + printDaqFunctionBlock(functionBlock); daqReleaseRef(functionBlock); daqReleaseRef(listMember); break; @@ -207,7 +176,7 @@ void printObjectList(daqList* list) { daqFolder* folder = NULL; daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &folder); - printFolder(folder); + printDaqFolder(folder); daqReleaseRef(folder); daqReleaseRef(listMember); break; @@ -215,7 +184,7 @@ void printObjectList(daqList* list) case InputPort: { daqInputPort* inputPort = NULL; - daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &inputPort); + daqQueryInterface(listMember, DAQ_INPUT_PORT_INTF_ID, &inputPort); printInputPort(inputPort); daqReleaseRef(inputPort); daqReleaseRef(listMember); @@ -225,7 +194,7 @@ void printObjectList(daqList* list) { daqSignal* signal = NULL; daqQueryInterface(listMember, DAQ_SIGNAL_INTF_ID, &signal); - printSignal(signal); + printDaqSignal(signal); daqReleaseRef(signal); daqReleaseRef(listMember); break; @@ -239,15 +208,17 @@ void printObjectList(daqList* list) } } -void printDevice(daqDevice* device) +void printDaqDevice(daqDevice* device) { // Missing printing of itself. + // Direct single children and the device itself needs to be printed. + printf("Hello from device\n"); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) { - printFolder(ioFolder); + printDaqFolder(ioFolder); daqReleaseRef(ioFolder); } @@ -255,7 +226,7 @@ void printDevice(daqDevice* device) daqDevice_getSyncComponent(device, &syncComponent); if (syncComponent != NULL) { - printSyncComponent(syncComponent); + printDaqSyncComponent(syncComponent); daqReleaseRef(syncComponent); } @@ -285,9 +256,10 @@ void printDevice(daqDevice* device) } } -void printFunctionBlock(daqFunctionBlock* functionBlock) +void printDaqFunctionBlock(daqFunctionBlock* functionBlock) { // Missing self display + printf("Hello from function blcok\n"); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); @@ -314,9 +286,10 @@ void printFunctionBlock(daqFunctionBlock* functionBlock) } } -void printFolder(daqFolder* folder) +void printDaqFolder(daqFolder* folder) { // Self descriptrion + printf("Hello from folder\n"); daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); @@ -327,9 +300,10 @@ void printFolder(daqFolder* folder) } } -void printServer(daqServer* server) +void printDaqServer(daqServer* server) { // Self description + printf("Hello from server\n"); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); @@ -340,21 +314,24 @@ void printServer(daqServer* server) } } -void printSyncComponent(daqSyncComponent* syncComp) +void printDaqSyncComponent(daqSyncComponent* syncComp) { // Leaf node // Self description + printf("Hello from sync component\n"); } void printInputPort(daqInputPort* inputPort) { // Self description + printf("Hello from input port\n"); } -void printSignal(daqSignal* signal) +void printDaqSignal(daqSignal* signal) { // Leaf node // Self Description + printf("Hello from signal\n"); } // There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) @@ -371,42 +348,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - daqList* listOfComponents = NULL; - daqList_createList(&listOfComponents); - // Go through all the folders that are available on the device - daqFolder* simulatorIOFolder = NULL; - daqDevice_getInputsOutputsFolder(simulator, &simulatorIOFolder); - - daqList* simulatorIOItems = NULL; - daqSearchFilter* filterIOAny = NULL; - daqSearchFilter_createAnySearchFilter(&filterIOAny); - daqFolder_getItems(simulatorIOFolder, &simulatorIOItems, filterIOAny); - - // Going through the components in IOFolder - daqIterator* ioItemsIterator = NULL; - daqList_createStartIterator(simulatorIOItems, &ioItemsIterator); - - while (daqIterator_moveNext(ioItemsIterator) == DAQ_SUCCESS) - { - daqDataDescriptor* ioItem = NULL; - daqIterator_getCurrent(ioItemsIterator, &ioItem); - - daqDict* itemMetadata = NULL; - daqDataDescriptor_getMetadata(ioItem, &itemMetadata); - - daqReleaseRef(itemMetadata); - daqReleaseRef(ioItem); - } - - daqReleaseRef(ioItemsIterator); - daqReleaseRef(filterIOAny); - daqReleaseRef(simulatorIOItems); - daqReleaseRef(simulatorIOFolder); - // Search for all the signals - - // Check for additional devices - - // Repeat the procedure for all connected devices + printDaqDevice((daqDevice*) instance); daqReleaseRef(instance); daqReleaseRef(simulator); From 33b3752cf55ca3fbd310173e1433f7fdeca0fb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 9 Dec 2025 11:12:46 +0100 Subject: [PATCH 009/103] Addressed code review # Conflicts: # examples/4_filter_and_read_last_value_of_signal.c # examples/6_read_with_formatted_timestamps.c # examples/util_headers/daq_utils.h --- examples/4_filter_and_read_last_value_of_signal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/4_filter_and_read_last_value_of_signal.c b/examples/4_filter_and_read_last_value_of_signal.c index f2a9e1a..6ca0d74 100644 --- a/examples/4_filter_and_read_last_value_of_signal.c +++ b/examples/4_filter_and_read_last_value_of_signal.c @@ -20,6 +20,7 @@ daqSignal* iterativeSearchByName(daqString* wantedSignalName, daqDevice* device) daqConstCharPtr signalNameConstChar = NULL; daqString_getCharPtr(wantedSignalName, &signalNameConstChar); + // ?? while (daqIterator_moveNext(iterator) == DAQ_SUCCESS) { daqSignal* currentSignal = NULL; From cca8ea5488ce111c052ed86713b3b66ed7ad2c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 9 Dec 2025 12:55:07 +0100 Subject: [PATCH 010/103] Missing changes required by the code review --- examples/4_filter_and_read_last_value_of_signal.c | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/4_filter_and_read_last_value_of_signal.c b/examples/4_filter_and_read_last_value_of_signal.c index 6ca0d74..f2a9e1a 100644 --- a/examples/4_filter_and_read_last_value_of_signal.c +++ b/examples/4_filter_and_read_last_value_of_signal.c @@ -20,7 +20,6 @@ daqSignal* iterativeSearchByName(daqString* wantedSignalName, daqDevice* device) daqConstCharPtr signalNameConstChar = NULL; daqString_getCharPtr(wantedSignalName, &signalNameConstChar); - // ?? while (daqIterator_moveNext(iterator) == DAQ_SUCCESS) { daqSignal* currentSignal = NULL; From ed39e4f9fa955ffb6708d6adb21b12c9ddf1dec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 09:56:27 +0100 Subject: [PATCH 011/103] Removed use of block reader --- examples/8_create_and_read_sample_rate_buffers.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index c35ec5d..3fcaf0a 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -31,7 +31,6 @@ int main(void) daqDataDescriptor* domainDataDescriptor = NULL; domainDescriptorFromEventPacket(streamReader, &domainDataDescriptor); - daqReleaseRef(streamReader); daqRatio* ratio = NULL; daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); @@ -50,19 +49,12 @@ int main(void) printf("Sample amount: %llu\n", sampleAmount); - sampleAmount = 2000; - - daqBlockReader* blockReader = NULL; - daqBlockReader_createBlockReader(&blockReader, connectedSignal, 2000, daqSampleTypeFloat64, daqSampleTypeInt64, daqReadModeRawValue); - - daqBlockReader_read(blockReader, samples, &sampleAmount, 10000, NULL); + daqStreamReader_read(streamReader, samples, &sampleAmount, 10000, NULL); for (daqSizeT i = 0; i < sampleAmount; i++) - { printf("Entry: %llu, Sample value: %f\n", i, samples[i]); - } - daqReleaseRef(blockReader); + daqReleaseRef(streamReader); daqReleaseRef(domainDataDescriptor); daqReleaseRef(instance); daqReleaseRef(simulator); From ad407d51e70b3c15364633d1d2c942cd0d447c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 10:37:29 +0100 Subject: [PATCH 012/103] Mssing dots --- examples/7_print_data_descriptor_and_calculater_sample_rate.c | 2 +- examples/8_create_and_read_sample_rate_buffers.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index dc3b61a..efac755 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -14,7 +14,7 @@ int main(void) addSimulator(&simulator, &instance); // Get a Data Descriptor from a named signal and display everything that it contains alongside - // its domain signal and all domain signals content + // its domain signal and all domain signals content. daqString* signalName = NULL; daqString_createString(&signalName, "AI 1"); diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index 3fcaf0a..80c7d9f 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -1,6 +1,6 @@ /* * This example will demonstrate how to create and read into buffers - * that are created based on the calculated sample rate + * that are created based on the calculated sample rate. */ #include @@ -13,7 +13,7 @@ int main(void) daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - // Connect to the first available signal on the simulator + // Connect to the first available signal on the simulator. daqList* availableSignals = NULL; if (daqDevice_getSignalsRecursive(simulator, &availableSignals, NULL) != DAQ_SUCCESS) { From f4b2a5301503646c2633e35c3de63086af484ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 12:50:24 +0100 Subject: [PATCH 013/103] Updated comment --- examples/7_print_data_descriptor_and_calculater_sample_rate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index efac755..8d4c48d 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -14,7 +14,7 @@ int main(void) addSimulator(&simulator, &instance); // Get a Data Descriptor from a named signal and display everything that it contains alongside - // its domain signal and all domain signals content. + // its domain signal and all domain signals attributes. daqString* signalName = NULL; daqString_createString(&signalName, "AI 1"); From a5f03dc898548ba4895df71f421612a8f85dab8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 14:56:34 +0100 Subject: [PATCH 014/103] Updated calculation of sampleRate --- ...ta_descriptor_and_calculater_sample_rate.c | 37 +++++++++++++++---- examples/util_headers/daq_utils.h | 24 +++++++++++- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index 8d4c48d..cd12d72 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -77,17 +77,40 @@ int main(void) daqRatio* ratio = NULL; daqDataDescriptor_getTickResolution(domainDescriptor, &ratio); - daqInt resolutionNumerator = 0; - daqRatio_getNumerator(ratio, &resolutionNumerator); + daqDataRule* dataRule = NULL; + daqDataDescriptor_getRule(domainDescriptor, &dataRule); - daqInt resolutionDenominator = 0; - daqRatio_getDenominator(ratio, &resolutionDenominator); + daqDict* parametersDataRule = NULL; + daqDataRule_getParameters(dataRule, ¶metersDataRule); - daqFloat sampleRate = 0; - sampleRate = (daqFloat)resolutionDenominator / (daqFloat)resolutionNumerator; + daqString* deltaString = NULL; + daqString_createString(&deltaString, "delta"); + + daqBaseObject* deltaObj = NULL; + + daqDict_get(parametersDataRule, deltaString, &deltaObj); + + daqNumber* delta = NULL; + daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); + + daqInt deltaInt = 1; + daqNumber_getIntValue(delta, &deltaInt); + + daqInt numerator = 1; + daqRatio_getNumerator(ratio, &numerator); + + daqInt denominator = 1; + daqRatio_getDenominator(ratio, &denominator); + + daqFloat sampleRate = 1; + sampleRate = (daqFloat) denominator / (daqFloat) numerator / (daqFloat)deltaInt; printf("Calculated sample rate is: %f Hz\n", sampleRate); - + + daqReleaseRef(delta); + daqReleaseRef(deltaString); + daqReleaseRef(parametersDataRule); + daqReleaseRef(dataRule); daqReleaseRef(ratio); daqReleaseRef(dataDescriptor); daqReleaseRef(domainDescriptor); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index dc4a67d..a62f0c9 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -299,14 +299,36 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqRatio* ratio = NULL; daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); + daqDataRule* dataRule = NULL; + daqDataDescriptor_getRule(domainDataDescriptor, &dataRule); + + daqDict* parametersDataRule = NULL; + daqDataRule_getParameters(dataRule, ¶metersDataRule); + + daqString* deltaString = NULL; + daqString_createString(&deltaString, "delta"); + + daqBaseObject* deltaObj = NULL; + daqDict_get(parametersDataRule, deltaString, &deltaObj); + + daqNumber* delta = NULL; + daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); + + daqFloat deltaFloat = 0; + daqNumber_getFloatValue(delta, &deltaFloat); + daqInt numerator = 1; daqRatio_getNumerator(ratio, &numerator); daqInt denominator = 1; daqRatio_getDenominator(ratio, &denominator); - *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator); + *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / deltaFloat); + daqReleaseRef(delta); + daqReleaseRef(deltaString); + daqReleaseRef(parametersDataRule); + daqReleaseRef(dataRule); daqReleaseRef(ratio); return DAQ_SUCCESS; } \ No newline at end of file From ec07eb521ea59e2c793b79d58798b5da23e8900c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 15:37:21 +0100 Subject: [PATCH 015/103] Fixed sampleRate calculation function in daq_utils --- examples/util_headers/daq_utils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index a62f0c9..5eb94cf 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -314,8 +314,8 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqNumber* delta = NULL; daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - daqFloat deltaFloat = 0; - daqNumber_getFloatValue(delta, &deltaFloat); + daqInt deltaInt = 0; + daqNumber_getIntValue(delta, &deltaInt); daqInt numerator = 1; daqRatio_getNumerator(ratio, &numerator); @@ -323,7 +323,7 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqInt denominator = 1; daqRatio_getDenominator(ratio, &denominator); - *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / deltaFloat); + *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / (daqFloat)deltaInt); daqReleaseRef(delta); daqReleaseRef(deltaString); From d02ccaee8d76e038e157a2718bc16c637dc75ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 11:53:04 +0100 Subject: [PATCH 016/103] Addressing a code review --- ...ta_descriptor_and_calculater_sample_rate.c | 85 ++++++++++--------- .../8_create_and_read_sample_rate_buffers.c | 33 ++++--- examples/util_headers/daq_utils.h | 77 ++++++++++------- 3 files changed, 111 insertions(+), 84 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index cd12d72..848dd15 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -16,14 +16,10 @@ int main(void) // Get a Data Descriptor from a named signal and display everything that it contains alongside // its domain signal and all domain signals attributes. - daqString* signalName = NULL; - daqString_createString(&signalName, "AI 1"); - daqList* availableSignals = NULL; daqDevice_getSignalsRecursive(simulator, &availableSignals, NULL); - daqConstCharPtr signalNameConstChar = NULL; - daqString_getCharPtr(signalName, &signalNameConstChar); + daqConstCharPtr signalNameConstChar = "AI1"; daqSignal* wantedSignal = NULL; @@ -35,17 +31,13 @@ int main(void) daqSignal* currentSignal = NULL; daqList_getItemAt(availableSignals, i, (daqBaseObject**) ¤tSignal); - daqDataDescriptor* signalDescriptor = NULL; - daqSignal_getDescriptor(currentSignal, &signalDescriptor); - - daqString* signalDescriptorName = NULL; - daqDataDescriptor_getName(signalDescriptor, &signalDescriptorName); + daqString* nameCurrentSignal = NULL; + daqComponent_getName((daqComponent*) currentSignal, &nameCurrentSignal); daqConstCharPtr signalDescriptorNameConstChar = NULL; - daqString_getCharPtr(signalDescriptorName, &signalDescriptorNameConstChar); + daqString_getCharPtr(nameCurrentSignal, &signalDescriptorNameConstChar); - daqReleaseRef(signalDescriptorName); - daqReleaseRef(signalDescriptor); + daqReleaseRef(nameCurrentSignal); if (!strcmp(signalNameConstChar, signalDescriptorNameConstChar)) { @@ -60,11 +52,11 @@ int main(void) daqDataDescriptor* dataDescriptor = NULL; daqSignal_getDescriptor(wantedSignal, &dataDescriptor); - daqStreamReader* streamReader = NULL; - daqStreamReader_createStreamReader(&streamReader, wantedSignal, daqSampleTypeFloat64, daqSampleTypeInt64, daqReadModeRawValue, daqReadTimeoutTypeAny); + daqSignal* domainSignal = NULL; + daqSignal_getDomainSignal(wantedSignal, &domainSignal); daqDataDescriptor* domainDescriptor = NULL; - domainDescriptorFromEventPacket(streamReader, &domainDescriptor); + daqSignal_getDescriptor(domainSignal, &domainDescriptor); daqCharPtr dataDescriptorChar = NULL; daqBaseObject_toString(dataDescriptor, &dataDescriptorChar); @@ -74,47 +66,58 @@ int main(void) printf("Data descriptor:\n%s\nDomain descriptor:\n%s\n",dataDescriptorChar, domainDescriptorChar); - daqRatio* ratio = NULL; - daqDataDescriptor_getTickResolution(domainDescriptor, &ratio); - daqDataRule* dataRule = NULL; daqDataDescriptor_getRule(domainDescriptor, &dataRule); - daqDict* parametersDataRule = NULL; - daqDataRule_getParameters(dataRule, ¶metersDataRule); + daqDataRuleType dataRuleType; + daqDataRule_getType(dataRule, &dataRuleType); + + if (dataRuleType == daqDataRuleTypeLinear) + { + daqRatio* ratio = NULL; + daqDataDescriptor_getTickResolution(domainDescriptor, &ratio); - daqString* deltaString = NULL; - daqString_createString(&deltaString, "delta"); + daqDict* parametersDataRule = NULL; + daqDataRule_getParameters(dataRule, ¶metersDataRule); - daqBaseObject* deltaObj = NULL; + daqString* deltaString = NULL; + daqString_createString(&deltaString, "delta"); - daqDict_get(parametersDataRule, deltaString, &deltaObj); + daqBaseObject* deltaObj = NULL; + daqDict_get(parametersDataRule, deltaString, &deltaObj); - daqNumber* delta = NULL; - daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); + daqNumber* delta = NULL; + daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - daqInt deltaInt = 1; - daqNumber_getIntValue(delta, &deltaInt); + daqInt deltaInt = 1; + daqNumber_getIntValue(delta, &deltaInt); - daqInt numerator = 1; - daqRatio_getNumerator(ratio, &numerator); + daqInt numerator = 1; + daqRatio_getNumerator(ratio, &numerator); - daqInt denominator = 1; - daqRatio_getDenominator(ratio, &denominator); + daqInt denominator = 1; + daqRatio_getDenominator(ratio, &denominator); - daqFloat sampleRate = 1; - sampleRate = (daqFloat) denominator / (daqFloat) numerator / (daqFloat)deltaInt; + daqFloat sampleRate = 1; + sampleRate = (daqFloat) denominator / (daqFloat) numerator / (daqFloat) deltaInt; - printf("Calculated sample rate is: %f Hz\n", sampleRate); + printf("Calculated sample rate is: %f Hz\n", sampleRate); + + daqReleaseRef(delta); + daqReleaseRef(deltaObj); + daqReleaseRef(deltaString); + daqReleaseRef(parametersDataRule); + daqReleaseRef(ratio); + } + else + { + printf("Data rule of the signal is not linear, therefore we cannot calculate the sample rate."); + } - daqReleaseRef(delta); - daqReleaseRef(deltaString); - daqReleaseRef(parametersDataRule); daqReleaseRef(dataRule); - daqReleaseRef(ratio); daqReleaseRef(dataDescriptor); daqReleaseRef(domainDescriptor); - daqReleaseRef(streamReader); + daqReleaseRef(domainSignal); daqReleaseRef(wantedSignal); daqReleaseRef(simulator); diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index 80c7d9f..8ad42a1 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -30,32 +30,37 @@ int main(void) daqStreamReader_createStreamReader(&streamReader, connectedSignal, daqSampleTypeFloat64, daqSampleTypeInt64, daqReadModeRawValue, daqReadTimeoutTypeAny); daqDataDescriptor* domainDataDescriptor = NULL; - domainDescriptorFromEventPacket(streamReader, &domainDataDescriptor); + daqReadStatus* status = NULL; - daqRatio* ratio = NULL; - daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); + zeroCountReadStatus(streamReader, &status); + domainDescriptorFromReadStatus(status, &domainDataDescriptor); - daqInt numerator = 1; - daqRatio_getNumerator(ratio, &numerator); - - daqInt denominator = 1; - daqRatio_getDenominator(ratio, &denominator); - - daqSizeT sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator); + daqSizeT sampleRate; + retrieveSampleRate(&sampleRate, domainDataDescriptor); + // Picking 1000 as a constant here is arbitrary as it servers a simplification derived from + // the fact that arrays in C require constant expression to be compiled. daqFloat samples[1000 * 2]; daqSizeT sampleAmount = sampleRate * 2; printf("Sample amount: %llu\n", sampleAmount); - daqStreamReader_read(streamReader, samples, &sampleAmount, 10000, NULL); + for (daqSizeT i = 0; i < 200; i++) + { + daqStreamReader_read(streamReader, samples, &sampleAmount, 10000, NULL); - for (daqSizeT i = 0; i < sampleAmount; i++) - printf("Entry: %llu, Sample value: %f\n", i, samples[i]); + if (sampleAmount > 0) + printf("Entry: %llu, Sample value: %f\n", i, samples[sampleAmount-1]); - daqReleaseRef(streamReader); + sampleAmount = sampleRate * 2; + } + + daqReleaseRef(status); daqReleaseRef(domainDataDescriptor); + daqReleaseRef(streamReader); + daqReleaseRef(connectedSignal); + daqReleaseRef(availableSignals); daqReleaseRef(instance); daqReleaseRef(simulator); daqReleaseRef(simulatorInstance); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 5eb94cf..3cb1cf4 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -34,10 +34,15 @@ static inline daqErrCode createInstance(daqInstance** instance, const char* modu static inline void printDaqFormattedString(const char* string, daqString* daqString); /* - * Method for getting Domain descriptor from - * the signal (via stream reader) by processing an event packet. + * Method for gaining Domain Data Descriptor from the status + * received from while reading data from a signal. */ -static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader, daqDataDescriptor** domainDescriptor); +static inline daqErrCode domainDescriptorFromReadStatus(daqReadStatus* status, daqDataDescriptor** domainDescriptor); + +/* + * Method for obtaning the status from a StreamReader that is connected to a signal. + */ +static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadStatus** status); /* * Method that takes the tick resolution from domain data descriptor @@ -45,6 +50,7 @@ static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader */ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); + void daqSleepMs(int milliseconds) { #ifdef _WIN32 @@ -252,13 +258,15 @@ static inline void printDaqFormattedString(const char* outputFormatString, daqSt printf(outputFormatString, stringConstChar); } -static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader, daqDataDescriptor** domainDescriptor) +static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadStatus** status) { daqSizeT count = 0; daqFloat samples[1]; - daqReaderStatus* status = NULL; - daqStreamReader_read(reader, &samples, &count, 1000, &status); + return daqStreamReader_read(reader, &samples, &count, 1000, status); +} +static inline daqErrCode domainDescriptorFromReadStatus(daqReadStatus* status, daqDataDescriptor** domainDescriptor) +{ daqEventPacket* eventPacket = NULL; daqReaderStatus_getEventPacket(status, &eventPacket); daqString* eventId = NULL; @@ -272,7 +280,6 @@ static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader daqReleaseRef(checkStr); daqReleaseRef(eventId); - daqReleaseRef(status); if (check == True) { @@ -296,39 +303,51 @@ static inline daqErrCode domainDescriptorFromEventPacket(daqStreamReader* reader static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor) { - daqRatio* ratio = NULL; - daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); - daqDataRule* dataRule = NULL; daqDataDescriptor_getRule(domainDataDescriptor, &dataRule); - daqDict* parametersDataRule = NULL; - daqDataRule_getParameters(dataRule, ¶metersDataRule); + daqDataRuleType dataRuleType; + daqDataRule_getType(dataRule, &dataRuleType); - daqString* deltaString = NULL; - daqString_createString(&deltaString, "delta"); + if (dataRuleType == daqDataRuleTypeLinear) + { + daqRatio* ratio = NULL; + daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); - daqBaseObject* deltaObj = NULL; - daqDict_get(parametersDataRule, deltaString, &deltaObj); + daqDict* parametersDataRule = NULL; + daqDataRule_getParameters(dataRule, ¶metersDataRule); - daqNumber* delta = NULL; - daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); + daqString* deltaString = NULL; + daqString_createString(&deltaString, "delta"); - daqInt deltaInt = 0; - daqNumber_getIntValue(delta, &deltaInt); + daqBaseObject* deltaObj = NULL; + daqDict_get(parametersDataRule, deltaString, &deltaObj); - daqInt numerator = 1; - daqRatio_getNumerator(ratio, &numerator); + daqNumber* delta = NULL; + daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - daqInt denominator = 1; - daqRatio_getDenominator(ratio, &denominator); + daqFloat deltaFloat = 0; + daqNumber_getFloatValue(delta, &deltaFloat); - *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / (daqFloat)deltaInt); + daqInt numerator = 1; + daqRatio_getNumerator(ratio, &numerator); + + daqInt denominator = 1; + daqRatio_getDenominator(ratio, &denominator); + + *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / deltaFloat); + + daqReleaseRef(delta); + daqReleaseRef(deltaString); + daqReleaseRef(parametersDataRule); + daqReleaseRef(ratio); + } + else + { + printf("Data rule of the signal is not linear, therefore we cannot calculate sample rate."); + } - daqReleaseRef(delta); - daqReleaseRef(deltaString); - daqReleaseRef(parametersDataRule); daqReleaseRef(dataRule); - daqReleaseRef(ratio); + return DAQ_SUCCESS; } \ No newline at end of file From d27e326e7a189a0cae834ae303ec73cbcaff48bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 13:08:48 +0100 Subject: [PATCH 017/103] Added a new utility method for checking if the data rule is linear --- ...data_descriptor_and_calculater_sample_rate.c | 6 ++---- examples/util_headers/daq_utils.h | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index 848dd15..d7cbd56 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -69,10 +69,7 @@ int main(void) daqDataRule* dataRule = NULL; daqDataDescriptor_getRule(domainDescriptor, &dataRule); - daqDataRuleType dataRuleType; - daqDataRule_getType(dataRule, &dataRuleType); - - if (dataRuleType == daqDataRuleTypeLinear) + if (checkLinearRule(dataRule)) { daqRatio* ratio = NULL; daqDataDescriptor_getTickResolution(domainDescriptor, &ratio); @@ -106,6 +103,7 @@ int main(void) daqReleaseRef(delta); daqReleaseRef(deltaObj); daqReleaseRef(deltaString); + daqReleaseRef(parametersDataRule); daqReleaseRef(ratio); } diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 3cb1cf4..ec9e779 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -50,6 +50,10 @@ static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadSta */ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); +/* + * Method that check if the provided DataRule is linear + */ +static inline daqBool checkLinearRule(daqDataRule* dataRule); void daqSleepMs(int milliseconds) { @@ -306,10 +310,7 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqDataRule* dataRule = NULL; daqDataDescriptor_getRule(domainDataDescriptor, &dataRule); - daqDataRuleType dataRuleType; - daqDataRule_getType(dataRule, &dataRuleType); - - if (dataRuleType == daqDataRuleTypeLinear) + if (checkLinearRule(dataRule)) { daqRatio* ratio = NULL; daqDataDescriptor_getTickResolution(domainDataDescriptor, &ratio); @@ -350,4 +351,12 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqReleaseRef(dataRule); return DAQ_SUCCESS; +} + +static inline daqBool checkLinearRule(daqDataRule* dataRule) +{ + daqDataRuleType dataRuleType; + daqDataRule_getType(dataRule, &dataRuleType); + + return dataRuleType == daqDataRuleTypeLinear; } \ No newline at end of file From cd757d505248a57624ecd9ce7570d44c8b01e411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 15:54:03 +0100 Subject: [PATCH 018/103] Refactored sample rate calculation method --- ...ta_descriptor_and_calculater_sample_rate.c | 15 ++------- .../8_create_and_read_sample_rate_buffers.c | 8 +---- examples/util_headers/daq_utils.h | 33 +++++++++++++------ 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index d7cbd56..1b2424f 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -86,19 +86,10 @@ int main(void) daqNumber* delta = NULL; daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - daqInt deltaInt = 1; - daqNumber_getIntValue(delta, &deltaInt); + daqSizeT sampleRate = 1; + calcSampleRate(&sampleRate, ratio, delta); - daqInt numerator = 1; - daqRatio_getNumerator(ratio, &numerator); - - daqInt denominator = 1; - daqRatio_getDenominator(ratio, &denominator); - - daqFloat sampleRate = 1; - sampleRate = (daqFloat) denominator / (daqFloat) numerator / (daqFloat) deltaInt; - - printf("Calculated sample rate is: %f Hz\n", sampleRate); + printf("Calculated sample rate is: %ull Hz\n", sampleRate); daqReleaseRef(delta); daqReleaseRef(deltaObj); diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index 8ad42a1..00ac4fd 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -15,13 +15,7 @@ int main(void) // Connect to the first available signal on the simulator. daqList* availableSignals = NULL; - if (daqDevice_getSignalsRecursive(simulator, &availableSignals, NULL) != DAQ_SUCCESS) - { - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); - return 1; - } + daqDevice_getSignalsRecursive(simulator, &availableSignals, NULL); daqSignal* connectedSignal = NULL; daqList_getItemAt(availableSignals, 0, (daqBaseObject**)&connectedSignal); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index ec9e779..97f4332 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -50,6 +50,11 @@ static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadSta */ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); +/* + * Method that devides the inverse of tickResolution with the given delta to calculate the sample rate. + */ +static inline daqErrCode calcSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta); + /* * Method that check if the provided DataRule is linear */ @@ -305,6 +310,22 @@ static inline daqErrCode domainDescriptorFromReadStatus(daqReadStatus* status, d return DAQ_ERR_INVALID_DATA; } +static inline daqErrCode calcSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta) +{ + daqFloat deltaFloat = 0; + daqNumber_getFloatValue(delta, &deltaFloat); + + daqInt numerator = 1; + daqRatio_getNumerator(tickResolution, &numerator); + + daqInt denominator = 1; + daqRatio_getDenominator(tickResolution, &denominator); + + *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / deltaFloat); + + return DAQ_SUCCESS; +} + static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor) { daqDataRule* dataRule = NULL; @@ -327,18 +348,10 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqNumber* delta = NULL; daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - daqFloat deltaFloat = 0; - daqNumber_getFloatValue(delta, &deltaFloat); - - daqInt numerator = 1; - daqRatio_getNumerator(ratio, &numerator); - - daqInt denominator = 1; - daqRatio_getDenominator(ratio, &denominator); - - *sampleRate = (daqSizeT) ((daqFloat) denominator / (daqFloat) numerator / deltaFloat); + calcSampleRate(sampleRate, ratio, delta); daqReleaseRef(delta); + daqReleaseRef(deltaObj); daqReleaseRef(deltaString); daqReleaseRef(parametersDataRule); daqReleaseRef(ratio); From a0d2f18008190f378576595fb61d9b0a00857107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 7 Jan 2026 16:05:17 +0100 Subject: [PATCH 019/103] Fixed a typo --- .../7_print_data_descriptor_and_calculater_sample_rate.c | 2 +- examples/8_create_and_read_sample_rate_buffers.c | 6 +++--- examples/util_headers/daq_utils.h | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index 1b2424f..19fd6cb 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -89,7 +89,7 @@ int main(void) daqSizeT sampleRate = 1; calcSampleRate(&sampleRate, ratio, delta); - printf("Calculated sample rate is: %ull Hz\n", sampleRate); + printf("Calculated sample rate is: %llu Hz\n", sampleRate); daqReleaseRef(delta); daqReleaseRef(deltaObj); diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index 00ac4fd..7f2a51a 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -24,10 +24,10 @@ int main(void) daqStreamReader_createStreamReader(&streamReader, connectedSignal, daqSampleTypeFloat64, daqSampleTypeInt64, daqReadModeRawValue, daqReadTimeoutTypeAny); daqDataDescriptor* domainDataDescriptor = NULL; - daqReadStatus* status = NULL; + daqReaderStatus* status = NULL; - zeroCountReadStatus(streamReader, &status); - domainDescriptorFromReadStatus(status, &domainDataDescriptor); + zeroCountReaderStatus(streamReader, &status); + domainDescriptorFromReaderStatus(status, &domainDataDescriptor); daqSizeT sampleRate; retrieveSampleRate(&sampleRate, domainDataDescriptor); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 97f4332..a5be135 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -37,12 +37,12 @@ static inline void printDaqFormattedString(const char* string, daqString* daqStr * Method for gaining Domain Data Descriptor from the status * received from while reading data from a signal. */ -static inline daqErrCode domainDescriptorFromReadStatus(daqReadStatus* status, daqDataDescriptor** domainDescriptor); +static inline daqErrCode domainDescriptorFromReadStatus(daqReaderStatus* status, daqDataDescriptor** domainDescriptor); /* * Method for obtaning the status from a StreamReader that is connected to a signal. */ -static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadStatus** status); +static inline daqErrCode zeroCountReaderStatus(daqStreamReader* reader, daqReaderStatus** status); /* * Method that takes the tick resolution from domain data descriptor @@ -267,14 +267,14 @@ static inline void printDaqFormattedString(const char* outputFormatString, daqSt printf(outputFormatString, stringConstChar); } -static inline daqErrCode zeroCountReadStatus(daqStreamReader* reader, daqReadStatus** status) +static inline daqErrCode zeroCountReaderStatus(daqStreamReader* reader, daqReaderStatus** status) { daqSizeT count = 0; daqFloat samples[1]; return daqStreamReader_read(reader, &samples, &count, 1000, status); } -static inline daqErrCode domainDescriptorFromReadStatus(daqReadStatus* status, daqDataDescriptor** domainDescriptor) +static inline daqErrCode domainDescriptorFromReaderStatus(daqReaderStatus* status, daqDataDescriptor** domainDescriptor) { daqEventPacket* eventPacket = NULL; daqReaderStatus_getEventPacket(status, &eventPacket); From b4ed30e9603aa2784cd461f1106b12e0a128da27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 8 Jan 2026 08:38:25 +0100 Subject: [PATCH 020/103] Renaming functions and misc printout format fix --- .../7_print_data_descriptor_and_calculater_sample_rate.c | 2 +- examples/8_create_and_read_sample_rate_buffers.c | 2 +- examples/util_headers/daq_utils.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/7_print_data_descriptor_and_calculater_sample_rate.c b/examples/7_print_data_descriptor_and_calculater_sample_rate.c index 19fd6cb..fa0945a 100644 --- a/examples/7_print_data_descriptor_and_calculater_sample_rate.c +++ b/examples/7_print_data_descriptor_and_calculater_sample_rate.c @@ -87,7 +87,7 @@ int main(void) daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); daqSizeT sampleRate = 1; - calcSampleRate(&sampleRate, ratio, delta); + calculateSampleRate(&sampleRate, ratio, delta); printf("Calculated sample rate is: %llu Hz\n", sampleRate); diff --git a/examples/8_create_and_read_sample_rate_buffers.c b/examples/8_create_and_read_sample_rate_buffers.c index 7f2a51a..1dcba36 100644 --- a/examples/8_create_and_read_sample_rate_buffers.c +++ b/examples/8_create_and_read_sample_rate_buffers.c @@ -45,7 +45,7 @@ int main(void) daqStreamReader_read(streamReader, samples, &sampleAmount, 10000, NULL); if (sampleAmount > 0) - printf("Entry: %llu, Sample value: %f\n", i, samples[sampleAmount-1]); + printf("Entry: %llu, Sample value: %f\n", (i+1), samples[sampleAmount-1]); sampleAmount = sampleRate * 2; } diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index a5be135..fee28ed 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -37,7 +37,7 @@ static inline void printDaqFormattedString(const char* string, daqString* daqStr * Method for gaining Domain Data Descriptor from the status * received from while reading data from a signal. */ -static inline daqErrCode domainDescriptorFromReadStatus(daqReaderStatus* status, daqDataDescriptor** domainDescriptor); +static inline daqErrCode domainDescriptorFromReaderStatus(daqReaderStatus* status, daqDataDescriptor** domainDescriptor); /* * Method for obtaning the status from a StreamReader that is connected to a signal. @@ -53,7 +53,7 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip /* * Method that devides the inverse of tickResolution with the given delta to calculate the sample rate. */ -static inline daqErrCode calcSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta); +static inline daqErrCode calculateSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta); /* * Method that check if the provided DataRule is linear @@ -310,7 +310,7 @@ static inline daqErrCode domainDescriptorFromReaderStatus(daqReaderStatus* statu return DAQ_ERR_INVALID_DATA; } -static inline daqErrCode calcSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta) +static inline daqErrCode calculateSampleRate(daqSizeT* sampleRate, daqRatio* tickResolution, daqNumber* delta) { daqFloat deltaFloat = 0; daqNumber_getFloatValue(delta, &deltaFloat); @@ -348,7 +348,7 @@ static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescrip daqNumber* delta = NULL; daqQueryInterface(deltaObj, DAQ_NUMBER_INTF_ID, &delta); - calcSampleRate(sampleRate, ratio, delta); + calculateSampleRate(sampleRate, ratio, delta); daqReleaseRef(delta); daqReleaseRef(deltaObj); From 2d836d1dc741fc765ea9ace69ddcea69d323809f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 12 Jan 2026 15:31:09 +0100 Subject: [PATCH 021/103] Added basic information display for nodes when traversing the tree --- examples/2_0_tree_traversal.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index a185004..2d4e913 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -1,3 +1,4 @@ + /* * In this example we will demonstrate the structure of openDAQ tree structure * by traversing across it. @@ -5,7 +6,7 @@ #include -typedef enum ComponentType +enum ComponentType { Unk = 0, Device, @@ -212,7 +213,11 @@ void printDaqDevice(daqDevice* device) { // Missing printing of itself. // Direct single children and the device itself needs to be printed. - printf("Hello from device\n"); + daqDeviceInfo* deviceInfo = NULL; + daqDevice_getInfo(device, &deviceInfo); + daqCharPtr* str = NULL; + daqBaseObject_toString(deviceInfo, str); + printf("Hello from device. Device Info: \n%s\n", *str); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); @@ -259,7 +264,9 @@ void printDaqDevice(daqDevice* device) void printDaqFunctionBlock(daqFunctionBlock* functionBlock) { // Missing self display - printf("Hello from function blcok\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(functionBlock, str); + printf("Hello from function blcok. Function Block: \n%s\n", *str); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); @@ -289,7 +296,9 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock) void printDaqFolder(daqFolder* folder) { // Self descriptrion - printf("Hello from folder\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(folder, str); + printf("Hello from folder. Folder:\n%s\n", *str); daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); @@ -303,7 +312,9 @@ void printDaqFolder(daqFolder* folder) void printDaqServer(daqServer* server) { // Self description - printf("Hello from server\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(server, str); + printf("Hello from server. Server:\n%s\n", *str); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); @@ -318,20 +329,26 @@ void printDaqSyncComponent(daqSyncComponent* syncComp) { // Leaf node // Self description - printf("Hello from sync component\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(syncComp, str); + printf("Hello from sync component. Sync component:\n%s\n", *str); } void printInputPort(daqInputPort* inputPort) { // Self description - printf("Hello from input port\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(inputPort, str); + printf("Hello from input port. InputPort:\n%s\n", *str); } void printDaqSignal(daqSignal* signal) { // Leaf node // Self Description - printf("Hello from signal\n"); + daqCharPtr* str = NULL; + daqBaseObject_toString(signal, str); + printf("Hello from signal. Signal:\n%s\n", *str); } // There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) From 7f63be8487f95efd40751766c1f5b844d715f177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 13 Jan 2026 09:40:39 +0100 Subject: [PATCH 022/103] Updated structure --- examples/2_0_tree_traversal.c | 157 +++++++++++++++++++++++----------- 1 file changed, 105 insertions(+), 52 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 2d4e913..552a7d6 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -27,13 +27,29 @@ struct ComponentInfo enum ComponentType type; }; -void printDaqSignal(daqSignal* signal); -void printInputPort(daqInputPort* inputPort); -void printDaqSyncComponent(daqSyncComponent* syncComp); -void printDaqServer(daqServer* server); -void printDaqFolder(daqFolder* folder); -void printDaqFunctionBlock(daqFunctionBlock* functionBlock); -void printDaqDevice(daqDevice* device); +void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout); +void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout); +void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout); +void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout); +void printDaqServer(daqServer* server, daqDict* listOfAvailableDevices, daqBool printout); +void printDaqFolder(daqFolder* folder, daqDict* listOfAvailableDevices, daqBool printout); +void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout); +void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout); +void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component); + + +void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component) +{ + daqString* globalId = NULL; + daqString* description = NULL; + daqComponent_getGlobalId(component, &globalId); + daqComponent_getDescription(component, &description); + + daqDict_set(listOfAvailableDevices, globalId, description); + + daqReleaseRef(globalId); + daqReleaseRef(description); +} // Note: The case when getters fail should be handled so no crashes happen (at least not from this). @@ -82,11 +98,10 @@ void printDaqDevice(daqDevice* device); /* * Signal checklist: - * tisto kar je, več ni potrebno + * tisto kar je, vec ni potrebno */ -void componentTreePrintOut(daqDevice* headDevice) -{ + // Device -> Folder -> FB/Channel -> Signal // \-> SyncComponent @@ -98,9 +113,14 @@ void componentTreePrintOut(daqDevice* headDevice) daqStreaming* streaming = NULL; daqServer_getStreaming(server, &streaming); */ + +void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout) +{ + daqDict_createDict(listOfAvailableDevices); + printDaqDevice(headDevice, listOfAvailableDevices, printout); } -void printObjectList(daqList* list) +void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool printout) { // Check for emptyness of list should be done outside daqBaseObject* listMember = NULL; @@ -141,7 +161,7 @@ void printObjectList(daqList* list) { daqDevice* device = NULL; daqQueryInterface(listMember, DAQ_DEVICE_INTF_ID, &device); - printDaqDevice(device); + printDaqDevice(device, listOfAvailableDevices, printout); daqReleaseRef(device); daqReleaseRef(listMember); break; @@ -150,7 +170,7 @@ void printObjectList(daqList* list) { daqServer* server = NULL; daqQueryInterface(listMember, DAQ_SERVER_INTF_ID, &server); - printDaqServer(server); + printDaqServer(server, listOfAvailableDevices, printout); daqReleaseRef(server); daqReleaseRef(listMember); break; @@ -159,7 +179,7 @@ void printObjectList(daqList* list) { daqSyncComponent* syncComponent = NULL; daqQueryInterface(listMember, DAQ_SYNC_COMPONENT_INTF_ID, &syncComponent); - printDaqSyncComponent(syncComponent); + printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); daqReleaseRef(syncComponent); daqReleaseRef(listMember); break; @@ -168,7 +188,7 @@ void printObjectList(daqList* list) { daqFunctionBlock* functionBlock = NULL; daqQueryInterface(listMember, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); - printDaqFunctionBlock(functionBlock); + printDaqFunctionBlock(functionBlock, listOfAvailableDevices, printout); daqReleaseRef(functionBlock); daqReleaseRef(listMember); break; @@ -177,7 +197,7 @@ void printObjectList(daqList* list) { daqFolder* folder = NULL; daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &folder); - printDaqFolder(folder); + printDaqFolder(folder, listOfAvailableDevices, printout); daqReleaseRef(folder); daqReleaseRef(listMember); break; @@ -186,7 +206,7 @@ void printObjectList(daqList* list) { daqInputPort* inputPort = NULL; daqQueryInterface(listMember, DAQ_INPUT_PORT_INTF_ID, &inputPort); - printInputPort(inputPort); + printInputPort(inputPort, listOfAvailableDevices, printout); daqReleaseRef(inputPort); daqReleaseRef(listMember); break; @@ -195,7 +215,7 @@ void printObjectList(daqList* list) { daqSignal* signal = NULL; daqQueryInterface(listMember, DAQ_SIGNAL_INTF_ID, &signal); - printDaqSignal(signal); + printDaqSignal(signal, listOfAvailableDevices, printout); daqReleaseRef(signal); daqReleaseRef(listMember); break; @@ -209,21 +229,25 @@ void printObjectList(daqList* list) } } -void printDaqDevice(daqDevice* device) +void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout) { - // Missing printing of itself. - // Direct single children and the device itself needs to be printed. daqDeviceInfo* deviceInfo = NULL; daqDevice_getInfo(device, &deviceInfo); daqCharPtr* str = NULL; daqBaseObject_toString(deviceInfo, str); - printf("Hello from device. Device Info: \n%s\n", *str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); + + if(printout) + printf("Hello from device. Device Info: \n%s\n", *str); + + daqReleaseRef(deviceInfo); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) { - printDaqFolder(ioFolder); + printDaqFolder(ioFolder, listOfAvailableDevices, printout); daqReleaseRef(ioFolder); } @@ -231,16 +255,16 @@ void printDaqDevice(daqDevice* device) daqDevice_getSyncComponent(device, &syncComponent); if (syncComponent != NULL) { - printDaqSyncComponent(syncComponent); + printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); daqReleaseRef(syncComponent); } - // The following Structures can appear in multiples, so we handle each and everyone of them. + // The following Structures can appear in multiples, so we handle them all. daqList* devices = NULL; daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) { - printObjectList(devices); + printObjectList(devices, listOfAvailableDevices, printout); daqReleaseRef(devices); } @@ -248,7 +272,7 @@ void printDaqDevice(daqDevice* device) daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks); + printObjectList(functionBlocks, listOfAvailableDevices, printout); daqReleaseRef(functionBlocks); } @@ -256,23 +280,27 @@ void printDaqDevice(daqDevice* device) daqDevice_getServers(device, &servers); if (servers != NULL) { - printObjectList(servers); + printObjectList(servers, listOfAvailableDevices, printout); daqReleaseRef(servers); } } -void printDaqFunctionBlock(daqFunctionBlock* functionBlock) +void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) { // Missing self display daqCharPtr* str = NULL; daqBaseObject_toString(functionBlock, str); - printf("Hello from function blcok. Function Block: \n%s\n", *str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); + + if (printout) + printf("Hello from function blcok. Function Block: \n%s\n", *str); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks); + printObjectList(functionBlocks, listOfAvailableDevices, printout); daqReleaseRef(functionBlocks); } @@ -280,7 +308,7 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock) daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); if (inputPorts != NULL) { - printObjectList(inputPorts); + printObjectList(inputPorts, listOfAvailableDevices, printout); daqReleaseRef(inputPorts); } @@ -288,67 +316,82 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock) daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals); + printObjectList(listOfSignals, listOfAvailableDevices, printout); daqReleaseRef(listOfSignals); } } -void printDaqFolder(daqFolder* folder) +void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) { - // Self descriptrion daqCharPtr* str = NULL; daqBaseObject_toString(folder, str); - printf("Hello from folder. Folder:\n%s\n", *str); + + addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); + + if (printout) + printf("Hello from folder. Folder:\n%s\n", *str); daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); if (listOfItems != NULL) { - printObjectList(listOfItems); + printObjectList(listOfItems, listOfAllDevices, printout); daqReleaseRef(listOfItems); } } -void printDaqServer(daqServer* server) +void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) { - // Self description daqCharPtr* str = NULL; daqBaseObject_toString(server, str); - printf("Hello from server. Server:\n%s\n", *str); + + addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); + + if(printout) + printf("Hello from server. Server:\n%s\n", *str); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals); + printObjectList(listOfSignals, listOfAllAvailableDevices, printout); daqReleaseRef(listOfSignals); } } -void printDaqSyncComponent(daqSyncComponent* syncComp) +void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) { // Leaf node - // Self description daqCharPtr* str = NULL; daqBaseObject_toString(syncComp, str); - printf("Hello from sync component. Sync component:\n%s\n", *str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); + + if(printout) + printf("Hello from sync component. Sync component:\n%s\n", *str); } -void printInputPort(daqInputPort* inputPort) +void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) { - // Self description daqCharPtr* str = NULL; daqBaseObject_toString(inputPort, str); - printf("Hello from input port. InputPort:\n%s\n", *str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); + + if (printout) + printf("Hello from input port. InputPort:\n%s\n", *str); } -void printDaqSignal(daqSignal* signal) +void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) { // Leaf node - // Self Description daqCharPtr* str = NULL; daqBaseObject_toString(signal, str); - printf("Hello from signal. Signal:\n%s\n", *str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); + + if (printout) + printf("Hello from signal. Signal:\n%s\n", *str); } // There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) @@ -365,10 +408,20 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - printDaqDevice((daqDevice*) instance); + daqDict* listOfComponenets = NULL; + daqBool printout = True; + + componentTreePrintOut(instance, listOfComponenets, printout); + daqReleaseRef(listOfComponenets); daqReleaseRef(instance); daqReleaseRef(simulator); daqReleaseRef(simulatorInstance); return 0; -} \ No newline at end of file +} + + +// TODOs: +// - Add caching of key-value pairs DONE +// - Add display of tree DONE(ISH) +// - Add display info for specified component IN PROGRESS From d2b056611f887f528e568a63a3bc6c154a0204bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 13 Jan 2026 16:15:05 +0100 Subject: [PATCH 023/103] Added sceleton for globalID search --- examples/2_0_tree_traversal.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 552a7d6..b1e3ea2 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -394,6 +394,12 @@ void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printf("Hello from signal. Signal:\n%s\n", *str); } +void searchComponentTree(daqDict* listOfComponents, const char* searchQuery) +{ + daqString* queryString = NULL; + daqString_createString(&queryString, searchQuery); +} + // There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) // The IOFolder would use get signals as a substitute for a recursive search with getItems, but presenting a flat structure in return. // It can be used to display an alterantive way of parsing and recieving items in a folder From 1a84ccda5df72891fd289a7ec7e8e24a86c5c8c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 14 Jan 2026 11:35:49 +0100 Subject: [PATCH 024/103] Removed hanging TODO comments and misc. misc: Added skeleton structure for application final iteration --- examples/2_0_tree_traversal.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index b1e3ea2..49216c9 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -394,10 +394,12 @@ void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printf("Hello from signal. Signal:\n%s\n", *str); } -void searchComponentTree(daqDict* listOfComponents, const char* searchQuery) +void searchComponentTree(daqString** componentDescription, daqDict* listOfComponents, const char* searchQuery) { daqString* queryString = NULL; daqString_createString(&queryString, searchQuery); + daqDict_get(listOfComponents, queryString, componentDescription); + daqReleaseRef(queryString); } // There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) @@ -415,9 +417,24 @@ int main() addSimulator(&simulator, &instance); daqDict* listOfComponenets = NULL; - daqBool printout = True; - componentTreePrintOut(instance, listOfComponenets, printout); + componentTreePrintOut(instance, listOfComponenets, True); + + // Application that can be asked to display a component tree, check if the component with the specified gloabalID exists, displays + + // Main application loop + while(True) + { + + } + + // Create a tree (so that we can immidiately use the search functionality) + + // Check for user input + + // if display of a tree is requested, delete the previously stored tree and display the newly built one (call the componentTreePrintOut with the printout set to true) + + // Clean up after yourself before you exit, when exit procedure is called (remember the daqReleaseRef calls for all non core types) daqReleaseRef(listOfComponenets); daqReleaseRef(instance); @@ -425,9 +442,3 @@ int main() daqReleaseRef(simulatorInstance); return 0; } - - -// TODOs: -// - Add caching of key-value pairs DONE -// - Add display of tree DONE(ISH) -// - Add display info for specified component IN PROGRESS From c9cbf11a661ebcfc61d488119cd440acb4c1a3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 14 Jan 2026 14:45:36 +0100 Subject: [PATCH 025/103] Removed unnecesary comments --- examples/2_0_tree_traversal.c | 80 ++++++----------------------------- 1 file changed, 14 insertions(+), 66 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 49216c9..2b4f297 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -51,69 +51,8 @@ void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* compon daqReleaseRef(description); } - // Note: The case when getters fail should be handled so no crashes happen (at least not from this). - /* - * daqDevice_getDevices() - * Device checklist: - * daqDevice_getInputsOutputsFolder() - * daqDevice_getFunctionBlocks() - * daqDevice_getSyncComponent() - * daqDevice_getServers() - */ - - /* - * daqFolder_getItems - * IOFolder checklist: - * daqList zapelji se skozi celoten seznam in pošlji vsako posebej naprej - * (Spremeni pogled na function block na pogled na kanal (Channel) in iz njega pridobi zaznamke (tags) in si jih shrani) - * daqFunctionBlock_getFunctionBlocks() - * daqFunctionBlock_getInputPorts() - * daqFunctionBlock_getSignals() - */ - - /* - * daqFunctionBlock_getFunctionBlocks() - * Function Block checklist: - * daqFunctionBlock_getInputPorts() - * daqFunctionBlock_getSignals() - */ - - /* - * Server folder checklist: - * daqServer_getSignals() - * daqServer_getStreaming() - */ - - /* - * Input ports checklist: - * daqInputPort_getSignals() - */ - - /* - * Sync Component checklist: - * samo to kar je na njemu (torej samo pointer do objekta je dovolj) - */ - - /* - * Signal checklist: - * tisto kar je, vec ni potrebno - */ - - - // Device -> Folder -> FB/Channel -> Signal - // \-> SyncComponent - - /*daqFolder* ioFolder = NULL; - daqDevice_getInputsOutputsFolder(headDevice, &ioFolder); - - daqServer* server; - - daqStreaming* streaming = NULL; - daqServer_getStreaming(server, &streaming); - */ - void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout) { daqDict_createDict(listOfAvailableDevices); @@ -416,27 +355,36 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - daqDict* listOfComponenets = NULL; + daqDict* listOfComponents = NULL; - componentTreePrintOut(instance, listOfComponenets, True); + componentTreePrintOut(instance, listOfComponents, True); - // Application that can be asked to display a component tree, check if the component with the specified gloabalID exists, displays + // Application that can be asked to display a component tree, check if the component with the specified gloabalID exists, displays + const char* input; + scanf("(%ms)", &input); + printf("Hello, how do you do %s", input); + daqBool exitCase = True; // Main application loop while(True) { - + if(exitCase) + break; } // Create a tree (so that we can immidiately use the search functionality) + componentTreePrintOut(instance, listOfComponents, False); + // Check for user input // if display of a tree is requested, delete the previously stored tree and display the newly built one (call the componentTreePrintOut with the printout set to true) + componentTreePrintOut(instance, listOfComponents, True); + // Clean up after yourself before you exit, when exit procedure is called (remember the daqReleaseRef calls for all non core types) - daqReleaseRef(listOfComponenets); + daqReleaseRef(listOfComponents); daqReleaseRef(instance); daqReleaseRef(simulator); daqReleaseRef(simulatorInstance); From 259123856b26ae929862f119c4690cf7d65a6faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 14 Jan 2026 14:46:19 +0100 Subject: [PATCH 026/103] Missed it --- examples/2_0_tree_traversal.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 2b4f297..f52c29e 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -368,6 +368,24 @@ int main() // Main application loop while(True) { + int choice = checkInput(&exitCase); + + switch (choice) + { + case 1: + { + + } + case 2: + { + + } + default: + { + + } + } + if(exitCase) break; } @@ -378,8 +396,14 @@ int main() // Check for user input + // 1-User requested a display of componentTree + // 2-User would like to search for a component with by specifying the globalID + // 3-Exit the application + // if display of a tree is requested, delete the previously stored tree and display the newly built one (call the componentTreePrintOut with the printout set to true) + + componentTreePrintOut(instance, listOfComponents, True); // Clean up after yourself before you exit, when exit procedure is called (remember the daqReleaseRef calls for all non core types) From 36bcb0e1419e2ec00ae611fe86a6cecb86787f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 15 Jan 2026 15:59:30 +0100 Subject: [PATCH 027/103] Updated exaple to a working state It now displays the tree structure of the connected simulator --- examples/2_0_tree_traversal.c | 108 ++++++++++++------------------ examples/util_headers/daq_utils.h | 11 ++- 2 files changed, 50 insertions(+), 69 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index f52c29e..b033745 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -51,18 +51,20 @@ void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* compon daqReleaseRef(description); } -// Note: The case when getters fail should be handled so no crashes happen (at least not from this). - void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout) { daqDict_createDict(listOfAvailableDevices); - printDaqDevice(headDevice, listOfAvailableDevices, printout); + printDaqDevice(headDevice, *listOfAvailableDevices, printout); } void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool printout) { // Check for emptyness of list should be done outside daqBaseObject* listMember = NULL; + daqSizeT count = 0; + daqList_getCount(list, &count); + if (count <= 0) + return; daqList_getItemAt(list, 0, &listMember); enum ComponentType componentType = Unk; @@ -173,11 +175,11 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqDeviceInfo* deviceInfo = NULL; daqDevice_getInfo(device, &deviceInfo); daqCharPtr* str = NULL; - daqBaseObject_toString(deviceInfo, str); + daqBaseObject_toString((daqBaseObject*)deviceInfo, str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); - if(printout) + if(printout && str != NULL) printf("Hello from device. Device Info: \n%s\n", *str); daqReleaseRef(deviceInfo); @@ -228,12 +230,12 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail { // Missing self display daqCharPtr* str = NULL; - daqBaseObject_toString(functionBlock, str); + daqBaseObject_toString((daqBaseObject*)functionBlock, str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); - if (printout) - printf("Hello from function blcok. Function Block: \n%s\n", *str); + if (printout && str != NULL) + printf("Hello from function block. Function Block: \n%s\n", *str); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); @@ -263,11 +265,11 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) { daqCharPtr* str = NULL; - daqBaseObject_toString(folder, str); + daqBaseObject_toString((daqBaseObject*)folder, str); addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); - if (printout) + if (printout&& str!=NULL) printf("Hello from folder. Folder:\n%s\n", *str); daqList* listOfItems = NULL; @@ -282,11 +284,11 @@ void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printo void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) { daqCharPtr* str = NULL; - daqBaseObject_toString(server, str); + daqBaseObject_toString((daqBaseObject*)server, str); addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); - if(printout) + if(printout && str != NULL) printf("Hello from server. Server:\n%s\n", *str); daqList* listOfSignals = NULL; @@ -302,22 +304,22 @@ void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableD { // Leaf node daqCharPtr* str = NULL; - daqBaseObject_toString(syncComp, str); + daqBaseObject_toString((daqBaseObject*)syncComp, str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); - if(printout) + if(printout && str != NULL) printf("Hello from sync component. Sync component:\n%s\n", *str); } void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) { daqCharPtr* str = NULL; - daqBaseObject_toString(inputPort, str); + daqBaseObject_toString((daqBaseObject*)inputPort, str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); - if (printout) + if (printout && str != NULL) printf("Hello from input port. InputPort:\n%s\n", *str); } @@ -325,11 +327,11 @@ void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool { // Leaf node daqCharPtr* str = NULL; - daqBaseObject_toString(signal, str); + daqBaseObject_toString((daqBaseObject*)signal, str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); - if (printout) + if (printout && str != NULL) printf("Hello from signal. Signal:\n%s\n", *str); } @@ -341,11 +343,6 @@ void searchComponentTree(daqString** componentDescription, daqDict* listOfCompon daqReleaseRef(queryString); } -// There is an argument for including the a specific print function for ioFolder (as it is itself a specific type of a folder) -// The IOFolder would use get signals as a substitute for a recursive search with getItems, but presenting a flat structure in return. -// It can be used to display an alterantive way of parsing and recieving items in a folder -// (due to limitations imposed upon IOFolder, we could afford it in this givin function). - int main() { daqInstance* simulatorInstance = NULL; @@ -357,57 +354,34 @@ int main() daqDict* listOfComponents = NULL; - componentTreePrintOut(instance, listOfComponents, True); + componentTreePrintOut((daqDevice*)instance, &listOfComponents, True); - // Application that can be asked to display a component tree, check if the component with the specified gloabalID exists, displays + daqSizeT count = 0; + daqDict_getCount(listOfComponents, &count); + printf("%llu\n", count); - const char* input; - scanf("(%ms)", &input); - printf("Hello, how do you do %s", input); - daqBool exitCase = True; - // Main application loop - while(True) - { - int choice = checkInput(&exitCase); + daqList* keys = NULL; + daqDict_getKeyList(listOfComponents, &keys); + daqIterator* it = NULL; + daqList_createStartIterator(keys, &it); - switch (choice) + while(daqIterator_moveNext(it) == DAQ_SUCCESS) + { + daqBaseObject* current = NULL; + daqIterator_getCurrent(it, ¤t); + daqString* comp = NULL; + if(DAQ_SUPPORTS_INTERFACE(current, DAQ_STRING_INTF_ID)) { - case 1: - { - - } - case 2: - { - - } - default: - { - - } + daqQueryInterface(current, DAQ_STRING_INTF_ID, &comp); + daqConstCharPtr constChar = NULL; + daqString_getCharPtr(comp, &constChar); + printf("%s\n", constChar); } - - if(exitCase) - break; + daqReleaseRef(current); } - // Create a tree (so that we can immidiately use the search functionality) - - componentTreePrintOut(instance, listOfComponents, False); - - // Check for user input - - // 1-User requested a display of componentTree - // 2-User would like to search for a component with by specifying the globalID - // 3-Exit the application - - // if display of a tree is requested, delete the previously stored tree and display the newly built one (call the componentTreePrintOut with the printout set to true) - - - - componentTreePrintOut(instance, listOfComponents, True); - - // Clean up after yourself before you exit, when exit procedure is called (remember the daqReleaseRef calls for all non core types) - + daqReleaseRef(it); + daqReleaseRef(keys); daqReleaseRef(listOfComponents); daqReleaseRef(instance); daqReleaseRef(simulator); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index fee28ed..afb0d81 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -159,7 +159,14 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelWarn); - daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + err = daqInstanceBuilder_build(instanceBuilder, instance); + + if (err != 0) + { + printf("Error occured when creating simulator device."); + return DAQ_FAILED(err); + } daqReleaseRef(modulePath); daqReleaseRef(instanceBuilder); @@ -172,7 +179,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqString_createString(&typeStr, "OpenDAQNativeStreaming"); daqServer* server = NULL; - daqErrCode err = daqDevice_addServer((daqDevice*)*instance, typeStr, serverConfig, &server); + daqDevice_addServer((daqDevice*)*instance, typeStr, serverConfig, &server); daqServer_enableDiscovery(server); daqReleaseRef(typeStr); From 39204d3689697e0e6827269b12cf764d756a08e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 15 Jan 2026 16:00:36 +0100 Subject: [PATCH 028/103] Remowed access new line --- examples/2_0_tree_traversal.c | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index b033745..852215a 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -1,4 +1,3 @@ - /* * In this example we will demonstrate the structure of openDAQ tree structure * by traversing across it. From 568f65643a70c300506d4cc545a79e5c86d8b956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 08:49:34 +0100 Subject: [PATCH 029/103] Updated example and removed dangling comments --- examples/2_0_tree_traversal.c | 56 +++++++++++++------------------ examples/util_headers/daq_utils.h | 2 +- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index 852215a..b02c1a8 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -20,12 +20,6 @@ enum ComponentType InputPort }; -struct ComponentInfo -{ - daqComponent* reference; - enum ComponentType type; -}; - void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout); void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout); void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout); @@ -171,17 +165,13 @@ void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool pri void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout) { - daqDeviceInfo* deviceInfo = NULL; - daqDevice_getInfo(device, &deviceInfo); - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)deviceInfo, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)device, &str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); - if(printout && str != NULL) - printf("Hello from device. Device Info: \n%s\n", *str); - - daqReleaseRef(deviceInfo); + if (printout && str != NULL) + printDaqFormattedString("Device: %s\n", str); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); @@ -228,13 +218,13 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) { // Missing self display - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)functionBlock, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)functionBlock, &str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); if (printout && str != NULL) - printf("Hello from function block. Function Block: \n%s\n", *str); + printDaqFormattedString("Function block: %s\n", str); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); @@ -263,13 +253,13 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) { - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)folder, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)folder, &str); addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); if (printout&& str!=NULL) - printf("Hello from folder. Folder:\n%s\n", *str); + printDaqFormattedString("Folder: %s\n", str); daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); @@ -282,13 +272,13 @@ void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printo void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) { - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)server, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)server, &str); addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); if(printout && str != NULL) - printf("Hello from server. Server:\n%s\n", *str); + printDaqFormattedString("Server: %s\n", str); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); @@ -302,36 +292,36 @@ void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBo void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) { // Leaf node - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)syncComp, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)syncComp, &str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); if(printout && str != NULL) - printf("Hello from sync component. Sync component:\n%s\n", *str); + printDaqFormattedString("Sync component: %s\n", str); } void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) { - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)inputPort, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)inputPort, &str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); if (printout && str != NULL) - printf("Hello from input port. InputPort:\n%s\n", *str); + printDaqFormattedString("Input port: %s\n", str); } void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) { // Leaf node - daqCharPtr* str = NULL; - daqBaseObject_toString((daqBaseObject*)signal, str); + daqString* str = NULL; + daqComponent_getName((daqComponent*)signal, &str); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); if (printout && str != NULL) - printf("Hello from signal. Signal:\n%s\n", *str); + printDaqFormattedString("Signal: %s\n", str); } void searchComponentTree(daqString** componentDescription, daqDict* listOfComponents, const char* searchQuery) @@ -357,7 +347,7 @@ int main() daqSizeT count = 0; daqDict_getCount(listOfComponents, &count); - printf("%llu\n", count); + printf("\nNumber of components in the openDAQ tree: %llu\n\n", count); daqList* keys = NULL; daqDict_getKeyList(listOfComponents, &keys); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index afb0d81..c9f9968 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -159,7 +159,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelWarn); - daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0; err = daqInstanceBuilder_build(instanceBuilder, instance); if (err != 0) From f1c6d9ab7bae7bbebf877d905a854af159011226 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 08:55:14 +0100 Subject: [PATCH 030/103] Added the new example --- examples/3_0_property_name_and_value_visualization.c | 0 examples/CMakeLists.txt | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 examples/3_0_property_name_and_value_visualization.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c new file mode 100644 index 0000000..e69de29 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 98672a5..1e0db01 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,8 @@ set(C_MODIFIED_EXAMPLES 6_read_with_formatted_timestamps.c 7_print_data_descriptor_and_calculater_sample_rate.c 8_create_and_read_sample_rate_buffers.c - 2_0_tree_traversal.c) + 2_0_tree_traversal.c + 3_0_property_name_and_value_visualization.c) foreach(src ${C_MODIFIED_EXAMPLES}) From b38ad57c9254fe3c9d2c2b90897a1baafd17d255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 10:53:40 +0100 Subject: [PATCH 031/103] Introduced the enum for property separation --- ..._0_property_name_and_value_visualization.c | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index e69de29..84aa3bc 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -0,0 +1,42 @@ +/* + * This example + */ + +#include + +enum PropertyType +{ + Property = 0, + BoolProprerty, + IntProperty, + FloatProperty, + StringProperty, + ListProperty, + DictProperty, + RatioProperty, + ObjectProperty, + ReferenceProperty, + FunctionProperty, + SelectionProperty, + SparseSelectionProperty, + StructSelectionProperty, + EnumerationProperty +}; + + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + // Get the globalId of a componet + + // + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); +} From d65e190aa132a5f4034c22dcc4b42c3f4af06c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 14:36:30 +0100 Subject: [PATCH 032/103] Updated Structure of the example --- ..._0_property_name_and_value_visualization.c | 68 +++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 84aa3bc..2a6f965 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -1,5 +1,6 @@ /* - * This example + * This example demonstrates how to search through properties, + * determine their (core)type and display their value. */ #include @@ -23,6 +24,67 @@ enum PropertyType EnumerationProperty }; +void printCoreTypeObjects(daqProperty* coreTypeObject) +{ + // TODO +} + +void displayPropertyTypes(daqPropertyObject* propertyObject) +{ + // List of IProperty + daqList* properties = NULL; + daqPropertyObject_getVisibleProperties(propertyObject, &properties); + + daqSizeT count = 0; + daqList_getCount(properties, &count); + + if (count <= 0) + { + daqReleaseRef(properties); + return; + } + + for (daqSizeT i = 0; i< count; i++) + { + daqBaseObject* currentPropBaseObj = NULL; + daqList_getItemAt(properties, i, ¤tPropBaseObj); + + // Cast into IProperty + if (DAQ_SUPPORTS_INTERFACE(currentPropBaseObj, DAQ_PROPERTY_INTF_ID)) + { + daqProperty* prop = NULL; + daqQueryInterface(currentPropBaseObj, DAQ_PROPERTY_INTF_ID, &prop); + + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(prop, &propCoreType); + if (propCoreType == daqCtObject) + { + // Write them up first + printCoreTypeObjects(prop); + } + else if (propCoreType == daqCtUndefined) + { + // Maybe needed (don't know yet) + } + daqString* propName = NULL; + daqProperty_getName(prop, &propName); + printDaqFormattedString("Property name: %s", propName); + daqBaseObject* propValueObj = NULL; + daqProperty_getValue(prop, propValueObj); + daqConstCharPtr propValueObjStr = ""; + daqBaseObject_toString(propValueObj, propValueObjStr); + printf("\nValue of the property: %s\n", propValueObjStr); + + daqReleaseRef(propValueObj); + daqReleaseRef(propName); + daqReleaseRef(prop); + } + + daqReleaseRef(currentPropBaseObj); + } + daqReleaseRef(properties); +} + int main() { @@ -32,9 +94,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - // Get the globalId of a componet - - // + displayPropertyTypes((daqPropertyObject*)simulator); daqReleaseRef(simulator); daqReleaseRef(instance); From 9ece61f660a14b01a8fbf52d2fe459d02538a9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 20 Jan 2026 08:23:37 +0100 Subject: [PATCH 033/103] Updated structure for the example --- ..._0_property_name_and_value_visualization.c | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 2a6f965..727f87b 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -24,6 +24,127 @@ enum PropertyType EnumerationProperty }; +int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) +{ + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(property, propCoreType); + + if (propCoreType == coreType) + return 1; + return 0; +} + +// Missing handling for IntProp, SelectionProp, SparseSelectionProp, ReferenceProp, FunctionProp +// Note on universal attributes (default value, read-only, visible, ...): +// - They will be seen on all visualizations of properties +// - + + +// BoolProperty +void boolProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if (propertyValueTypeCheck(property, daqCtBool)) + { + // We have to check the default value and the current value that the property is set to + } +} + +// FloatValue +void floatProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if (propertyValueTypeCheck(property, daqCtFloat)) + { + // Min value, max value, default value, suggested values, visible + daqFloat minValue = 0; + daqProperty_getMinValue(property, &minValue); + + daqFloat maxValue = 0; + daqProperty_getMaxValue(property, &minValue); + + daqBaseObject* defaultValueObj = NULL; + daqProperty_getDefaultValue(property, &defaultValueObj); + daqFloat defaultValue = 0; + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + + daqList* listOfRecommendedValues = NULL; + daqProperty_getSuggestedValues(property, &listOfRecommendedValues); + + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + // Display min, max, default and suggested values + + } +} + +// StringProperty +void stringProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if(propertyValueTypeCheck(property, daqCtString)) + { + // Default value, suggested values, visible + } +} + +// RatioProperty +void ratioProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if(propertyValueTypeCheck(property, daqCtRatio)) + { + + } +} + +// ListProperty +void listProp(daqProperty* property) +{ + if (propertyValueTypeCheck(property, daqCtList)) + { + + } +} + +// DictProperty +void dictProp(daqProperty* property) +{ + if(propertyValueTypeCheck(property, daqCtDict)) + { + + } +} + +// ObjectProperty +void objectProp(daqProperty* property) +{ + if(propertyValueTypeCheck(property, daqCtDict)) + { + + } +} + +// StructureProperty +void structProp(daqProperty* property) +{ + if(propertyValueTypeCheck(property, daqCtStruct)) + { + + } +} + +// EnumerationProperty +void enumProp(daqProperty* property) +{ + if(propertyValueTypeCheck(property, daqCtEnumeration)) + { + + } +} + void printCoreTypeObjects(daqProperty* coreTypeObject) { // TODO @@ -65,6 +186,7 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) else if (propCoreType == daqCtUndefined) { // Maybe needed (don't know yet) + } daqString* propName = NULL; daqProperty_getName(prop, &propName); From 481bbdb51abc6ca7689e447f318efe199eaec5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 20 Jan 2026 14:22:04 +0100 Subject: [PATCH 034/103] Updated the example --- examples/2_0_tree_traversal.c | 51 ++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c index b02c1a8..2384736 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/2_0_tree_traversal.c @@ -168,11 +168,13 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqString* str = NULL; daqComponent_getName((daqComponent*)device, &str); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); - if (printout && str != NULL) printDaqFormattedString("Device: %s\n", str); + daqReleaseRef(str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); + daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) @@ -189,7 +191,6 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqReleaseRef(syncComponent); } - // The following Structures can appear in multiples, so we handle them all. daqList* devices = NULL; daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) @@ -217,15 +218,16 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) { - // Missing self display daqString* str = NULL; daqComponent_getName((daqComponent*)functionBlock, &str); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); if (printout && str != NULL) printDaqFormattedString("Function block: %s\n", str); + daqReleaseRef(str); + + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); + daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) @@ -256,11 +258,14 @@ void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printo daqString* str = NULL; daqComponent_getName((daqComponent*)folder, &str); - addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); if (printout&& str!=NULL) printDaqFormattedString("Folder: %s\n", str); + daqReleaseRef(str); + + addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); + daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); if (listOfItems != NULL) @@ -275,11 +280,13 @@ void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBo daqString* str = NULL; daqComponent_getName((daqComponent*)server, &str); - addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); - if(printout && str != NULL) printDaqFormattedString("Server: %s\n", str); + daqReleaseRef(str); + + addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); + daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); if (listOfSignals != NULL) @@ -291,7 +298,6 @@ void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBo void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) { - // Leaf node daqString* str = NULL; daqComponent_getName((daqComponent*)syncComp, &str); @@ -299,6 +305,8 @@ void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableD if(printout && str != NULL) printDaqFormattedString("Sync component: %s\n", str); + + daqReleaseRef(str); } void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) @@ -310,11 +318,12 @@ void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, da if (printout && str != NULL) printDaqFormattedString("Input port: %s\n", str); + + daqReleaseRef(str); } void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) { - // Leaf node daqString* str = NULL; daqComponent_getName((daqComponent*)signal, &str); @@ -322,14 +331,8 @@ void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool if (printout && str != NULL) printDaqFormattedString("Signal: %s\n", str); -} -void searchComponentTree(daqString** componentDescription, daqDict* listOfComponents, const char* searchQuery) -{ - daqString* queryString = NULL; - daqString_createString(&queryString, searchQuery); - daqDict_get(listOfComponents, queryString, componentDescription); - daqReleaseRef(queryString); + daqReleaseRef(str); } int main() @@ -351,13 +354,13 @@ int main() daqList* keys = NULL; daqDict_getKeyList(listOfComponents, &keys); - daqIterator* it = NULL; - daqList_createStartIterator(keys, &it); + daqIterator* iterator = NULL; + daqList_createStartIterator(keys, &iterator); - while(daqIterator_moveNext(it) == DAQ_SUCCESS) + while(daqIterator_moveNext(iterator) == DAQ_SUCCESS) { daqBaseObject* current = NULL; - daqIterator_getCurrent(it, ¤t); + daqIterator_getCurrent(iterator, ¤t); daqString* comp = NULL; if(DAQ_SUPPORTS_INTERFACE(current, DAQ_STRING_INTF_ID)) { @@ -369,11 +372,11 @@ int main() daqReleaseRef(current); } - daqReleaseRef(it); + daqReleaseRef(iterator); daqReleaseRef(keys); daqReleaseRef(listOfComponents); - daqReleaseRef(instance); daqReleaseRef(simulator); + daqReleaseRef(instance); daqReleaseRef(simulatorInstance); return 0; } From 72c0eb7a76531673a99ec6d35f1dbc5ea76a726e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 20 Jan 2026 15:15:47 +0100 Subject: [PATCH 035/103] Renamed example --- examples/CMakeLists.txt | 2 +- examples/{2_0_tree_traversal.c => tree_traversal.c} | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) rename examples/{2_0_tree_traversal.c => tree_traversal.c} (99%) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 2a9ba2b..45454d5 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,7 @@ set(C_MODIFIED_EXAMPLES read_with_formatted_timestamps.c print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c - 2_0_tree_traversal.c) + tree_traversal.c) foreach(src ${C_MODIFIED_EXAMPLES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/2_0_tree_traversal.c b/examples/tree_traversal.c similarity index 99% rename from examples/2_0_tree_traversal.c rename to examples/tree_traversal.c index 2384736..a1dae16 100644 --- a/examples/2_0_tree_traversal.c +++ b/examples/tree_traversal.c @@ -52,7 +52,6 @@ void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevic void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool printout) { - // Check for emptyness of list should be done outside daqBaseObject* listMember = NULL; daqSizeT count = 0; daqList_getCount(list, &count); From 27b7ded8e4ab7fcd9ba93d358bdb75d719144fac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 20 Jan 2026 15:27:48 +0100 Subject: [PATCH 036/103] Renamed variable for greater clarity --- examples/tree_traversal.c | 78 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index a1dae16..007237a 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -21,6 +21,7 @@ enum ComponentType }; void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout); + void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout); void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout); void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout); @@ -28,6 +29,7 @@ void printDaqServer(daqServer* server, daqDict* listOfAvailableDevices, daqBool void printDaqFolder(daqFolder* folder, daqDict* listOfAvailableDevices, daqBool printout); void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout); void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout); + void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component); @@ -164,13 +166,13 @@ void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool pri void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)device, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)device, &name); - if (printout && str != NULL) - printDaqFormattedString("Device: %s\n", str); + if (printout && name != NULL) + printDaqFormattedString("Device: %s\n", name); - daqReleaseRef(str); + daqReleaseRef(name); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); @@ -217,13 +219,13 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)functionBlock, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)functionBlock, &name); - if (printout && str != NULL) - printDaqFormattedString("Function block: %s\n", str); + if (printout && name != NULL) + printDaqFormattedString("Function block: %s\n", name); - daqReleaseRef(str); + daqReleaseRef(name); addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); @@ -254,14 +256,14 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)folder, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)folder, &name); - if (printout&& str!=NULL) - printDaqFormattedString("Folder: %s\n", str); + if (printout&& name!=NULL) + printDaqFormattedString("Folder: %s\n", name); - daqReleaseRef(str); + daqReleaseRef(name); addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); @@ -276,13 +278,13 @@ void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printo void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)server, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)server, &name); - if(printout && str != NULL) - printDaqFormattedString("Server: %s\n", str); + if(printout && name != NULL) + printDaqFormattedString("Server: %s\n", name); - daqReleaseRef(str); + daqReleaseRef(name); addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); @@ -297,41 +299,41 @@ void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBo void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)syncComp, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)syncComp, &name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); + if(printout && name != NULL) + printDaqFormattedString("Sync component: %s\n", name); - if(printout && str != NULL) - printDaqFormattedString("Sync component: %s\n", str); + daqReleaseRef(name); - daqReleaseRef(str); + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); } void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)inputPort, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)inputPort, &name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); + if (printout && name != NULL) + printDaqFormattedString("Input port: %s\n", name); - if (printout && str != NULL) - printDaqFormattedString("Input port: %s\n", str); + daqReleaseRef(name); - daqReleaseRef(str); + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); } void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) { - daqString* str = NULL; - daqComponent_getName((daqComponent*)signal, &str); + daqString* name = NULL; + daqComponent_getName((daqComponent*)signal, &name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); + if (printout && name != NULL) + printDaqFormattedString("Signal: %s\n", name); - if (printout && str != NULL) - printDaqFormattedString("Signal: %s\n", str); + daqReleaseRef(name); - daqReleaseRef(str); + addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); } int main() From 0c8b3581f93162ff7e928865f058322f550ba75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 08:33:43 +0100 Subject: [PATCH 037/103] Updated example description --- examples/tree_traversal.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 007237a..f54f401 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -1,6 +1,7 @@ /* - * In this example we will demonstrate the structure of openDAQ tree structure - * by traversing across it. + * In openDAQ devices are represented by a tree structure. Example demonstrates how to fully explore that tree and displays + * the type of the object alongside its name. After saving every object into an dictionary, example displays all of saved objects + * globalIds. */ #include From 4033bfe6b641d7b6a5e2a09960dba3eca87c78f9 Mon Sep 17 00:00:00 2001 From: Jaka Mohorko Date: Wed, 21 Jan 2026 08:13:18 +0100 Subject: [PATCH 038/103] Set required openDAQ CMake flags --- examples/CMakeLists.txt | 8 +++----- external/openDAQ/CMakeLists.txt | 11 ++++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 45454d5..2fbffb6 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,10 +1,8 @@ get_current_folder_name(TARGET_FOLDER_NAME) -project(labVIEW_example_suite_V2 VERSION 1.0.0 LANGUAGES C) +project(C_example_suite VERSION 1.0.0 LANGUAGES C) - - -set(C_MODIFIED_EXAMPLES +set(EXAMPLE_SOURCES discover_devices.c filter_and_connect_device.c get_signals.c @@ -15,7 +13,7 @@ set(C_MODIFIED_EXAMPLES create_and_read_sample_rate_buffers.c tree_traversal.c) -foreach(src ${C_MODIFIED_EXAMPLES}) +foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) add_executable(${exec_name} ${src}) target_include_directories(${exec_name} PRIVATE util_headers) diff --git a/external/openDAQ/CMakeLists.txt b/external/openDAQ/CMakeLists.txt index 2405215..0d429ba 100644 --- a/external/openDAQ/CMakeLists.txt +++ b/external/openDAQ/CMakeLists.txt @@ -1,5 +1,14 @@ -set(OPENDAQ_ENABLE_TESTS false) +set(OPENDAQ_ENABLE_TESTS OFF CACHE BOOL "" FORCE) +set(OPENDAQ_GENERATE_C_BINDINGS ON CACHE BOOL "" FORCE) +set(DAQMODULES_OPENDAQ_CLIENT_MODULE ON CACHE BOOL "" FORCE) +set(DAQMODULES_OPENDAQ_SERVER_MODULE ON CACHE BOOL "" FORCE) +set(OPENDAQ_ENABLE_NATIVE_STREAMING ON CACHE BOOL "" FORCE) + +set(DAQMODULES_REF_DEVICE_MODULE ON CACHE BOOL "" FORCE) +set(DAQMODULES_REF_FB_MODULE ON CACHE BOOL "" FORCE) +set(DAQMODULES_REF_FB_MODULE_ENABLE_RENDERER ON CACHE BOOL "" FORCE) + FetchContent_Declare( openDAQ GIT_REPOSITORY https://github.com/openDAQ/openDAQ.git From e5d530fb6380b5a28bf20c0e36a3f4c68e85ab9b Mon Sep 17 00:00:00 2001 From: Jaka Mohorko Date: Wed, 21 Jan 2026 08:20:49 +0100 Subject: [PATCH 039/103] Disable logging, use instance builder and module path --- examples/discover_devices.c | 6 ++++++ examples/filter_and_connect_device.c | 15 ++++++++++++--- examples/stream_reader_read_in_loop.c | 2 +- examples/util_headers/daq_utils.h | 4 ++-- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/examples/discover_devices.c b/examples/discover_devices.c index 1b1d10e..c469781 100644 --- a/examples/discover_devices.c +++ b/examples/discover_devices.c @@ -10,6 +10,12 @@ int main(void) { daqInstanceBuilder* builder = NULL; daqInstanceBuilder_createInstanceBuilder(&builder); + + daqString* modulePath = NULL; + daqString_createString(&modulePath, MODULE_PATH); + daqInstanceBuilder_setModulePath(builder, modulePath); + + daqInstanceBuilder_setGlobalLogLevel(builder, daqLogLevelOff); daqInstance* instance = NULL; daqInstance_createInstanceFromBuilder(&instance, builder); diff --git a/examples/filter_and_connect_device.c b/examples/filter_and_connect_device.c index ab7c00c..54ee088 100644 --- a/examples/filter_and_connect_device.c +++ b/examples/filter_and_connect_device.c @@ -7,11 +7,19 @@ int main(void) { - daqInstance* instance = NULL; - daqList* availableDevices = NULL; + daqInstanceBuilder* builder = NULL; + daqInstanceBuilder_createInstanceBuilder(&builder); + + daqString* modulePath = NULL; + daqString_createString(&modulePath, MODULE_PATH); + daqInstanceBuilder_setModulePath(builder, modulePath); + + daqInstanceBuilder_setGlobalLogLevel(builder, daqLogLevelOff); - createInstance(&instance, ""); + daqInstance* instance = NULL; + daqInstance_createInstanceFromBuilder(&instance, builder); + daqList* availableDevices = NULL; daqDevice_getAvailableDevices((daqDevice*)instance, &availableDevices); daqIterator* iterator = NULL; @@ -68,6 +76,7 @@ int main(void) daqReleaseRef(availableDevices); daqReleaseRef(instance); + daqReleaseRef(builder); return 0; } diff --git a/examples/stream_reader_read_in_loop.c b/examples/stream_reader_read_in_loop.c index 75353ca..a093eeb 100644 --- a/examples/stream_reader_read_in_loop.c +++ b/examples/stream_reader_read_in_loop.c @@ -43,7 +43,7 @@ int main(void) // of the reader (in this case) daqStreamReader_read(reader, samples, &count, timeoutMs, NULL); if (count > 0) - printf(" %u no. of times read, %llu sample, %f value\n", + printf(" %u no. of times read, %llu samples, %f value\n", i, count, samples[count - 1]); } diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 3874ebe..3d7d86c 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -155,7 +155,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setModulePath(instanceBuilder, modulePath); - daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelWarn); + daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); daqInstance_createInstanceFromBuilder(instance, instanceBuilder); @@ -247,7 +247,7 @@ static inline daqErrCode createInstance(daqInstance** instance, const char* modu daqInstanceBuilder_addModulePath(instanceBuilder, modulePathStr); - daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelWarn); + daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); daqInstance_createInstanceFromBuilder(instance, instanceBuilder); From ef7e4af0f751799896e203de8cf91a115f28d7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 24 Dec 2025 13:13:45 +0100 Subject: [PATCH 040/103] Added a utility method for retrieval of sample rate from domain data descriptor --- examples/util_headers/daq_utils.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 3d7d86c..ac7fb96 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -58,6 +58,12 @@ static inline daqErrCode calculateSampleRate(daqSizeT* sampleRate, daqRatio* tic */ static inline int checkIsLinearRule(daqDataRule* dataRule); +/* + * Method that takes the tick resolution from domain data descriptor + * and returns the calculated sample rate. + */ +static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); + void daqSleepMs(int milliseconds) { #ifdef _WIN32 From 9a1c2a71a35526c762a1ffdffb0f24dfbaa3fd2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 6 Jan 2026 10:39:05 +0100 Subject: [PATCH 041/103] 2.0 example draft --- examples/2_0_tree_traversal.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 examples/2_0_tree_traversal.c diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c new file mode 100644 index 0000000..1c3527a --- /dev/null +++ b/examples/2_0_tree_traversal.c @@ -0,0 +1,25 @@ +/* + * In this example we will demonstrate the structure of openDAQ tree structure + * by traversing across it. + * + * + */ + +#include + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + // Example code + + daqReleaseRef(instance); + daqReleaseRef(simulator); + daqReleaseRef(simulatorInstance); + return 0; +} \ No newline at end of file From e64514252969d26301a54a183dc0035694c10024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 9 Dec 2025 11:12:46 +0100 Subject: [PATCH 042/103] Addressed code review # Conflicts: # examples/4_filter_and_read_last_value_of_signal.c # examples/6_read_with_formatted_timestamps.c # examples/util_headers/daq_utils.h --- examples/filter_and_read_last_value_of_signal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/filter_and_read_last_value_of_signal.c b/examples/filter_and_read_last_value_of_signal.c index f2a9e1a..6ca0d74 100644 --- a/examples/filter_and_read_last_value_of_signal.c +++ b/examples/filter_and_read_last_value_of_signal.c @@ -20,6 +20,7 @@ daqSignal* iterativeSearchByName(daqString* wantedSignalName, daqDevice* device) daqConstCharPtr signalNameConstChar = NULL; daqString_getCharPtr(wantedSignalName, &signalNameConstChar); + // ?? while (daqIterator_moveNext(iterator) == DAQ_SUCCESS) { daqSignal* currentSignal = NULL; From 8d033ba6b099277050360c5765077ffa8f778c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 9 Dec 2025 12:55:07 +0100 Subject: [PATCH 043/103] Missing changes required by the code review --- examples/filter_and_read_last_value_of_signal.c | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/filter_and_read_last_value_of_signal.c b/examples/filter_and_read_last_value_of_signal.c index 6ca0d74..f2a9e1a 100644 --- a/examples/filter_and_read_last_value_of_signal.c +++ b/examples/filter_and_read_last_value_of_signal.c @@ -20,7 +20,6 @@ daqSignal* iterativeSearchByName(daqString* wantedSignalName, daqDevice* device) daqConstCharPtr signalNameConstChar = NULL; daqString_getCharPtr(wantedSignalName, &signalNameConstChar); - // ?? while (daqIterator_moveNext(iterator) == DAQ_SUCCESS) { daqSignal* currentSignal = NULL; From 034ddbb7db51a7e4bffda15eb1a3500c32fa0a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 15 Jan 2026 15:59:30 +0100 Subject: [PATCH 044/103] Updated exaple to a working state It now displays the tree structure of the connected simulator # Conflicts: # examples/2_0_tree_traversal.c --- examples/util_headers/daq_utils.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index ac7fb96..b9f2755 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -163,7 +163,14 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + err = daqInstanceBuilder_build(instanceBuilder, instance); + + if (err != 0) + { + printf("Error occured when creating simulator device."); + return DAQ_FAILED(err); + } daqReleaseRef(modulePath); daqReleaseRef(instanceBuilder); From 72765daff02ff5d733fbf6bd224251944fd4a68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 08:49:34 +0100 Subject: [PATCH 045/103] Updated example and removed dangling comments --- examples/util_headers/daq_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index b9f2755..0edca5e 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -163,7 +163,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0; err = daqInstanceBuilder_build(instanceBuilder, instance); if (err != 0) From a0ed3afbf24f2227759b70a1dd5bcd56b9ba88c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 20 Jan 2026 15:15:47 +0100 Subject: [PATCH 046/103] Renamed example --- examples/2_0_tree_traversal.c | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 examples/2_0_tree_traversal.c diff --git a/examples/2_0_tree_traversal.c b/examples/2_0_tree_traversal.c deleted file mode 100644 index 1c3527a..0000000 --- a/examples/2_0_tree_traversal.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * In this example we will demonstrate the structure of openDAQ tree structure - * by traversing across it. - * - * - */ - -#include - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - // Example code - - daqReleaseRef(instance); - daqReleaseRef(simulator); - daqReleaseRef(simulatorInstance); - return 0; -} \ No newline at end of file From a5fd85ee1559604f2e7a60721772f3a87f1afdb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 08:50:45 +0100 Subject: [PATCH 047/103] Removing merging artifacts --- examples/util_headers/daq_utils.h | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 0edca5e..2ccdd0d 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -58,12 +58,6 @@ static inline daqErrCode calculateSampleRate(daqSizeT* sampleRate, daqRatio* tic */ static inline int checkIsLinearRule(daqDataRule* dataRule); -/* - * Method that takes the tick resolution from domain data descriptor - * and returns the calculated sample rate. - */ -static inline daqErrCode retrieveSampleRate(daqSizeT* sampleRate, daqDataDescriptor* domainDataDescriptor); - void daqSleepMs(int milliseconds) { #ifdef _WIN32 @@ -163,14 +157,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqErrCode err = 0; - err = daqInstanceBuilder_build(instanceBuilder, instance); - - if (err != 0) - { - printf("Error occured when creating simulator device."); - return DAQ_FAILED(err); - } + daqInstanceBuilder_build(instanceBuilder, instance); daqReleaseRef(modulePath); daqReleaseRef(instanceBuilder); From ced9806ae40e0c82cfbc7136b2c42d97451eefc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 08:52:01 +0100 Subject: [PATCH 048/103] Removing artifacts 2.0 --- examples/util_headers/daq_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 2ccdd0d..3d7d86c 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -157,7 +157,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqInstanceBuilder_build(instanceBuilder, instance); + daqInstance_createInstanceFromBuilder(instance, instanceBuilder); daqReleaseRef(modulePath); daqReleaseRef(instanceBuilder); From 262ef1ab302384ff813e151c25a525d7ed4ee4a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 09:02:21 +0100 Subject: [PATCH 049/103] Added basic handling for some attributes --- ..._0_property_name_and_value_visualization.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 727f87b..c2c13b9 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -88,6 +88,17 @@ void stringProp(daqProperty* property) { // Default value, suggested values, visible } + daqBaseObject* defaultStringObj = NULL; + daqProperty_getDefaultValue(property, &defaultStringObj); + daqString* defaultString = NULL; + daqQueryInterface(defaultStringObj, DAQ_STRING_INTF_ID, &defaultString); + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqList* suggestedStrings = NULL; + daqProperty_getSuggestedValues(property, &suggestedStrings); + // Display } // RatioProperty @@ -98,6 +109,22 @@ void ratioProp(daqProperty* property) { } + daqBaseObject* defaultRatioObj = NULL; + daqProperty_getDefaultValue(property, &defaultRatioObj); + daqRatio* defaultRatio = NULL; + daqQueryInterface(defaultRatioObj, DAQ_RATIO_INTF_ID, &defaultRatio); + + // Min and max are included here + daqNumber* minValue = NULL; + daqNumber* maxValue = NULL; + daqProperty_getMinValue(property, &minValue); + daqProperty_getMaxValue(property, &maxValue); + + // When displaying min/max, there needs to be an emptiness check + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + // Not sure about suggested values.... } // ListProperty @@ -107,6 +134,11 @@ void listProp(daqProperty* property) { } + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); } // DictProperty From 75f63e5dab3b49a57ed24098bdeb38a7c8a3c6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 12:05:16 +0100 Subject: [PATCH 050/103] Added int property --- ..._0_property_name_and_value_visualization.c | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index c2c13b9..ea4b680 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -50,7 +50,7 @@ void boolProp(daqProperty* property) } } -// FloatValue +// FloatProperty void floatProp(daqProperty* property) { // Retrive metadata, check what type the value is... @@ -80,6 +80,33 @@ void floatProp(daqProperty* property) } } +// IntProperty +void intProp(daqProperty* property) +{ + daqInt minValue = 0; + daqProperty_getMinValue(property, &minValue); + + daqInt maxValue = 0; + daqProperty_getMaxValue(property, &maxValue); + + daqBaseObject* defaultValueObj = NULL; + daqProperty_getDefaultValue(property, &defaultValueObj); + + daqInt defaultValue = 0; + daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + + daqList* listOfSuggestedValues = NULL; + daqProperty_getSuggestedValues(property, &listOfSuggestedValues); + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqString* name = NULL; + daqProperty_getName(property, &name); + +} + // StringProperty void stringProp(daqProperty* property) { @@ -148,6 +175,14 @@ void dictProp(daqProperty* property) { } + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + + daqCoreType keyType = daqCtUndefined; + daqProperty_getKeyType(property, &keyType); } // ObjectProperty @@ -157,6 +192,13 @@ void objectProp(daqProperty* property) { } + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqBaseObject* defaultObjectObj = NULL; + daqProperty_getDefaultValue(property, defaultObjectObj); + + } // StructureProperty @@ -166,6 +208,7 @@ void structProp(daqProperty* property) { } + } // EnumerationProperty From 1a8c7b2f1285bc961fbc186bc24359c18e985bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 21 Jan 2026 15:45:36 +0100 Subject: [PATCH 051/103] Updated state of prop visualization example --- ..._0_property_name_and_value_visualization.c | 67 +++++++++++-------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index ea4b680..320181e 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -27,7 +27,7 @@ enum PropertyType int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) { daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, propCoreType); + daqProperty_getValueType(property, &propCoreType); if (propCoreType == coreType) return 1; @@ -48,6 +48,16 @@ void boolProp(daqProperty* property) { // We have to check the default value and the current value that the property is set to } + daqBool* visible = NULL; + daqProperty_getVisible(property, visible); + + daqBaseObject* defaultVisibleObj = NULL; + daqProperty_getDefaultValue(property, &defaultVisibleObj); + + daqBool* defaultVisible = NULL; + daqQueryInterface(property, DAQ_BOOLEAN_INTF_ID, &defaultVisible); + + } // FloatProperty @@ -57,11 +67,11 @@ void floatProp(daqProperty* property) if (propertyValueTypeCheck(property, daqCtFloat)) { // Min value, max value, default value, suggested values, visible - daqFloat minValue = 0; - daqProperty_getMinValue(property, &minValue); + daqNumber* minValueNum = NULL; + daqProperty_getMinValue(property, &minValueNum); - daqFloat maxValue = 0; - daqProperty_getMaxValue(property, &minValue); + daqNumber* maxValueNum = NULL; + daqProperty_getMaxValue(property, &maxValueNum); daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); @@ -72,7 +82,6 @@ void floatProp(daqProperty* property) daqList* listOfRecommendedValues = NULL; daqProperty_getSuggestedValues(property, &listOfRecommendedValues); - daqBool visible = False; daqProperty_getVisible(property, &visible); // Display min, max, default and suggested values @@ -83,11 +92,11 @@ void floatProp(daqProperty* property) // IntProperty void intProp(daqProperty* property) { - daqInt minValue = 0; - daqProperty_getMinValue(property, &minValue); + daqNumber* minValueNum = NULL; + daqProperty_getMinValue(property, &minValueNum); - daqInt maxValue = 0; - daqProperty_getMaxValue(property, &maxValue); + daqNumber* maxValueNum = NULL; + daqProperty_getMaxValue(property, maxValueNum); daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); @@ -105,6 +114,16 @@ void intProp(daqProperty* property) daqString* name = NULL; daqProperty_getName(property, &name); + // Display attributes if they are not empty + if (minValueNum != NULL) + { + + } + + daqReleaseRef(name); + daqReleaseRef(listOfSuggestedValues); + daqReleaseRef(maxValueNum); + daqReleaseRef(minValueNum); } // StringProperty @@ -132,10 +151,6 @@ void stringProp(daqProperty* property) void ratioProp(daqProperty* property) { // Retrive metadata, check what type the value is... - if(propertyValueTypeCheck(property, daqCtRatio)) - { - - } daqBaseObject* defaultRatioObj = NULL; daqProperty_getDefaultValue(property, &defaultRatioObj); daqRatio* defaultRatio = NULL; @@ -157,10 +172,6 @@ void ratioProp(daqProperty* property) // ListProperty void listProp(daqProperty* property) { - if (propertyValueTypeCheck(property, daqCtList)) - { - - } daqBool visible = False; daqProperty_getVisible(property, &visible); @@ -171,10 +182,6 @@ void listProp(daqProperty* property) // DictProperty void dictProp(daqProperty* property) { - if(propertyValueTypeCheck(property, daqCtDict)) - { - - } daqBool visible = False; daqProperty_getVisible(property, &visible); @@ -188,17 +195,20 @@ void dictProp(daqProperty* property) // ObjectProperty void objectProp(daqProperty* property) { - if(propertyValueTypeCheck(property, daqCtDict)) - { - - } daqBool visible = False; daqProperty_getVisible(property, &visible); daqBaseObject* defaultObjectObj = NULL; daqProperty_getDefaultValue(property, defaultObjectObj); + // PropertyObject value + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + daqPropertyObject* defaultPropObj = NULL; + daqQueryInterface(defaultObjectObj, DAQ_PROPERTY_OBJECT_INTF_ID, &defaultPropObj); + + // Check if empty and then rerun the objectProp on the defaultPropObj } // StructureProperty @@ -208,7 +218,7 @@ void structProp(daqProperty* property) { } - + // Value is Struct Core Type } // EnumerationProperty @@ -261,13 +271,12 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) else if (propCoreType == daqCtUndefined) { // Maybe needed (don't know yet) - } daqString* propName = NULL; daqProperty_getName(prop, &propName); printDaqFormattedString("Property name: %s", propName); daqBaseObject* propValueObj = NULL; - daqProperty_getValue(prop, propValueObj); + daqProperty_getValue(prop, &propValueObj); daqConstCharPtr propValueObjStr = ""; daqBaseObject_toString(propValueObj, propValueObjStr); printf("\nValue of the property: %s\n", propValueObjStr); From 93cfbb9146c7381d9bf9c017358a261e649c2190 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 22 Jan 2026 15:06:00 +0100 Subject: [PATCH 052/103] Updated and added metada_c_converters --- ..._0_property_name_and_value_visualization.c | 156 ++++++++++++++++-- examples/CMakeLists.txt | 3 +- examples/metadata_c_conversion.c | Bin 0 -> 2414 bytes 3 files changed, 142 insertions(+), 17 deletions(-) create mode 100644 examples/metadata_c_conversion.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 320181e..f45e97c 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -39,6 +39,120 @@ int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) // - They will be seen on all visualizations of properties // - +void determinePropertyTypeAndPrint(daqProperty* property) +{ + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(property, &propCoreType); + + switch(propCoreType) + { + case daqCtBool: + { + boolProp(property); + break; + } + case daqCtFloat: + { + floatProp(property); + break; + } + case daqCtString: + { + stringProp(property); + break; + } + case daqCtList: + { + listProp(property); + break; + } + case daqCtDict: + { + dictProp(property); + break; + } + case daqCtRatio: + { + ratioProp(property); + break; + } + case daqCtFunc: + { + // Function prop + functionProp(property); + break; + } + case daqCtProc: + { + // Function prop w/ no output + functionProp(property); + break; + } + case daqCtStruct: + { + structProp(property); + break; + } + case daqCtEnumeration: + { + enumProp(property); + break; + } + case daqCtInt: + { + // Check between selection, sparse selection and int property + daqBaseObject* selectionValues = NULL; + daqProperty_getSelectionValues(property, &selectionValues); + if (selectionValues == NULL) + { + intProp(property); + break; + } + + if(DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) + sparseSelectionProp(property); + else + selectionProp(property); + + break; + } + default: + { + prop(property); + break; + } + } +} + +// FunctionProperty (also handles ProcedureProperty) +void functionProp(daqProperty* property) +{ + daqCallableInfo* callInfo = NULL; + daqProperty_getCallableInfo(property, &callInfo); + + daqBool* visible = NULL; + daqProperty_getVisible(property, visible); + + +} + +// SparseSelectionProperty +void sparseSelectionProp(daqProperty* property) +{ + +} + +// SelectionProperty +void selectionProp(daqProperty* property) +{ + +} + +// Property +void prop(daqProperty* property) +{ + +} // BoolProperty void boolProp(daqProperty* property) @@ -111,16 +225,22 @@ void intProp(daqProperty* property) daqBool visible = False; daqProperty_getVisible(property, &visible); - daqString* name = NULL; - daqProperty_getName(property, &name); + // We will display the name outside of this function + daqBool* readOnly = NULL; + daqProperty_getReadOnly(property, readOnly); // Display attributes if they are not empty - if (minValueNum != NULL) + if (minValueNum != NULL && maxValueNum != NULL) { + daqInt minValue = 0; + daqNumber_getIntValue(minValueNum, &minValue); + daqInt maxValue = 0; + daqNumber_getIntValue(maxValueNum, &maxValue); + printf("Minimum acceptable value of the property is: %lld\n", minValue); + printf("Maximum acceptable value of the property is: %lld\n", maxValue); } - daqReleaseRef(name); daqReleaseRef(listOfSuggestedValues); daqReleaseRef(maxValueNum); daqReleaseRef(minValueNum); @@ -199,7 +319,7 @@ void objectProp(daqProperty* property) daqProperty_getVisible(property, &visible); daqBaseObject* defaultObjectObj = NULL; - daqProperty_getDefaultValue(property, defaultObjectObj); + daqProperty_getDefaultValue(property, &defaultObjectObj); // PropertyObject value daqBaseObject* valueObj = NULL; @@ -215,24 +335,28 @@ void objectProp(daqProperty* property) void structProp(daqProperty* property) { if(propertyValueTypeCheck(property, daqCtStruct)) - { - - } + {} // Value is Struct Core Type + daqBaseObject* defValueObj = NULL; + daqProperty_getDefaultValue(property, &defValueObj); + + daqStruct* defValue = NULL; + if (defValueObj) + daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); + + daqBool* visible = False; + daqProperty_getVisible(property, visible); + + } // EnumerationProperty void enumProp(daqProperty* property) { - if(propertyValueTypeCheck(property, daqCtEnumeration)) - { - - } -} + daqBaseObject* selectionValueObj = NULL; + daqProperty_getSelectionValues(property, &selectionValueObj); + -void printCoreTypeObjects(daqProperty* coreTypeObject) -{ - // TODO } void displayPropertyTypes(daqPropertyObject* propertyObject) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index a5ad209..7ee376f 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,7 +12,8 @@ set(EXAMPLE_SOURCES print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c tree_traversal.c - 3_0_property_name_and_value_visualization.c) + 3_0_property_name_and_value_visualization.c + metadata_c_conversion.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c new file mode 100644 index 0000000000000000000000000000000000000000..cf016352bd644bd899c386d329caed38c0ac5b69 GIT binary patch literal 2414 zcmbVN?~Btw5PhEo|A&AexkEfZhzR}wy($Re>G|Vp>Gg8GN-sInqzK3T>*{+uS+m(T zX_Szb?9RM-^LA$T_pf_cBF7vn)Hp|m1kd?D!w*ckQgL^MH6G#;FL4)l+$)a?Pw<#F z6+H@E(=*2eukZ=)-0m?~b8NU?(tqi`(gxWqGA!KgArTDGuN=52H|{s#t{&rLp7Pj` zqc~@H)@$eSrY=&2Z-0H#DB^<-;z5L2GD^i*B{NEJxE1@>F_1bTOCP<>@1&#CZiP&V zR@;A5rj4nn1rzhXGSd@>VjYMpq479wdovMDc^PAHAZX0m6u{%GS`x)>v8(4up77aIB^}5V4u>V z|CEtiox`29$;VKovY3|GSDj{MUa`8{S?c5#7^BvZ=DV~CV-^3UjOIgyOy6n9w z(&IksLNjVu5wnSvusVB9go1OVzs9_UIw5z}an|_Q${6M9razuG^Rk^?yL8hWiTmL# zITo%LcQKWR<)fK$#VNC*azB|>PJOO81vG_+Jx^VJQhdLiZiQlxomFz(%%1HIZaKec zSc;>jjolS}ENs#w%xdOTO?mply6L$E)D1ehIWx0PUDCIvLW)%|re<4cHPpXrqUa{L z=7frIQr4qxx?%LVR;{Zh#NE)hpXCs%_SOmWP_|MlTpL1}@%B0&otO1rjPJA4iTInl zo#-_#_$2tkc{AZFtI*Q&IHeY<-x--_(ANdj^|7)(mX9;!-N$o`?{?(4VqzxU`|eS5 H+uq_2V!wQi literal 0 HcmV?d00001 From c317fc537f1f740c9df172c4546937483d9fa64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 23 Jan 2026 15:13:57 +0100 Subject: [PATCH 053/103] Update to the metadata example --- examples/metadata_c_conversion.c | Bin 2414 -> 7890 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index cf016352bd644bd899c386d329caed38c0ac5b69..7ca74a025ae7e8d39b196200d7cfbedbe578cb10 100644 GIT binary patch literal 7890 zcmcgxYik=v6uqAd{SOO;poG*ZrIbP+kR~ZLgg8ywNU1$1EgQcy!+slkHi;tbghnda|tZZRxgNQ15)UbUQ zJRmx$mu5Z2cj9m=Bcw<~Y!5>w+N9OBOyqa?J`KC{J+8cx-{d7;Lok~n-Wd?v;!|-q z?IWj|*yUb&{W*TAU%E0P_(YyS-&kZo%gVs0yPJh^U5=D8@h7lw9ja~4#Y)&W*T{uy@N|o8ScLyp zxH7{XUR&dHf^U_a@AaIx>c2+isL%~|p^BvI6hTEhdXY-A!lioCZr`?d%(@ADp-(aP z(ryj0+_i6IpFQK_nh~l7W8v+@aXj>HH(yQ8%>bU0tdRXNtFUz{p#vk51) zd;{O^gO1kLcVL`OQKJM6WA16|hb4 z9qzCfd+Aq+tfEnM;Gwx19OAD= zs_1l`NPHw|9{B3szK+#it&wX}m-nf@&vCl7%F(~l>&ZDgWLLFHz5(|*eX~bWr|naz zCdRc|1NqsW!>gVwAEPQ8)ATR(c~(S=6|gZ+hu63$PZmWD{WUB~QjQ3fvOL{CT3980 zqO?A0wHoyjnE&aX3PdlpHl;fAefAT8oq#u}ESm8PV8*j^S9eZhFt6fVkap+P6ZNg# zV(zJ8coh8N6Aae%cIh&9v(OX9;K)o^+s{!kQ=f91S_hh#{|w7>%&=)}hoR02|FLmn zzI+_qeDz4#AD@xr*pmIe2SnUi8?COi)&IDi& zr9*4(Yg7r&m^?=@H(B#`VDmZt*PP&4%I>BNzYhJ_*IjZkqUXC(yv{D9C^2*MxOuG^ zNn1XZ@-WwUh-|;*A&gXP-vYM{(9|j3cQl@2_3XNm4~Te-(*S33+Y3F@lB+YEI*2mg zs`o`*Y4|LeHC3M`=RK1a>`cs)GCLMOInOTkQk+T2@?E$~k2b*%@<{FSNj6U_@f@OF z@tHRxqz61j|B9)RCt>rB{@wix({#_a@la1ZWeQx(_RL0mZBhw z|8EC9UDwF{-gf!ydrcXc_o41x)W6i>S)=h) zkQj$`qmJD>hUV)~Klyv(tp25C0ofgDGOH>pWxlFw2RMte7GI$*=Xw|w=bdit7M10X zBK{nDZy?+5WtUf~Bag$Fks{EgMf=v!xVTRb!VaYREjsR*kB}2QpYiy4zKNG<7$QwB Vl&lYtZCcLp%RTXx&Yn`;$$w!^_2>Wq delta 98 zcmca)`%Y-X6xPXQ?0S>Exa=mE@M|dZGH@~I1EBJMtE2}34BK9HRZB=Z=`7*ZLE s7)mDFi)l}uA!f4KLS`4EBt&sAP-!Vc8W1WlgfRFsxG?xnekl790J1q3lK=n! From beff957994f379286bb2d4efc0e0a097dc6b5516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 26 Jan 2026 11:13:12 +0100 Subject: [PATCH 054/103] Added hooks for comments, added example workflow --- examples/metadata_c_conversion.c | Bin 7890 -> 10966 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 7ca74a025ae7e8d39b196200d7cfbedbe578cb10..af4c9bcfdd9e03d7a141661cf3cd35ff57365611 100644 GIT binary patch literal 10966 zcmds7Yj0ac5M90^@qvF}1yMOwX)B-z@sgUPQG=?akI;TWik!qr1C3oAJ5Z|rb>N(x zJKmYSdmm1rAQUBbu6Ji=&YXGduK)bwqi_}`;V8Tai*OvqVGzE->nQvZ4)A1-PhW(K za5Fp)--Qpt`|-cwoPx&J{%S_I=gblQ59KLQGr}7TsO7rk^ zIcJ!ycmooz8JX*u)EU;9W3?Hq7=-I)q^$lX>OgF)p1OXraL*xC#wbU3HEisf({LDm zg62ojOW#8C-S9(rfS*2?9l_c$5S!z#;I6WVz{<)ddbyT<1&^Pdo8u?kdxBMGQRXRR z*BK}%+fl^$!p!P}w8-TwuJIhU&fr^>)6By1x_dF62B8aQJNp3ZCY0?b#F(1Rg2*Mt z@_#!w?VKE2Yom`@yKF0Zv`Ok*6NVfW2 zHHveaJ=?qnZG7`18JmX={}O`v+Q}Zl?RGKy`ISl)!>=q1OtRZqn8uZvxD6IgW3J7) zIEYnqideXS^>akSS$sFalQF6dpG_k!tnDXDIeRYmPmxCks0E7{KX#lTD6C6b*x5wg z%C)t=$#;ypL+C=ClI;fauZVQ z#L}o7cdHk>i`QANV^_X}ZdXA{^6XQvPx`5$K|@*oB6RV)j*H}2+I^0$hg|p#`b~h< zIk>@YGUqxil=`)(dKN!>*US|(1}%6Gpmtv_ec9ct9#m+J^=g2e1_>mZ9PgBmD&H8H&eGFfdTf-J>glBfmoNuD>&8k~c zrrR00HH@ro?RJ2~2>S!}uk8O`{Y`p$&q-W1YwP=C>z#aO(QFa<;j<>Z|0<5kI$kHNi3 z+@*?c>L=N6dmp8-T@`_Rn{-6^2wAx+@1+$7z(zIgpX1VevM5RD&S7aL=MkY&lw1FC zg^8&XrSVCs=BNkY!>{gqAZaPN$;!^lJ63D1yOB;wD28F$fb)!EvhTBW|gR%fe; z=+?YquBl*nGwQ{Y4CeLb*=6j;u_laAsmFo2{RA1)>Xff3d7zH@eXM+ne%9Ky8tTmO z?;1D8%e%qNXAjH%ye1@U>op*K#@wiRr78cX(Oq$xdsQNv5!#*2ttK!JugJZJr`$hq_rRPg=gN7_7{SDoy#7O@K2sWI+;S0PUF}& zRqdnnt7?(bA{dQ8wG2^@({cDF=fjNXw@ z0%KQqH+(| zcFD~9ux$&!%ub0*V)X!WMsfDA#iu)1?;>VZ-dB#Ro0v1qT_964*D`e6a|$Ns(&S*DiYRTJ(UGuh!9Lnm0td z2N=td)Qb6r6_gc~cf}>G>JltQno~D3N!&dg!9TO;3EnXCekb>d=$>oAr+Q-0YzOiA z9dh@h9jxwB8Jf?t)bgaW&f@u%M?y8z5zTsR070@bKi?JWnX4r`@V>T$Z`nJl;|@GE z29xjNwXEgsWz8bme!XU`w+vFMQ96qoW2}A>C9Xxxg*Wn->?JgmJ09*c$$qhbnzBYuHj!4=lQae>lU4zylllQ(lOzTZlWGDi0V Date: Mon, 26 Jan 2026 11:15:30 +0100 Subject: [PATCH 055/103] Missing hooks --- examples/metadata_c_conversion.c | Bin 10966 -> 11372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index af4c9bcfdd9e03d7a141661cf3cd35ff57365611..11d950366d8e5245b6230a7d2a1c76987b4f29b4 100644 GIT binary patch delta 562 zcmcZ>`X*vRz~mebj#OR-E(U!DEd~&+0HhTdLKrd_Qh{_DLq0dRwD1e;w36jeZSSqf0RkiipfdL>w&0#G!MAqA*16Q~R1mSmu-K<+69 z%7fgO0&>3&*aOaBWgzFJ0{N*xWgurj4AO&JrN1$-kqHz$@|eK`3n+b%>dF4hvXed3 zwKmH!i-9%BqH91^zL8aOa}aADF-jM5s7@|WV%r?V5d~H*jczg`Wb`K=O00AtDKYQ{z;ASKU|2%;9Ubu$^3Feor+Fr+Z#Go&&U1KA}E84Q_VRvu6! z6(|D|%LkH4K%N3a+GIm6QCS6`ND+{i#ZU@V3o;{(AqOay2xMz+_T}sZnm>7=pzvZI d9#$|*cC(M*7B(Q0T_O=k=1X{Pz9KP07yw&_CC>l= From aab8d7c62c29a4c0feaca9de4586cc340fd5b153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 26 Jan 2026 14:28:30 +0100 Subject: [PATCH 056/103] Added range type creation and its test --- examples/metadata_c_conversion.c | Bin 11372 -> 14652 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 11d950366d8e5245b6230a7d2a1c76987b4f29b4..981b17e5f2d4766f7cad02f1f92f0486141fb340 100644 GIT binary patch delta 2018 zcmb_dOHUI~6g~qKq!hH2cBl>Q6e#v0G&U?S8cm>3V^TqRBrc2up%x4;OB>NdS@;Xg zS-3E9>CQwlTNiG0WsLX>(1j}#5*O@D{O;{cOG~?GLYnE^d*1}%1pc%aH^47t092_=bC#@`< z64!3HE!~QOxC}y$F4F@3h55SqeZ#55G6~L`;0#a|hPon2=}yIN84!7TpxhT`qP1>r z2>`4kb25HA7NpE{xx7w>PMPdN{POYk~56(}`H7dh1F*90H7 z^>D1yX{OvS9Q-AGjys%P?m;NXygVT*KOAq2u*-QpQYJ;#hM<`(vWX#zC=~wb(V^}0 zNSqZ&GWf4Rx=)g<;wFi&6=weoNRPsPh-Fa@Mr@K&C*QIcvkfeI1SPEPPOcsLN?DbXLV84H!q zDyY2PtMh%`;G`HDsp+GY!&>JJy;pnA`+Yip^7w$(+**t$$MxZ2{EtgVJXJiG+Wwj> z5a}NN=5?CCeFvIsx6$L{xQ>C(`~Fa(R)ZBnDhs@HnIy0)8}(NAyU&LMc?2ho(w(!e zh)K-TJlaK2%>3Ma!(pBYer@I>VVFn#?;L!ky@TI+eW9y%?qvR|blR(SJy70%=ox5U z!xN`Vyf+Zw?_QTf8Alg~S_(9B92)TQme**pPV?B1=b}|7%9gBEIr=SqtiuXb)>?{E z+!u)OFVQt$nni{hcR4s|;K`%6mXyoeK*}R9Yj9m&b@Hy16F-gnG)DIjh+c%D%v0X; XMEthpif>e^p@V^bSxe^M!DrfkO%#h; delta 80 zcmV-W0I&bNa_m^J76h}%1cCyy_y?>4vq}rB0<*pjHU*Qu4jhxN6$-P=6n+Jhb}SN; mP8kZbtRUb4vvwm!1+%~?$OZxt0keoN#s!m*9~`rYH?#o@svdd( From da356528702b061ddc838c7c6fa34b16166ddaa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 26 Jan 2026 14:31:10 +0100 Subject: [PATCH 057/103] Removed redundant comment --- examples/metadata_c_conversion.c | Bin 14652 -> 14682 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 981b17e5f2d4766f7cad02f1f92f0486141fb340..7579af97e721a8ea3e175cacbe479b151095cf45 100644 GIT binary patch delta 133 zcmdl}bgO8?AIZrU+Cr1%q@^awux+l8N@AScr6;uch4dDd$p!`--bDmp)ATDLdfyjWlK=n! delta 126 zcmcarw5MppAIZrD>Kv2(4A`s#7)lvR7!-gwgCP}27Xw+P3~4~9z>vw12jt}=$>ss& zav73 Date: Tue, 27 Jan 2026 11:32:06 +0100 Subject: [PATCH 058/103] Adjusted file structure --- examples/CMakeLists.txt | 5 +- examples/conversions_demo.c | 11 ++ examples/getter_wrapper.c | 11 ++ examples/metadata_c_conversion.c | Bin 14682 -> 4234 bytes examples/setter_wrapper.c | 11 ++ examples/util_headers/daq_c_conversions.h | 228 ++++++++++++++++++++++ 6 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 examples/conversions_demo.c create mode 100644 examples/getter_wrapper.c create mode 100644 examples/setter_wrapper.c create mode 100644 examples/util_headers/daq_c_conversions.h diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7ee376f..7487270 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,10 @@ set(EXAMPLE_SOURCES create_and_read_sample_rate_buffers.c tree_traversal.c 3_0_property_name_and_value_visualization.c - metadata_c_conversion.c) + metadata_c_conversion.c + conversions_demo.c + getter_wrapper.c + setter_wrapper.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/conversions_demo.c b/examples/conversions_demo.c new file mode 100644 index 0000000..da2d605 --- /dev/null +++ b/examples/conversions_demo.c @@ -0,0 +1,11 @@ +/* + * + */ + +#include + + +int main() +{ + +} diff --git a/examples/getter_wrapper.c b/examples/getter_wrapper.c new file mode 100644 index 0000000..2377e62 --- /dev/null +++ b/examples/getter_wrapper.c @@ -0,0 +1,11 @@ +/* + * + */ + +#include + + +int main() +{ + +} diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 7579af97e721a8ea3e175cacbe479b151095cf45..1631d003ec1b6c7bbaa85b8b640789351841ac15 100644 GIT binary patch delta 32 ocmcar)TKBT0I5$(?b@*gG&5-bfzat;SUE0_s`RLx=OQjk#5pSnx`iH8K1}LpXmrsR(N}n zmg!;oD*ZM6H2oz1dz2nw+&<>5@HtD@_;!oA3yeI^zc}(y`XG;P@Y$q8P$2bFyuZNT zb^11QKEtyWzF+5eH<_l;SmMb7b6)5FF7ZwHty)SE-zL4nIMSQv@uV$$uR(_to~Fm? zGf=*Qj?|8FH-(&{yXv+|Z}PkbqpyHVgBdGmDOyvyCEip2leIR}Jc_c;(;5CP@LTCT zTyuJqzY+UY`hEHx&?c5%N|9ok>3e)9t&L=a@*&PbQJ?H&E_W^02Jag;lQV9i8?8T2 zf9f5l^p3JdtMtWs&ZOe_At?T`pt(~~C1xvdTR?MqM$P?gmVy3LT0;4oh6m1`F-A4I z+hJ4kyoO(W4asNON`Ham&(q)2GyILgY?eKk{x)x;MrlugRY{xZ)lzy69=~#~j5GWs zN?(HOV(ptz%yeTlLX(lZfUK90P-9_*-?h&+$#YasEuZdS7A2uB78@l8#?VFPa|T~I z&R*A~Nt4QDA5W4uSOs(C4${>X~?9^`D=q)on4 z&OU;^#7I1+d_%vXWQ!zp={NFwINr)RwZ9miwM|RTk#9scHpC;OJTKOnZINMSU8QO3 z11~ZblNJNXLDw1aVLW6^jf6zb6L=_V)z}IbAyfMFaMUO_TAP_M!u0-ebJJ#(KjbF1Z&==kKp!ESf4znsHVSimX~-k+QV4cxEd*mtG(R)F{h1-tO&F5 zaaHCniz<`h{xNj|jBemh7sy0$L>ZTZ!tZF=(=`TTqN?QNeU`QRF6i2ZIS=_pJkv*2 zJcc!idTkR|9AA5h*VadqagMw~Bgsb9xSMZA(d0SbLbm%LC6(z5 zh~CnZ%Sy-kV)CwWk?5h`m*{=zb^n5VSMb40c$cg*W_Y`KEf!%nKB8&~6m|dn{&6Ke z%1zsAd#cY1ZR?mDJ5ORp*L=DrvRD>d(0blN-aBT_4r(j;B!{umNDefMj>`vJpZ6of z4CCeN;&$h<#x~MY)*)mr(QBOGj~+S{KmGD+Mfw~RXb0*04Wm*UiKvoi9a*y+FAv*J zT4TDLQEM}du1dELx?GuXy~cIOo9{_ZZ#hA*Us}H&6kSChTM0^^)sHv*#phW+mcQz( zqP_O!INjbG$H*(13OYk;aj!|~IliX#k7HdEZuGU8i~Ew^udqWVt2L>C!z2CM+GodD zRqDa#@V%>ceN39Qo!-yt-lX`x@_tE?I@s#o=PDZ~d0oavS)DO-wIOpIqo!)~$S3Lb zab%@X^vCCIlbDfV6rzq~h%>DoWvFM~nbCNYM>E?q_|dm+kI$r(d|T42eb?7X z-OXAcTS^u?2WH#}8>$VZ4l0#(b!Bf=N+PoLbF3xh9^@JJw#73aCjouWewN)ju>0O&ERB1ELld}=?gY7AN)$yf>hR>Ar9*eMg-6S&E`-q;dWCRNv zThj71Hy*=!Tk~UNTQq3I#<3MsC9;Z(jrgJU=yL38!WdFbx;A-&Y{}eGqG(rg{)1(*pJ3tLN1j35wE`IL; z^C^&4%S0SLY|k~1^10OCU>nXV0tSa#yb!)Ab12FY^hQuEwL4Aa}osH9OpIp!+eocw-Y$(r@d@oQ$q$NL{`p;BD7KI?VXw|#c#L(lekXsvpb;AeQsIz(eu zveQ0rlM^o9KbisCXjH71u6TupWrs@`GHs904M3}bX?b-$|9aZ!#i%(nLddQY?~vq?JH=h)nvs@&eIH7BTd zU#_#nW{To5db@}e7`w0W$%yCo6?)9_CR{&ewMPwU?JIDs*O%bW`cr%LV@P$f){!+^ z@S}&*0;WHoh(5J!Ql$=|+f)2wc9LwR-$e5Uw2m`{$$(uc-!ex%??uk@?M2>eyhNUr zu7x?Y9yMeeuHTrY8BsMI>bseGt*_YPDd^sUV!xC_QVES(5A~T6fgvhV*T?E5S&P;v z>8p0MmgWwT?isY>NJ_<=!(M{D1@ELrQgtbm7-?ReR+QMa&tM<9zsj4I+zF~JWf`}W zf=~7Qp~pBs++@~SJPq?msAM{#Uyi7Q7i_6L^R;9M_T3S_ zv2|3&eOPLaIC+fESW5OBydNrPdw%^=?`6Dr_fmStC$RrDXnYg+#b&98SCNrqlv!7g z)AR}SdycJRM?d+>q-=*3;I z&3j^}*>l-XQnpAt-gakxT;=_t2k9U9-bJmv1tfRgd9R-FBrC12fiA6ci6^A>M?C)p zc%No^4>IDuhcZ0lj-Zx2l3myR+LKZbuD95W${LUI-6D(2%^0q~xl%2}p z#VoEM%heXWhNJoaDR94%^_V@jQS|wr`B3g>aSp$UH@utXK3j`!j3TAaoc?j!UueG6 zPaD;w-(s!zaj~AVG2Dxfb3<(fFN;);p-4Uge(Xi+F+awPV7iX!SOr<`a0({g6Z#Py z%C_DjHD+br`G3x|?^Z8=4EgaG*+Mez|1vvDwbUIt+odc|wtPHyPrM|5)wg>6I6IU5 zHTHP=qk&y4?<%tYlieuhQf4phXT3CjjL)H_OZeK9WR0bYEKwb1_~Sm@5+1^8a)AztoenFhROu6BY1Ux&DIO2yC|Nho*Q!Z9 z*LFI_P_ax{b`4`@j?Zqf{C=fTYcZs`pSkRyH#E1q_S%MX-|BJ + + +int main() +{ + +} diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h new file mode 100644 index 0000000..adfa287 --- /dev/null +++ b/examples/util_headers/daq_c_conversions.h @@ -0,0 +1,228 @@ +#include + +// Int conversion +/* + * The following two funtions represent the conversion between the openDAQ native + * daqInt type and its coresponding C integer type. + */ +int64_t openDAQIntConversion(daqInteger* integer) +{ + daqInt* value; + daqInteger_getValue(integer, &value); + return *value; +} + +daqInteger* intOpenDAQConversion(int64_t integer) +{ + daqInteger* object = NULL; + daqInteger_createInteger(&object, integer); + return object; +} + +// String conversion +/* + * Conversion from and to openDAQ String (daqString) core type from C language (const char*) + */ +daqString* stringOpenDAQConversion(const char* str) +{ + daqString* strOut = NULL; + daqString_createString(&strOut, str); + return strOut; +} + +char* openDAQStringConversion(daqString* str) +{ + char* out = NULL; + daqString_getCharPtr(str, &out); + return out; +} + +// Bool conversion +/* + * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t) + */ +daqBoolean* booleanOpenDAQConversion(uint8_t value) +{ + daqBoolean* object = NULL; + daqBoolean_createBoolean(object, value); + return object; +} + +uint8_t openDAQBooleanConversion(daqBoolean* boolean) +{ + uint8_t value = 0; + daqBoolean_getValue(boolean, &value); + return value; +} + +// Float conversion +/* + *Conversion from and to openDAQ String (daqFloat) core type from C language (double) + */ +daqFloatObject* floatOpenDAQConversion(double value) +{ + daqFloatObject* fl = 0; + daqFloatObject_createFloatObject(&fl, value); + return fl; +} + +double openDAQFloatConversion(daqFloatObject* value) +{ + double vl = 0; + daqFloatObject_getValue(value, &vl); + return vl; +} + +// Complex number conversion +/* + * Conversion from and to openDAQ Complex (daqComplex) core type from C language (struct ComplexNumber) + */ +struct ComplexNumber +{ + double real; + double complex; +}; + +struct ComplexNumber complexOpenDAQConversion(daqComplexNumber* complexNumber) +{ + struct ComplexNumber cmp; + double middle = 0; + daqComplexNumber_getReal(complexNumber, &middle); + cmp.real = middle; + daqComplexNumber_getImaginary(complexNumber, &middle); + cmp.complex = middle; + return cmp; +} + +daqComplexNumber* openDAQComplexConversion(struct ComplexNumber* complexNumber) +{ + daqComplexNumber* cmp = NULL; + daqComplexNumber_createComplexNumber(&cmp, complexNumber->real, complexNumber->complex); + return cmp; +} + +// Range conversion +/* + * Conversion from and to openDAQ String (daqRange) core type from C language (struct Range) + */ +struct Range +{ + double min; + double max; +}; + +struct Range rangeOpenDAQConversion(daqRange* range) +{ + struct Range rng; + daqNumber* number; + daqRange_getLowValue(range, &number); + double intermmidiate = 0; + daqNumber_getFloatValue(number, &intermmidiate); + rng.min = intermmidiate; + daqReleaseRef(number); + daqRange_getHighValue(range, &number); + daqNumber_getFloatValue(number, &intermmidiate); + rng.max = intermmidiate; + daqReleaseRef(number); + return rng; +} + +daqRange* openDAQRangeConversion(struct Range range) +{ + daqRange* rng = NULL; + daqNumber* lowValue = NULL; + daqNumber* highValue = NULL; + + daqFloatObject* lowFloat = NULL; + daqFloatObject_createFloatObject(&lowFloat, range.min); + daqFloatObject* highFloat = NULL; + daqFloatObject_createFloatObject(&highFloat, range.max); + + daqBaseObject* lowBaseObject = NULL; + daqQueryInterface(lowFloat, DAQ_BASE_OBJECT_INTF_ID, &lowBaseObject); + daqBaseObject* highBaseObject = NULL; + daqQueryInterface(highFloat, DAQ_BASE_OBJECT_INTF_ID, &highBaseObject); + + if (DAQ_SUPPORTS_INTERFACE(lowBaseObject, DAQ_NUMBER_INTF_ID)) + { + daqQueryInterface(lowBaseObject, DAQ_NUMBER_INTF_ID, &lowValue); + daqQueryInterface(highBaseObject, DAQ_NUMBER_INTF_ID, &highValue); + } + + daqReleaseRef(lowFloat); + daqReleaseRef(highFloat); + daqReleaseRef(lowBaseObject); + daqReleaseRef(highBaseObject); + + // Create and populate the daqRange object + daqRange_createRange(&rng, lowValue, highValue); + + daqReleaseRef(lowValue); + daqReleaseRef(highValue); + return rng; +} + +// Struct conversion (think about this one) +struct Coordinates +{ + double x; + double y; + double z; +}; + +struct Coordinates structOpenDAQConvetsion(daqStruct* coordinates) +{ + +} + +daqStruct* openDAQStructConversion(struct Coordinates coordinates) +{ + +} + +// Enumeration conversion (needs an additional run through) +/* + * Conversion from and to openDAQ String (daqEnumeration) core type + * from C language (enum ComponentStutesTypeEnum). + */ +enum ComponentStatusTypeEnum +{ + Error = 0, + Ok, + Warning +}; + +enum ComponentStatusTypeEnum enumOpenDAQConversion(daqEnumeration* componentStatusType) +{ + enum ComponentStatusTypeEnum compStatusType = Error; + daqInt check; + daqEnumeration_getIntValue(componentStatusType, &check); + if (check < 2) + { + compStatusType = check; + } + return compStatusType; +} + +daqEnumeration* openDAQEnumConversion(enum ComponentStatusTypeEnum componentStatusType) +{ + daqEnumeration* mid = NULL; + daqEnumerationType* enmType = NULL; + daqInteger* inp = intOpenDAQConversion(componentStatusType); + + daqList* enumTypes = NULL; + daqList_createList(&enumTypes); + daqList_pushBack(enumTypes, stringOpenDAQConversion("Error")); + daqList_pushBack(enumTypes, stringOpenDAQConversion("Ok")); + daqList_pushBack(enumTypes, stringOpenDAQConversion("Warning")); + + daqEnumerationType_createEnumerationType(enmType, stringOpenDAQConversion("ComponentStatusType"), enumTypes, 0); + + daqEnumeration_createEnumerationWithIntValueAndType(&mid, enmType, inp); + + daqReleaseRef(enumTypes); + daqReleaseRef(inp); + daqReleaseRef(enmType); + + return mid; +} From b92eff677ca5caf3e50ac887b9baa323c8b81ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 12:55:16 +0100 Subject: [PATCH 059/103] 1st iteration of C wrappers for core types --- examples/util_headers/daq_c_conversions.h | 54 +++++++++++++++++++---- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index adfa287..4d33347 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -21,7 +21,8 @@ daqInteger* intOpenDAQConversion(int64_t integer) // String conversion /* - * Conversion from and to openDAQ String (daqString) core type from C language (const char*) + * Conversion from and to openDAQ String (daqString) core type + * from C language (const char*). */ daqString* stringOpenDAQConversion(const char* str) { @@ -39,7 +40,7 @@ char* openDAQStringConversion(daqString* str) // Bool conversion /* - * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t) + * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). */ daqBoolean* booleanOpenDAQConversion(uint8_t value) { @@ -57,7 +58,7 @@ uint8_t openDAQBooleanConversion(daqBoolean* boolean) // Float conversion /* - *Conversion from and to openDAQ String (daqFloat) core type from C language (double) + *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ daqFloatObject* floatOpenDAQConversion(double value) { @@ -75,7 +76,8 @@ double openDAQFloatConversion(daqFloatObject* value) // Complex number conversion /* - * Conversion from and to openDAQ Complex (daqComplex) core type from C language (struct ComplexNumber) + * Conversion from and to openDAQ Complex (daqComplex) core type + * from C language (struct ComplexNumber). */ struct ComplexNumber { @@ -103,7 +105,8 @@ daqComplexNumber* openDAQComplexConversion(struct ComplexNumber* complexNumber) // Range conversion /* - * Conversion from and to openDAQ String (daqRange) core type from C language (struct Range) + * Conversion from and to openDAQ String (daqRange) core type + * from C language (struct Range). */ struct Range { @@ -162,7 +165,14 @@ daqRange* openDAQRangeConversion(struct Range range) return rng; } -// Struct conversion (think about this one) +// Struct conversion +/* + * Conversion from and to daqStruct objects to C style structs. + * Warning: These types of conversions require prior knowledge of + * the struct structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ structs are implemented. + */ struct Coordinates { double x; @@ -172,12 +182,40 @@ struct Coordinates struct Coordinates structOpenDAQConvetsion(daqStruct* coordinates) { - + daqList* names = NULL; + daqList* values = NULL; + daqStruct_getFieldNames(coordinates, &names); + daqStruct_getFieldValues(coordinates, &values); + } -daqStruct* openDAQStructConversion(struct Coordinates coordinates) +daqStruct* openDAQStructConversion(struct Coordinates coordinates, daqTypeManager* typeManager) { + daqStructBuilder* coordinatesBuilder = NULL; + daqStructBuilder_createStructBuilder(&coordinatesBuilder, stringOpenDAQConversion("Coordinates"), typeManager); + + daqStructBuilder_set(coordinatesBuilder, stringOpenDAQConversion("x"), (daqBaseObject*)intOpenDAQConversion(coordinates.x)); + daqStructBuilder_set(coordinatesBuilder, stringOpenDAQConversion("y"), (daqBaseObject*) intOpenDAQConversion(coordinates.y)); + daqStructBuilder_set(coordinatesBuilder, stringOpenDAQConversion("z"), (daqBaseObject*) intOpenDAQConversion(coordinates.z)); + + // Alternative way of setting the values in a struct + if (0) + { + daqList* valuesList = NULL; + daqList_createList(&valuesList); + + daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(coordinates.x)); + daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(coordinates.y)); + daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(coordinates.z)); + + daqStructBuilder_setFieldValues(coordinatesBuilder, valuesList); + daqReleaseRef(valuesList); + } + daqStruct* coordinatesStruct = NULL; + daqStructBuilder_build(coordinatesBuilder, &coordinatesStruct); + daqReleaseRef(coordinatesBuilder); + return coordinatesStruct; } // Enumeration conversion (needs an additional run through) From d961cb9766e22e4a117350eb7c9bcab9324146e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 13:07:03 +0100 Subject: [PATCH 060/103] Fixed enumeration implementation --- examples/util_headers/daq_c_conversions.h | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 4d33347..f83de90 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -222,6 +222,10 @@ daqStruct* openDAQStructConversion(struct Coordinates coordinates, daqTypeManage /* * Conversion from and to openDAQ String (daqEnumeration) core type * from C language (enum ComponentStutesTypeEnum). + * Warning: These types of conversions require prior knowledge of + * the enumeration structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ enumeration is implemented. */ enum ComponentStatusTypeEnum { @@ -242,25 +246,14 @@ enum ComponentStatusTypeEnum enumOpenDAQConversion(daqEnumeration* componentStat return compStatusType; } -daqEnumeration* openDAQEnumConversion(enum ComponentStatusTypeEnum componentStatusType) +daqEnumeration* openDAQEnumConversion(enum ComponentStatusTypeEnum componentStatusType, daqTypeManager* typeManager) { daqEnumeration* mid = NULL; daqEnumerationType* enmType = NULL; daqInteger* inp = intOpenDAQConversion(componentStatusType); - daqList* enumTypes = NULL; - daqList_createList(&enumTypes); - daqList_pushBack(enumTypes, stringOpenDAQConversion("Error")); - daqList_pushBack(enumTypes, stringOpenDAQConversion("Ok")); - daqList_pushBack(enumTypes, stringOpenDAQConversion("Warning")); - - daqEnumerationType_createEnumerationType(enmType, stringOpenDAQConversion("ComponentStatusType"), enumTypes, 0); + daqEnumeration_createEnumerationWithIntValue(&mid, stringOpenDAQConversion("ComponentStatusType"), inp, typeManager); - daqEnumeration_createEnumerationWithIntValueAndType(&mid, enmType, inp); - - daqReleaseRef(enumTypes); daqReleaseRef(inp); - daqReleaseRef(enmType); - return mid; } From fe9186698bcbcefbb79de5336c9004d4be8bbb3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 14:23:41 +0100 Subject: [PATCH 061/103] Updated --- examples/util_headers/daq_c_conversions.h | 59 +++++++++++++++++++---- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index f83de90..429b4ea 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -7,9 +7,9 @@ */ int64_t openDAQIntConversion(daqInteger* integer) { - daqInt* value; + daqInt value = 0; daqInteger_getValue(integer, &value); - return *value; + return value; } daqInteger* intOpenDAQConversion(int64_t integer) @@ -45,7 +45,7 @@ char* openDAQStringConversion(daqString* str) daqBoolean* booleanOpenDAQConversion(uint8_t value) { daqBoolean* object = NULL; - daqBoolean_createBoolean(object, value); + daqBoolean_createBoolean(&object, value); return object; } @@ -175,18 +175,60 @@ daqRange* openDAQRangeConversion(struct Range range) */ struct Coordinates { - double x; - double y; - double z; + int64_t x; + int64_t y; + int64_t z; }; struct Coordinates structOpenDAQConvetsion(daqStruct* coordinates) { - daqList* names = NULL; daqList* values = NULL; - daqStruct_getFieldNames(coordinates, &names); daqStruct_getFieldValues(coordinates, &values); + struct Coordinates coordinate = {0,0,0}; + + daqInteger* value = NULL; + + daqSizeT count = 0; + daqList_getCount(values, &count); + + daqBaseObject* valueObj = NULL; + for (daqSizeT i = 0; i Date: Wed, 28 Jan 2026 09:02:25 +0100 Subject: [PATCH 062/103] Added header openDAQ C conversions --- examples/util_headers/daq_c_conversions.h | 300 ++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 examples/util_headers/daq_c_conversions.h diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h new file mode 100644 index 0000000..429b4ea --- /dev/null +++ b/examples/util_headers/daq_c_conversions.h @@ -0,0 +1,300 @@ +#include + +// Int conversion +/* + * The following two funtions represent the conversion between the openDAQ native + * daqInt type and its coresponding C integer type. + */ +int64_t openDAQIntConversion(daqInteger* integer) +{ + daqInt value = 0; + daqInteger_getValue(integer, &value); + return value; +} + +daqInteger* intOpenDAQConversion(int64_t integer) +{ + daqInteger* object = NULL; + daqInteger_createInteger(&object, integer); + return object; +} + +// String conversion +/* + * Conversion from and to openDAQ String (daqString) core type + * from C language (const char*). + */ +daqString* stringOpenDAQConversion(const char* str) +{ + daqString* strOut = NULL; + daqString_createString(&strOut, str); + return strOut; +} + +char* openDAQStringConversion(daqString* str) +{ + char* out = NULL; + daqString_getCharPtr(str, &out); + return out; +} + +// Bool conversion +/* + * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). + */ +daqBoolean* booleanOpenDAQConversion(uint8_t value) +{ + daqBoolean* object = NULL; + daqBoolean_createBoolean(&object, value); + return object; +} + +uint8_t openDAQBooleanConversion(daqBoolean* boolean) +{ + uint8_t value = 0; + daqBoolean_getValue(boolean, &value); + return value; +} + +// Float conversion +/* + *Conversion from and to openDAQ String (daqFloat) core type from C language (double). + */ +daqFloatObject* floatOpenDAQConversion(double value) +{ + daqFloatObject* fl = 0; + daqFloatObject_createFloatObject(&fl, value); + return fl; +} + +double openDAQFloatConversion(daqFloatObject* value) +{ + double vl = 0; + daqFloatObject_getValue(value, &vl); + return vl; +} + +// Complex number conversion +/* + * Conversion from and to openDAQ Complex (daqComplex) core type + * from C language (struct ComplexNumber). + */ +struct ComplexNumber +{ + double real; + double complex; +}; + +struct ComplexNumber complexOpenDAQConversion(daqComplexNumber* complexNumber) +{ + struct ComplexNumber cmp; + double middle = 0; + daqComplexNumber_getReal(complexNumber, &middle); + cmp.real = middle; + daqComplexNumber_getImaginary(complexNumber, &middle); + cmp.complex = middle; + return cmp; +} + +daqComplexNumber* openDAQComplexConversion(struct ComplexNumber* complexNumber) +{ + daqComplexNumber* cmp = NULL; + daqComplexNumber_createComplexNumber(&cmp, complexNumber->real, complexNumber->complex); + return cmp; +} + +// Range conversion +/* + * Conversion from and to openDAQ String (daqRange) core type + * from C language (struct Range). + */ +struct Range +{ + double min; + double max; +}; + +struct Range rangeOpenDAQConversion(daqRange* range) +{ + struct Range rng; + daqNumber* number; + daqRange_getLowValue(range, &number); + double intermmidiate = 0; + daqNumber_getFloatValue(number, &intermmidiate); + rng.min = intermmidiate; + daqReleaseRef(number); + daqRange_getHighValue(range, &number); + daqNumber_getFloatValue(number, &intermmidiate); + rng.max = intermmidiate; + daqReleaseRef(number); + return rng; +} + +daqRange* openDAQRangeConversion(struct Range range) +{ + daqRange* rng = NULL; + daqNumber* lowValue = NULL; + daqNumber* highValue = NULL; + + daqFloatObject* lowFloat = NULL; + daqFloatObject_createFloatObject(&lowFloat, range.min); + daqFloatObject* highFloat = NULL; + daqFloatObject_createFloatObject(&highFloat, range.max); + + daqBaseObject* lowBaseObject = NULL; + daqQueryInterface(lowFloat, DAQ_BASE_OBJECT_INTF_ID, &lowBaseObject); + daqBaseObject* highBaseObject = NULL; + daqQueryInterface(highFloat, DAQ_BASE_OBJECT_INTF_ID, &highBaseObject); + + if (DAQ_SUPPORTS_INTERFACE(lowBaseObject, DAQ_NUMBER_INTF_ID)) + { + daqQueryInterface(lowBaseObject, DAQ_NUMBER_INTF_ID, &lowValue); + daqQueryInterface(highBaseObject, DAQ_NUMBER_INTF_ID, &highValue); + } + + daqReleaseRef(lowFloat); + daqReleaseRef(highFloat); + daqReleaseRef(lowBaseObject); + daqReleaseRef(highBaseObject); + + // Create and populate the daqRange object + daqRange_createRange(&rng, lowValue, highValue); + + daqReleaseRef(lowValue); + daqReleaseRef(highValue); + return rng; +} + +// Struct conversion +/* + * Conversion from and to daqStruct objects to C style structs. + * Warning: These types of conversions require prior knowledge of + * the struct structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ structs are implemented. + */ +struct Coordinates +{ + int64_t x; + int64_t y; + int64_t z; +}; + +struct Coordinates structOpenDAQConvetsion(daqStruct* coordinates) +{ + daqList* values = NULL; + daqStruct_getFieldValues(coordinates, &values); + + struct Coordinates coordinate = {0,0,0}; + + daqInteger* value = NULL; + + daqSizeT count = 0; + daqList_getCount(values, &count); + + daqBaseObject* valueObj = NULL; + for (daqSizeT i = 0; i Date: Wed, 28 Jan 2026 09:40:06 +0100 Subject: [PATCH 063/103] Minor facelift --- examples/util_headers/daq_c_conversions.h | 60 +++++++++++------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 429b4ea..8f16b12 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -26,16 +26,16 @@ daqInteger* intOpenDAQConversion(int64_t integer) */ daqString* stringOpenDAQConversion(const char* str) { - daqString* strOut = NULL; - daqString_createString(&strOut, str); - return strOut; + daqString* stringOutput = NULL; + daqString_createString(&stringOutput, str); + return stringOutput; } char* openDAQStringConversion(daqString* str) { - char* out = NULL; - daqString_getCharPtr(str, &out); - return out; + char* cString = NULL; + daqString_getCharPtr(str, &cString); + return cString; } // Bool conversion @@ -62,16 +62,16 @@ uint8_t openDAQBooleanConversion(daqBoolean* boolean) */ daqFloatObject* floatOpenDAQConversion(double value) { - daqFloatObject* fl = 0; - daqFloatObject_createFloatObject(&fl, value); - return fl; + daqFloatObject* floatObject = 0; + daqFloatObject_createFloatObject(&floatObject, value); + return floatObject; } double openDAQFloatConversion(daqFloatObject* value) { - double vl = 0; - daqFloatObject_getValue(value, &vl); - return vl; + double cDouble = 0; + daqFloatObject_getValue(value, &cDouble); + return cDouble; } // Complex number conversion @@ -82,25 +82,25 @@ double openDAQFloatConversion(daqFloatObject* value) struct ComplexNumber { double real; - double complex; + double imaginary; }; struct ComplexNumber complexOpenDAQConversion(daqComplexNumber* complexNumber) { - struct ComplexNumber cmp; - double middle = 0; - daqComplexNumber_getReal(complexNumber, &middle); - cmp.real = middle; - daqComplexNumber_getImaginary(complexNumber, &middle); - cmp.complex = middle; - return cmp; + struct ComplexNumber structComplexNumber; + double tempDouble= 0; + daqComplexNumber_getReal(complexNumber, &tempDouble); + structComplexNumber.real = tempDouble; + daqComplexNumber_getImaginary(complexNumber, &tempDouble); + structComplexNumber.imaginary = tempDouble; + return structComplexNumber; } daqComplexNumber* openDAQComplexConversion(struct ComplexNumber* complexNumber) { - daqComplexNumber* cmp = NULL; - daqComplexNumber_createComplexNumber(&cmp, complexNumber->real, complexNumber->complex); - return cmp; + daqComplexNumber* complexNumberObject = NULL; + daqComplexNumber_createComplexNumber(&complexNumberObject, complexNumber->real, complexNumber->imaginary); + return complexNumberObject; } // Range conversion @@ -116,23 +116,23 @@ struct Range struct Range rangeOpenDAQConversion(daqRange* range) { - struct Range rng; + struct Range rangeStruct; daqNumber* number; daqRange_getLowValue(range, &number); double intermmidiate = 0; daqNumber_getFloatValue(number, &intermmidiate); - rng.min = intermmidiate; + rangeStruct.min = intermmidiate; daqReleaseRef(number); daqRange_getHighValue(range, &number); daqNumber_getFloatValue(number, &intermmidiate); - rng.max = intermmidiate; + rangeStruct.max = intermmidiate; daqReleaseRef(number); - return rng; + return rangeStruct; } daqRange* openDAQRangeConversion(struct Range range) { - daqRange* rng = NULL; + daqRange* rangeObject = NULL; daqNumber* lowValue = NULL; daqNumber* highValue = NULL; @@ -158,11 +158,11 @@ daqRange* openDAQRangeConversion(struct Range range) daqReleaseRef(highBaseObject); // Create and populate the daqRange object - daqRange_createRange(&rng, lowValue, highValue); + daqRange_createRange(&rangeObject, lowValue, highValue); daqReleaseRef(lowValue); daqReleaseRef(highValue); - return rng; + return rangeObject; } // Struct conversion From 37f12bc815422a113248f7aac67f70f8fef6838f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 29 Jan 2026 11:16:42 +0100 Subject: [PATCH 064/103] Addressed code review --- examples/util_headers/daq_c_conversions.h | 272 +++++++++++++--------- 1 file changed, 158 insertions(+), 114 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 8f16b12..27022c5 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -1,22 +1,77 @@ #include +daqString* stringOpenDAQConversion(const char* native); +daqInteger* intOpenDAQConversion(daqInt native); + +// add types to typeManager +void addCoordinateStructToTypeManager(daqContext* context) +{ + daqTypeManager* typeManager = NULL; + daqContext_getTypeManager(context, &typeManager); + + daqList* names = NULL; + daqList_createList(&names); + + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("x")); + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("y")); + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("z")); + + daqList* defaultValues = NULL; + daqList_createList(&defaultValues); + daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); + daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); + daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); + + daqSimpleType* simpleType = NULL; + + daqSimpleType_createSimpleType(&simpleType, daqCtInt); + + daqList* types = NULL; + daqList_createList(&types); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqReleaseRef(simpleType); + + daqStructType* newType = NULL; + daqStructType_createStructType(&newType, stringOpenDAQConversion("DAQ_Coordinates"), names, defaultValues, types); + + daqTypeManager_addType(typeManager, (daqType*) newType); + daqReleaseRef(newType); + + + daqBool check = False; + daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_Coordinates"), &check); + + if(check) + printf("\nNew type added.\n"); + else + printf("\nFailed to add a new type.\n"); + + daqReleaseRef(types); + daqReleaseRef(defaultValues); + daqReleaseRef(names); + daqReleaseRef(typeManager); +} + + // Int conversion /* * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. */ -int64_t openDAQIntConversion(daqInteger* integer) +daqInt openDAQIntConversion(daqInteger* daq) { - daqInt value = 0; - daqInteger_getValue(integer, &value); - return value; + daqInt native = 0; + daqInteger_getValue(daq, &native); + return native; } -daqInteger* intOpenDAQConversion(int64_t integer) +daqInteger* intOpenDAQConversion(daqInt native) { - daqInteger* object = NULL; - daqInteger_createInteger(&object, integer); - return object; + daqInteger* daq = NULL; + daqInteger_createInteger(&daq, native); + return daq; } // String conversion @@ -24,54 +79,54 @@ daqInteger* intOpenDAQConversion(int64_t integer) * Conversion from and to openDAQ String (daqString) core type * from C language (const char*). */ -daqString* stringOpenDAQConversion(const char* str) +daqString* stringOpenDAQConversion(const char* native) { - daqString* stringOutput = NULL; - daqString_createString(&stringOutput, str); - return stringOutput; + daqString* daq = NULL; + daqString_createString(&daq, native); + return daq; } -char* openDAQStringConversion(daqString* str) +char* openDAQStringConversion(daqString* daq) { - char* cString = NULL; - daqString_getCharPtr(str, &cString); - return cString; + char* native = NULL; + daqString_getCharPtr(daq, &native); + return native; } // Bool conversion /* * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). */ -daqBoolean* booleanOpenDAQConversion(uint8_t value) +daqBoolean* booleanOpenDAQConversion(uint8_t native) { - daqBoolean* object = NULL; - daqBoolean_createBoolean(&object, value); - return object; + daqBoolean* daq = NULL; + daqBoolean_createBoolean(&daq, native); + return daq; } -uint8_t openDAQBooleanConversion(daqBoolean* boolean) +uint8_t openDAQBooleanConversion(daqBoolean* daq) { - uint8_t value = 0; - daqBoolean_getValue(boolean, &value); - return value; + uint8_t native = 0; + daqBoolean_getValue(daq, &native); + return native; } // Float conversion /* *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ -daqFloatObject* floatOpenDAQConversion(double value) +daqFloatObject* floatOpenDAQConversion(double native) { - daqFloatObject* floatObject = 0; - daqFloatObject_createFloatObject(&floatObject, value); - return floatObject; + daqFloatObject* daq = 0; + daqFloatObject_createFloatObject(&daq, native); + return daq; } -double openDAQFloatConversion(daqFloatObject* value) +double openDAQFloatConversion(daqFloatObject* daq) { - double cDouble = 0; - daqFloatObject_getValue(value, &cDouble); - return cDouble; + double native = 0; + daqFloatObject_getValue(daq, &native); + return native; } // Complex number conversion @@ -85,22 +140,22 @@ struct ComplexNumber double imaginary; }; -struct ComplexNumber complexOpenDAQConversion(daqComplexNumber* complexNumber) +struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq) { - struct ComplexNumber structComplexNumber; + struct ComplexNumber native; double tempDouble= 0; - daqComplexNumber_getReal(complexNumber, &tempDouble); - structComplexNumber.real = tempDouble; - daqComplexNumber_getImaginary(complexNumber, &tempDouble); - structComplexNumber.imaginary = tempDouble; - return structComplexNumber; + daqComplexNumber_getReal(daq, &tempDouble); + native.real = tempDouble; + daqComplexNumber_getImaginary(daq, &tempDouble); + native.imaginary = tempDouble; + return native; } -daqComplexNumber* openDAQComplexConversion(struct ComplexNumber* complexNumber) +daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native) { - daqComplexNumber* complexNumberObject = NULL; - daqComplexNumber_createComplexNumber(&complexNumberObject, complexNumber->real, complexNumber->imaginary); - return complexNumberObject; + daqComplexNumber* daq = NULL; + daqComplexNumber_createComplexNumber(&daq, native->real, native->imaginary); + return daq; } // Range conversion @@ -114,55 +169,44 @@ struct Range double max; }; -struct Range rangeOpenDAQConversion(daqRange* range) +struct Range openDAQRangeConversion(daqRange* daq) { - struct Range rangeStruct; - daqNumber* number; - daqRange_getLowValue(range, &number); + struct Range native; + daqNumber* temp; + daqRange_getLowValue(daq, &temp); double intermmidiate = 0; - daqNumber_getFloatValue(number, &intermmidiate); - rangeStruct.min = intermmidiate; - daqReleaseRef(number); - daqRange_getHighValue(range, &number); - daqNumber_getFloatValue(number, &intermmidiate); - rangeStruct.max = intermmidiate; - daqReleaseRef(number); - return rangeStruct; + daqNumber_getFloatValue(temp, &intermmidiate); + native.min = intermmidiate; + daqReleaseRef(temp); + + daqRange_getHighValue(daq, &temp); + daqNumber_getFloatValue(temp, &intermmidiate); + native.max = intermmidiate; + daqReleaseRef(temp); + return native; } -daqRange* openDAQRangeConversion(struct Range range) +daqRange* RangeOpenDAQConversion(struct Range native) { - daqRange* rangeObject = NULL; + daqRange* daq = NULL; daqNumber* lowValue = NULL; daqNumber* highValue = NULL; - daqFloatObject* lowFloat = NULL; - daqFloatObject_createFloatObject(&lowFloat, range.min); - daqFloatObject* highFloat = NULL; - daqFloatObject_createFloatObject(&highFloat, range.max); - - daqBaseObject* lowBaseObject = NULL; - daqQueryInterface(lowFloat, DAQ_BASE_OBJECT_INTF_ID, &lowBaseObject); - daqBaseObject* highBaseObject = NULL; - daqQueryInterface(highFloat, DAQ_BASE_OBJECT_INTF_ID, &highBaseObject); + daqFloatObject* lowFloat = floatOpenDAQConversion(native.min); + daqFloatObject* highFloat = floatOpenDAQConversion(native.max); - if (DAQ_SUPPORTS_INTERFACE(lowBaseObject, DAQ_NUMBER_INTF_ID)) - { - daqQueryInterface(lowBaseObject, DAQ_NUMBER_INTF_ID, &lowValue); - daqQueryInterface(highBaseObject, DAQ_NUMBER_INTF_ID, &highValue); - } + daqQueryInterface(lowFloat, DAQ_NUMBER_INTF_ID, &lowValue); + daqQueryInterface(highFloat, DAQ_NUMBER_INTF_ID, &highValue); daqReleaseRef(lowFloat); daqReleaseRef(highFloat); - daqReleaseRef(lowBaseObject); - daqReleaseRef(highBaseObject); // Create and populate the daqRange object - daqRange_createRange(&rangeObject, lowValue, highValue); + daqRange_createRange(&daq, lowValue, highValue); daqReleaseRef(lowValue); daqReleaseRef(highValue); - return rangeObject; + return daq; } // Struct conversion @@ -180,65 +224,65 @@ struct Coordinates int64_t z; }; -struct Coordinates structOpenDAQConvetsion(daqStruct* coordinates) +struct Coordinates openDAQStructConversion(daqStruct* daq) { daqList* values = NULL; - daqStruct_getFieldValues(coordinates, &values); + daqStruct_getFieldValues(daq, &values); - struct Coordinates coordinate = {0,0,0}; + struct Coordinates native = {0,0,0}; - daqInteger* value = NULL; + daqInteger* temp = NULL; daqSizeT count = 0; daqList_getCount(values, &count); - daqBaseObject* valueObj = NULL; + daqBaseObject* tempObj = NULL; for (daqSizeT i = 0; i Date: Thu, 29 Jan 2026 11:40:15 +0100 Subject: [PATCH 065/103] Fixed handling of structs --- examples/util_headers/daq_c_conversions.h | 73 ++++++++--------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 27022c5..7309dfc 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -224,69 +224,36 @@ struct Coordinates int64_t z; }; -struct Coordinates openDAQStructConversion(daqStruct* daq) +struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq) { - daqList* values = NULL; - daqStruct_getFieldValues(daq, &values); - struct Coordinates native = {0,0,0}; - daqInteger* temp = NULL; + daqBaseObject* tempObj = NULL; - daqSizeT count = 0; - daqList_getCount(values, &count); + daqStruct_get(daq, stringOpenDAQConversion("x"), tempObj); + native.x = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); + + daqStruct_get(daq, stringOpenDAQConversion("y"), tempObj); + native.y = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); + + daqStruct_get(daq, stringOpenDAQConversion("z"), tempObj); + native.z = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); - daqBaseObject* tempObj = NULL; - for (daqSizeT i = 0; i Date: Thu, 29 Jan 2026 12:00:55 +0100 Subject: [PATCH 066/103] Updated enumeration handling --- examples/util_headers/daq_c_conversions.h | 39 ++++++++++++++++------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 7309dfc..ae07baa 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -38,12 +38,27 @@ void addCoordinateStructToTypeManager(daqContext* context) daqTypeManager_addType(typeManager, (daqType*) newType); daqReleaseRef(newType); + daqReleaseRef(names); + + daqList_createList(&names); + + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Error")); + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Ok")); + daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Warning")); + + daqEnumerationType* enumType = NULL; + daqEnumerationType_createEnumerationType(&enumType, stringOpenDAQConversion("DAQ_ComponentStatusTypeEnum"), names, 0); + daqTypeManager_addType(typeManager, (daqType*) enumType); + daqReleaseRef(enumType); daqBool check = False; daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_Coordinates"), &check); - if(check) + daqBool enumCheck = False; + daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_ComponentStatusTypeEnum"), &enumCheck); + + if(check && enumCheck) printf("\nNew type added.\n"); else printf("\nFailed to add a new type.\n"); @@ -295,25 +310,27 @@ enum ComponentStatusTypeEnum Warning }; -enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* componentStatusType) +enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq) { - enum ComponentStatusTypeEnum compStatusType = Error; - daqInt check; - daqEnumeration_getIntValue(componentStatusType, &check); - if (check < 2) + enum ComponentStatusTypeEnum native = Error; + daqInt temp; + daqEnumeration_getIntValue(daq, &temp); + + if (temp < 2) { - compStatusType = check; + native = temp; } - return compStatusType; + + return native; } daqEnumeration* EnumOpenDAQConversion(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) { daqEnumeration* daq = NULL; - daqInteger* inp = intOpenDAQConversion(native); + daqInteger* temp = intOpenDAQConversion(native); - daqEnumeration_createEnumerationWithIntValue(&daq, stringOpenDAQConversion("ComponentStatusType"), inp, typeManager); + daqEnumeration_createEnumerationWithIntValue(&daq, stringOpenDAQConversion("ComponentStatusType"), temp, typeManager); - daqReleaseRef(inp); + daqReleaseRef(temp); return daq; } From f37fef970669c20249ecd42c30221267bc3a0077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 29 Jan 2026 12:58:45 +0100 Subject: [PATCH 067/103] Added top of header description for helpers --- examples/util_headers/daq_c_conversions.h | 128 +++++++++++++--------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index ae07baa..73a72bd 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -1,9 +1,66 @@ #include -daqString* stringOpenDAQConversion(const char* native); +struct ComplexNumber +{ + double real; + double imaginary; +}; + +struct Range +{ + double min; + double max; +}; + +struct Coordinates +{ + int64_t x; + int64_t y; + int64_t z; +}; + +enum ComponentStatusTypeEnum +{ + Error = 0, + Ok, + Warning +}; + +// Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager +void addCoordinateStructToTypeManager(daqContext* context); + +// Int conversion +daqInt openDAQIntConversion(daqInteger* daq); daqInteger* intOpenDAQConversion(daqInt native); -// add types to typeManager +// String conversion +char* openDAQStringConversion(daqString* daq); +daqString* stringOpenDAQConversion(const char* native); + +// Bool conversion +daqBoolean* booleanOpenDAQConversion(uint8_t native); +uint8_t openDAQBooleanConversion(daqBoolean* daq); + +// Float conversion +daqFloatObject* floatOpenDAQConversion(double native); +double openDAQFloatConversion(daqFloatObject* daq); + +// Complex number conversion +struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq); +daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native); + +// Range conversion +struct Range openDAQRangeConversion(daqRange* daq); +daqRange* RangeOpenDAQConversion(struct Range native); + +// Struct conversion +struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq); +daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqTypeManager* typeManager); + +// Enumeration conversion +enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq); +daqEnumeration* EnumOpenDAQConversion(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager); + void addCoordinateStructToTypeManager(daqContext* context) { daqTypeManager* typeManager = NULL; @@ -69,8 +126,6 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(typeManager); } - -// Int conversion /* * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. @@ -89,7 +144,6 @@ daqInteger* intOpenDAQConversion(daqInt native) return daq; } -// String conversion /* * Conversion from and to openDAQ String (daqString) core type * from C language (const char*). @@ -108,7 +162,6 @@ char* openDAQStringConversion(daqString* daq) return native; } -// Bool conversion /* * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). */ @@ -126,7 +179,6 @@ uint8_t openDAQBooleanConversion(daqBoolean* daq) return native; } -// Float conversion /* *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ @@ -144,20 +196,13 @@ double openDAQFloatConversion(daqFloatObject* daq) return native; } -// Complex number conversion /* * Conversion from and to openDAQ Complex (daqComplex) core type * from C language (struct ComplexNumber). */ -struct ComplexNumber -{ - double real; - double imaginary; -}; - struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq) { - struct ComplexNumber native; + struct ComplexNumber native = {0, 0}; double tempDouble= 0; daqComplexNumber_getReal(daq, &tempDouble); native.real = tempDouble; @@ -173,20 +218,13 @@ daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native) return daq; } -// Range conversion /* * Conversion from and to openDAQ String (daqRange) core type * from C language (struct Range). */ -struct Range -{ - double min; - double max; -}; - struct Range openDAQRangeConversion(daqRange* daq) { - struct Range native; + struct Range native = {0, 0}; daqNumber* temp; daqRange_getLowValue(daq, &temp); double intermmidiate = 0; @@ -224,7 +262,6 @@ daqRange* RangeOpenDAQConversion(struct Range native) return daq; } -// Struct conversion /* * Conversion from and to daqStruct objects to C style structs. * Warning: These types of conversions require prior knowledge of @@ -232,13 +269,6 @@ daqRange* RangeOpenDAQConversion(struct Range native) * from C to openDAQ a pointer to the TypeManager is needed because * of the way openDAQ structs are implemented. */ -struct Coordinates -{ - int64_t x; - int64_t y; - int64_t z; -}; - struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq) { struct Coordinates native = {0,0,0}; @@ -267,17 +297,18 @@ daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqType if (0) { - // Alternative way of setting the values in a struct - - daqList* valuesList = NULL; - daqList_createList(&valuesList); - - daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(native.x)); - daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(native.y)); - daqList_pushBack(valuesList, (daqBaseObject*) intOpenDAQConversion(native.z)); - - daqStructBuilder_setFieldValues(builder, valuesList); - daqReleaseRef(valuesList); + // We can set values in the struct either via directly assigning them to the + // corresponding struct values or adding them in the correct sequence + // to a daqList and setting the list. + daqList* values = NULL; + daqList_createList(&values); + + daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.x)); + daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.y)); + daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.z)); + + daqStructBuilder_setFieldValues(builder, values); + daqReleaseRef(values); } else { @@ -294,7 +325,6 @@ daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqType return daq; } -// Enumeration conversion (needs an additional run through) /* * Conversion from and to openDAQ String (daqEnumeration) core type * from C language (enum ComponentStutesTypeEnum). @@ -303,23 +333,15 @@ daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqType * from C to openDAQ a pointer to the TypeManager is needed because * of the way openDAQ enumeration is implemented. */ -enum ComponentStatusTypeEnum -{ - Error = 0, - Ok, - Warning -}; - enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq) { enum ComponentStatusTypeEnum native = Error; - daqInt temp; + uint8_t temp; daqEnumeration_getIntValue(daq, &temp); + // Sanity check if (temp < 2) - { native = temp; - } return native; } From 44ccd00e816cd8c3b8625e0228253fce379bfe79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 29 Jan 2026 13:01:12 +0100 Subject: [PATCH 068/103] Grammar fixes --- examples/util_headers/daq_c_conversions.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 73a72bd..e773976 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -80,7 +80,6 @@ void addCoordinateStructToTypeManager(daqContext* context) daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); daqSimpleType* simpleType = NULL; - daqSimpleType_createSimpleType(&simpleType, daqCtInt); daqList* types = NULL; @@ -116,9 +115,9 @@ void addCoordinateStructToTypeManager(daqContext* context) daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_ComponentStatusTypeEnum"), &enumCheck); if(check && enumCheck) - printf("\nNew type added.\n"); + printf("\nNew types added.\n"); else - printf("\nFailed to add a new type.\n"); + printf("\nFailed to add new types.\n"); daqReleaseRef(types); daqReleaseRef(defaultValues); From f64c2f635b6f136f9a2832f1ed7e312c508c1dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 29 Jan 2026 15:38:27 +0100 Subject: [PATCH 069/103] Added Common metadata prints and default string printing --- ..._0_property_name_and_value_visualization.c | 117 +++++++++++------- 1 file changed, 70 insertions(+), 47 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index f45e97c..75a1804 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -3,7 +3,7 @@ * determine their (core)type and display their value. */ -#include +#include enum PropertyType { @@ -24,6 +24,20 @@ enum PropertyType EnumerationProperty }; +void functionProp(daqProperty* property); +void sparseSelectionProp(daqProperty* property); +void selectionProp(daqProperty* property); +void boolProp(daqProperty* property); +void floatProp(daqProperty* property); +void intProp(daqProperty* property); +void stringProp(daqProperty* property); +void ratioProp(daqProperty* property); +void listProp(daqProperty* property); +void dictProp(daqProperty* property); +void structProp(daqProperty* property); +void enumProp(daqProperty* property); +void prop(daqProperty* property); + int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) { daqCoreType propCoreType = daqCtUndefined; @@ -39,8 +53,22 @@ int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) // - They will be seen on all visualizations of properties // - +void displayCommonMetadata(daqProperty* property) +{ + // Read-only + // Visible + daqBool visible = False; + daqBool readOnly = False; + daqProperty_getVisible(property, &visible); + daqProperty_getReadOnly(property, &readOnly); + + printf("\n\n- Visible: %s\n", visible == True ? "True" : "False"); + printf("- ReadOnly: %s\n", readOnly == True ? "True" : "False"); +} + void determinePropertyTypeAndPrint(daqProperty* property) { + displayCommonMetadata(property); daqCoreType propCoreType = daqCtUndefined; daqProperty_getValueType(property, &propCoreType); @@ -130,22 +158,20 @@ void functionProp(daqProperty* property) daqCallableInfo* callInfo = NULL; daqProperty_getCallableInfo(property, &callInfo); - daqBool* visible = NULL; - daqProperty_getVisible(property, visible); - + } // SparseSelectionProperty void sparseSelectionProp(daqProperty* property) { - + } // SelectionProperty void selectionProp(daqProperty* property) { - + } // Property @@ -162,8 +188,6 @@ void boolProp(daqProperty* property) { // We have to check the default value and the current value that the property is set to } - daqBool* visible = NULL; - daqProperty_getVisible(property, visible); daqBaseObject* defaultVisibleObj = NULL; daqProperty_getDefaultValue(property, &defaultVisibleObj); @@ -196,8 +220,6 @@ void floatProp(daqProperty* property) daqList* listOfRecommendedValues = NULL; daqProperty_getSuggestedValues(property, &listOfRecommendedValues); - daqBool visible = False; - daqProperty_getVisible(property, &visible); // Display min, max, default and suggested values } @@ -222,28 +244,24 @@ void intProp(daqProperty* property) daqList* listOfSuggestedValues = NULL; daqProperty_getSuggestedValues(property, &listOfSuggestedValues); - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - // We will display the name outside of this function - daqBool* readOnly = NULL; - daqProperty_getReadOnly(property, readOnly); - // Display attributes if they are not empty - if (minValueNum != NULL && maxValueNum != NULL) + if (minValueNum != NULL) { daqInt minValue = 0; daqNumber_getIntValue(minValueNum, &minValue); - daqInt maxValue = 0; - daqNumber_getIntValue(maxValueNum, &maxValue); - - printf("Minimum acceptable value of the property is: %lld\n", minValue); - printf("Maximum acceptable value of the property is: %lld\n", maxValue); + printf("\n- Minimum value: %lld\n", minValue); + daqReleaseRef(minValueNum); + if (maxValueNum != NULL) + { + daqInt maxValue = 0; + daqNumber_getIntValue(maxValueNum, &maxValue); + printf("- Maximum value: %lld\n", maxValue); + daqReleaseRef(maxValueNum); + } } - daqReleaseRef(listOfSuggestedValues); - daqReleaseRef(maxValueNum); - daqReleaseRef(minValueNum); + if(listOfSuggestedValues!=NULL) + daqReleaseRef(listOfSuggestedValues); } // StringProperty @@ -258,13 +276,26 @@ void stringProp(daqProperty* property) daqProperty_getDefaultValue(property, &defaultStringObj); daqString* defaultString = NULL; daqQueryInterface(defaultStringObj, DAQ_STRING_INTF_ID, &defaultString); - - daqBool visible = False; - daqProperty_getVisible(property, &visible); - + printDaqFormattedString("\n- String default value: %s\n", defaultString); daqList* suggestedStrings = NULL; daqProperty_getSuggestedValues(property, &suggestedStrings); // Display + daqSizeT count = 0; + if (suggestedStrings) + daqList_getCount(suggestedStrings, &count); + daqBaseObject* currentObj = NULL; + daqString* currentStr = NULL; + + for (daqSizeT i = 0; i< count; i++) + { + daqList_getItemAt(suggestedStrings, i, ¤tObj); + daqString* temp = daqQueryInterfacePtr(currentObj, DAQ_STRING_INTF_ID); + + printf("\n%s\n", openDAQStringConversion(temp)); + + daqReleaseRef(temp); + daqReleaseRef(currentObj); + } } // RatioProperty @@ -344,10 +375,6 @@ void structProp(daqProperty* property) if (defValueObj) daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); - daqBool* visible = False; - daqProperty_getVisible(property, visible); - - } // EnumerationProperty @@ -356,7 +383,6 @@ void enumProp(daqProperty* property) daqBaseObject* selectionValueObj = NULL; daqProperty_getSelectionValues(property, &selectionValueObj); - } void displayPropertyTypes(daqPropertyObject* propertyObject) @@ -387,26 +413,23 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) daqCoreType propCoreType = daqCtUndefined; daqProperty_getValueType(prop, &propCoreType); + daqString* propName = NULL; + daqProperty_getName(prop, &propName); + printDaqFormattedString("\n\nProperty name: %s", propName); + daqReleaseRef(propName); + if (propCoreType == daqCtObject) { // Write them up first - printCoreTypeObjects(prop); + determinePropertyTypeAndPrint(prop); } else if (propCoreType == daqCtUndefined) { // Maybe needed (don't know yet) } - daqString* propName = NULL; - daqProperty_getName(prop, &propName); - printDaqFormattedString("Property name: %s", propName); - daqBaseObject* propValueObj = NULL; - daqProperty_getValue(prop, &propValueObj); - daqConstCharPtr propValueObjStr = ""; - daqBaseObject_toString(propValueObj, propValueObjStr); - printf("\nValue of the property: %s\n", propValueObjStr); - - daqReleaseRef(propValueObj); - daqReleaseRef(propName); + else + determinePropertyTypeAndPrint(prop); + daqReleaseRef(prop); } From 655de8b6541b8efc54e4f1da6c320a78c8fedbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 30 Jan 2026 15:45:21 +0100 Subject: [PATCH 070/103] Updated some displays --- ..._0_property_name_and_value_visualization.c | 43 ++++++++++++++---- examples/metadata_c_conversion.c | Bin 4234 -> 4234 bytes examples/util_headers/daq_c_conversions.h | 4 +- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 75a1804..e8b87b8 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -213,15 +213,36 @@ void floatProp(daqProperty* property) daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); - daqFloat defaultValue = 0; - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); + + if (defaultValueObj != NULL) + { + daqFloatObject* defaultValue = NULL; + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + daqFloat value = 0; + daqFloatObject_getValue(defaultValue, &value); + printf("- Default Value: %f\n", value); + daqReleaseRef(defaultValue); + } daqList* listOfRecommendedValues = NULL; daqProperty_getSuggestedValues(property, &listOfRecommendedValues); // Display min, max, default and suggested values - + if(minValueNum != NULL) + { + daqFloat value = 0; + daqNumber_getFloatValue(minValueNum, &value); + printf("- Minimum Value: %f\n", value); + daqReleaseRef(minValueNum); + if (maxValueNum != NULL) + { + value = 0; + daqNumber_getFloatValue(maxValueNum, &value); + printf("- Maximum Value: %f\n", value); + daqReleaseRef(maxValueNum); + } + } } } @@ -237,10 +258,16 @@ void intProp(daqProperty* property) daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); - daqInt defaultValue = 0; - daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); + if (defaultValueObj != NULL) + { + daqInteger* defaultValueOb = NULL; + daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValueOb); + daqInt defaultValue = 0; + daqInteger_getValue(defaultValueOb, &defaultValue); + daqReleaseRef(defaultValueOb); + printf("- Default value: %lld\n", defaultValue); + } daqList* listOfSuggestedValues = NULL; daqProperty_getSuggestedValues(property, &listOfSuggestedValues); @@ -249,7 +276,7 @@ void intProp(daqProperty* property) { daqInt minValue = 0; daqNumber_getIntValue(minValueNum, &minValue); - printf("\n- Minimum value: %lld\n", minValue); + printf("- Minimum value: %lld\n", minValue); daqReleaseRef(minValueNum); if (maxValueNum != NULL) { diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 1631d003ec1b6c7bbaa85b8b640789351841ac15..f24764216356209f53bd27c991d10533eab9f00c 100644 GIT binary patch delta 26 hcmeBD>{8s2#mia5kjRk7kj{`gxtmjU^9{8s2#VelAP{5GNkjLP{;K&fj5X6uOWT!KvZf@k|WCj4IrU+L6 diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index e773976..868b39b 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -51,7 +51,7 @@ daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native); // Range conversion struct Range openDAQRangeConversion(daqRange* daq); -daqRange* RangeOpenDAQConversion(struct Range native); +daqRange* rangeOpenDAQConversion(struct Range native); // Struct conversion struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq); @@ -238,7 +238,7 @@ struct Range openDAQRangeConversion(daqRange* daq) return native; } -daqRange* RangeOpenDAQConversion(struct Range native) +daqRange* rangeOpenDAQConversion(struct Range native) { daqRange* daq = NULL; daqNumber* lowValue = NULL; From a0cf83ace6eba88a1c123b3daf819eb7afc6c707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 2 Feb 2026 11:50:14 +0100 Subject: [PATCH 071/103] Added processing for Strings and objects --- ..._0_property_name_and_value_visualization.c | 238 +++++++++++------- 1 file changed, 151 insertions(+), 87 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index e8b87b8..0c9df60 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -24,9 +24,11 @@ enum PropertyType EnumerationProperty }; +void displayPropertyTypes(daqPropertyObject* propertyObject); void functionProp(daqProperty* property); void sparseSelectionProp(daqProperty* property); void selectionProp(daqProperty* property); +void objectProp(daqProperty* property); void boolProp(daqProperty* property); void floatProp(daqProperty* property); void intProp(daqProperty* property); @@ -48,7 +50,6 @@ int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) return 0; } -// Missing handling for IntProp, SelectionProp, SparseSelectionProp, ReferenceProp, FunctionProp // Note on universal attributes (default value, read-only, visible, ...): // - They will be seen on all visualizations of properties // - @@ -116,6 +117,11 @@ void determinePropertyTypeAndPrint(daqProperty* property) functionProp(property); break; } + case daqCtObject: + { + objectProp(property); + break; + } case daqCtStruct: { structProp(property); @@ -157,9 +163,6 @@ void functionProp(daqProperty* property) { daqCallableInfo* callInfo = NULL; daqProperty_getCallableInfo(property, &callInfo); - - - } // SparseSelectionProperty @@ -183,65 +186,80 @@ void prop(daqProperty* property) // BoolProperty void boolProp(daqProperty* property) { - // Retrive metadata, check what type the value is... - if (propertyValueTypeCheck(property, daqCtBool)) - { - // We have to check the default value and the current value that the property is set to - } - - daqBaseObject* defaultVisibleObj = NULL; - daqProperty_getDefaultValue(property, &defaultVisibleObj); - - daqBool* defaultVisible = NULL; - daqQueryInterface(property, DAQ_BOOLEAN_INTF_ID, &defaultVisible); - - + daqBaseObject* temp = NULL; + daqBoolean* defaultValue = NULL; + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &defaultValue); + daqReleaseRef(temp); + + daqBoolean* value = NULL; + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqReleaseRef(temp); + + daqBool nativeValue = False; + daqBoolean_getValue(value, &nativeValue); + daqReleaseRef(value); + daqBool nativeDefaultValue = False; + daqBoolean_getValue(defaultValue, &nativeDefaultValue); + daqReleaseRef(defaultValue); + + printf("- Value: %s\n", nativeValue == True ? "True" : "False"); + printf("- Default Value: %s\n", nativeDefaultValue == True ? "True" : "False"); } // FloatProperty void floatProp(daqProperty* property) { - // Retrive metadata, check what type the value is... - if (propertyValueTypeCheck(property, daqCtFloat)) - { - // Min value, max value, default value, suggested values, visible - daqNumber* minValueNum = NULL; - daqProperty_getMinValue(property, &minValueNum); + // Min value, max value, default value, suggested values, visible + daqNumber* minValueNum = NULL; + daqProperty_getMinValue(property, &minValueNum); - daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, &maxValueNum); + daqNumber* maxValueNum = NULL; + daqProperty_getMaxValue(property, &maxValueNum); - daqBaseObject* defaultValueObj = NULL; - daqProperty_getDefaultValue(property, &defaultValueObj); + daqBaseObject* defaultValueObj = NULL; + daqProperty_getDefaultValue(property, &defaultValueObj); - if (defaultValueObj != NULL) - { - daqFloatObject* defaultValue = NULL; - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); - daqFloat value = 0; - daqFloatObject_getValue(defaultValue, &value); - printf("- Default Value: %f\n", value); - daqReleaseRef(defaultValue); - } + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + daqFloatObject* value = NULL; + daqQueryInterface(valueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); + daqReleaseRef(valueObj); - daqList* listOfRecommendedValues = NULL; - daqProperty_getSuggestedValues(property, &listOfRecommendedValues); + daqFloat valueNative = 0; + daqFloatObject_getValue(value, &valueNative); + daqReleaseRef(value); - // Display min, max, default and suggested values - if(minValueNum != NULL) + printf("- Value: %f\n", valueNative); + + daqFloat valueDefault = 0; + if (defaultValueObj != NULL) + { + daqFloatObject* defaultValue = NULL; + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + daqFloatObject_getValue(defaultValue, &valueDefault); + printf("- Default Value: %f\n", valueDefault); + daqReleaseRef(defaultValue); + } + + daqList* listOfRecommendedValues = NULL; + daqProperty_getSuggestedValues(property, &listOfRecommendedValues); + + // Display min, max, default and suggested values + if(minValueNum != NULL) + { + valueDefault = 0; + daqNumber_getFloatValue(minValueNum, &valueDefault); + printf("- Minimum Value: %f\n", valueDefault); + daqReleaseRef(minValueNum); + if (maxValueNum != NULL) { - daqFloat value = 0; - daqNumber_getFloatValue(minValueNum, &value); - printf("- Minimum Value: %f\n", value); - daqReleaseRef(minValueNum); - if (maxValueNum != NULL) - { - value = 0; - daqNumber_getFloatValue(maxValueNum, &value); - printf("- Maximum Value: %f\n", value); - daqReleaseRef(maxValueNum); - } + valueDefault = 0; + daqNumber_getFloatValue(maxValueNum, &valueDefault); + printf("- Maximum Value: %f\n", valueDefault); + daqReleaseRef(maxValueNum); } } } @@ -253,11 +271,21 @@ void intProp(daqProperty* property) daqProperty_getMinValue(property, &minValueNum); daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, maxValueNum); + daqProperty_getMaxValue(property, &maxValueNum); daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + daqInteger* value = NULL; + daqQueryInterface(valueObj, DAQ_INTEGER_INTF_ID, &value); + daqInt valueNative = openDAQIntConversion(value); + daqReleaseRef(value); + daqReleaseRef(valueObj); + + printf("- Value: %lld\n", valueNative); + if (defaultValueObj != NULL) { daqInteger* defaultValueOb = NULL; @@ -265,7 +293,7 @@ void intProp(daqProperty* property) daqInt defaultValue = 0; daqInteger_getValue(defaultValueOb, &defaultValue); daqReleaseRef(defaultValueOb); - + daqReleaseRef(defaultValueObj); printf("- Default value: %lld\n", defaultValue); } daqList* listOfSuggestedValues = NULL; @@ -294,33 +322,36 @@ void intProp(daqProperty* property) // StringProperty void stringProp(daqProperty* property) { - // Retrive metadata, check what type the value is... - if(propertyValueTypeCheck(property, daqCtString)) - { - // Default value, suggested values, visible - } - daqBaseObject* defaultStringObj = NULL; - daqProperty_getDefaultValue(property, &defaultStringObj); - daqString* defaultString = NULL; - daqQueryInterface(defaultStringObj, DAQ_STRING_INTF_ID, &defaultString); - printDaqFormattedString("\n- String default value: %s\n", defaultString); + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + + daqString* value = NULL; + daqQueryInterface(valueObj, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Value: %s\n", value); + daqReleaseRef(value); + daqReleaseRef(valueObj); + + daqProperty_getDefaultValue(property, &valueObj); + daqQueryInterface(valueObj, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Default value: %s\n", value); daqList* suggestedStrings = NULL; daqProperty_getSuggestedValues(property, &suggestedStrings); - // Display + daqReleaseRef(value); + daqReleaseRef(valueObj); + daqSizeT count = 0; if (suggestedStrings) daqList_getCount(suggestedStrings, &count); daqBaseObject* currentObj = NULL; - daqString* currentStr = NULL; for (daqSizeT i = 0; i< count; i++) { daqList_getItemAt(suggestedStrings, i, ¤tObj); - daqString* temp = daqQueryInterfacePtr(currentObj, DAQ_STRING_INTF_ID); + value = daqQueryInterfacePtr(currentObj, DAQ_STRING_INTF_ID); - printf("\n%s\n", openDAQStringConversion(temp)); + printf("\n%s\n", openDAQStringConversion(value)); - daqReleaseRef(temp); + daqReleaseRef(value); daqReleaseRef(currentObj); } } @@ -333,18 +364,21 @@ void ratioProp(daqProperty* property) daqProperty_getDefaultValue(property, &defaultRatioObj); daqRatio* defaultRatio = NULL; daqQueryInterface(defaultRatioObj, DAQ_RATIO_INTF_ID, &defaultRatio); + daqReleaseRef(defaultRatioObj); - // Min and max are included here - daqNumber* minValue = NULL; - daqNumber* maxValue = NULL; - daqProperty_getMinValue(property, &minValue); - daqProperty_getMaxValue(property, &maxValue); + // Default value Display + if (defaultRatio == NULL) + return; - // When displaying min/max, there needs to be an emptiness check + daqInt denominator = 0; + daqInt numerator = 0; + daqRatio_getDenominator(defaultRatio, &denominator); + daqRatio_getNumerator(defaultRatio, &numerator); - daqBool visible = False; - daqProperty_getVisible(property, &visible); - // Not sure about suggested values.... + printf("- Default denominator: %lld\n", denominator); + printf("- Default numerator: %lld\n", numerator); + + daqReleaseRef(defaultRatio); } // ListProperty @@ -373,9 +407,6 @@ void dictProp(daqProperty* property) // ObjectProperty void objectProp(daqProperty* property) { - daqBool visible = False; - daqProperty_getVisible(property, &visible); - daqBaseObject* defaultObjectObj = NULL; daqProperty_getDefaultValue(property, &defaultObjectObj); @@ -386,22 +417,55 @@ void objectProp(daqProperty* property) daqPropertyObject* defaultPropObj = NULL; daqQueryInterface(defaultObjectObj, DAQ_PROPERTY_OBJECT_INTF_ID, &defaultPropObj); - // Check if empty and then rerun the objectProp on the defaultPropObj + // Display both (default Value and actual value, even if they are the same) + if (valueObj != NULL) + { + daqPropertyObject* value = NULL; + daqQueryInterface(valueObj, DAQ_PROPERTY_OBJECT_INTF_ID, &value); + printf("\n--- Object property Value ---\n"); + displayPropertyTypes(value); + daqReleaseRef(value); + if (defaultPropObj != NULL) + { + daqQueryInterface(defaultPropObj, DAQ_PROPERTY_OBJECT_INTF_ID, &value); + printf("\n--- Object property DEFAULT Value ----\n"); + displayPropertyTypes(value); + daqReleaseRef(value); + } + printf("\n---\n"); + } } // StructureProperty void structProp(daqProperty* property) { - if(propertyValueTypeCheck(property, daqCtStruct)) - {} // Value is Struct Core Type daqBaseObject* defValueObj = NULL; daqProperty_getDefaultValue(property, &defValueObj); daqStruct* defValue = NULL; - if (defValueObj) - daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); + daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + + daqStruct* value = NULL; + daqQueryInterface(valueObj, DAQ_STRUCT_INTF_ID, &value); + + daqList* valueNames = NULL; + daqStruct_getFieldNames(value, &valueNames); + // daqString* name = NULL; + daqSizeT count = 0; + daqBaseObject* temp = NULL; + daqList_getCount(valueNames, &count); + for (daqSizeT i = 0; i< count;i++) + { + daqList_getItemAt(valueNames, i, &temp); + + } + daqReleaseRef(valueNames); + daqReleaseRef(value); + daqReleaseRef(defValueObj); } // EnumerationProperty @@ -442,7 +506,7 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) daqProperty_getValueType(prop, &propCoreType); daqString* propName = NULL; daqProperty_getName(prop, &propName); - printDaqFormattedString("\n\nProperty name: %s", propName); + printDaqFormattedString("\nProperty name: %s", propName); daqReleaseRef(propName); if (propCoreType == daqCtObject) From 06f42786d5e24069bda985dee384a93020f780ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 2 Feb 2026 15:03:11 +0100 Subject: [PATCH 072/103] Added a simplified display for properties --- ..._0_property_name_and_value_visualization.c | 24 +- examples/CMakeLists.txt | 3 +- examples/simple_properties_display_handling.c | 302 ++++++++++++++++++ examples/util_headers/daq_c_conversions.h | 2 +- 4 files changed, 316 insertions(+), 15 deletions(-) create mode 100644 examples/simple_properties_display_handling.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index 0c9df60..e6b7021 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -233,15 +233,14 @@ void floatProp(daqProperty* property) printf("- Value: %f\n", valueNative); - daqFloat valueDefault = 0; + valueNative = 0; if (defaultValueObj != NULL) { - daqFloatObject* defaultValue = NULL; - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); daqReleaseRef(defaultValueObj); - daqFloatObject_getValue(defaultValue, &valueDefault); - printf("- Default Value: %f\n", valueDefault); - daqReleaseRef(defaultValue); + daqFloatObject_getValue(value, &valueNative); + printf("- Default Value: %f\n", valueNative); + daqReleaseRef(value); } daqList* listOfRecommendedValues = NULL; @@ -250,15 +249,15 @@ void floatProp(daqProperty* property) // Display min, max, default and suggested values if(minValueNum != NULL) { - valueDefault = 0; - daqNumber_getFloatValue(minValueNum, &valueDefault); - printf("- Minimum Value: %f\n", valueDefault); + valueNative = 0; + daqNumber_getFloatValue(minValueNum, &valueNative); + printf("- Minimum Value: %f\n", valueNative); daqReleaseRef(minValueNum); if (maxValueNum != NULL) { - valueDefault = 0; - daqNumber_getFloatValue(maxValueNum, &valueDefault); - printf("- Maximum Value: %f\n", valueDefault); + valueNative = 0; + daqNumber_getFloatValue(maxValueNum, &valueNative); + printf("- Maximum Value: %f\n", valueNative); daqReleaseRef(maxValueNum); } } @@ -314,7 +313,6 @@ void intProp(daqProperty* property) daqReleaseRef(maxValueNum); } } - if(listOfSuggestedValues!=NULL) daqReleaseRef(listOfSuggestedValues); } diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7487270..7fa8e9e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -16,7 +16,8 @@ set(EXAMPLE_SOURCES metadata_c_conversion.c conversions_demo.c getter_wrapper.c - setter_wrapper.c) + setter_wrapper.c + simple_properties_display_handling.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c new file mode 100644 index 0000000..d3e90f5 --- /dev/null +++ b/examples/simple_properties_display_handling.c @@ -0,0 +1,302 @@ +/* + * Example that show how to properly display all relevant attributes and + * metadata in properties. + */ +#include + +void determinePropertyTypeAndPrint(daqProperty* property); +void displayPropertyTypes(daqPropertyObject* propertyObject); +void displayCommonMetadata(daqProperty* property); +void intProp(daqProperty* property); +void floatProp(daqProperty* property); +void stringProp(daqProperty* property); +void boolProp(daqProperty* property); +void sparseSelectionProp(daqProperty* property); +void selectionProp(daqProperty* property); + +void determinePropertyTypeAndPrint(daqProperty* property) +{ + displayCommonMetadata(property); + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(property, &propCoreType); + switch(propCoreType) + { + case daqCtBool: + boolProp(property); + break; + case daqCtFloat: + floatProp(property); + break; + case daqCtString: + stringProp(property); + break; + case daqCtInt: + { + daqBaseObject* selectionValues = NULL; + daqProperty_getSelectionValues(property, &selectionValues); + if (selectionValues == NULL) + intProp(property); + else if (DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) + sparseSelectionProp(property); + else + selectionProp(property); + break; + } + default: + break; + } +} + +void displayPropertyTypes(daqPropertyObject* propertyObject) +{ + daqList* properties = NULL; + daqPropertyObject_getVisibleProperties(propertyObject, &properties); + + daqSizeT count = 0; + daqList_getCount(properties, &count); + + daqBaseObject* temp = NULL; + daqProperty* prop = NULL; + daqString* name = NULL; + daqCoreType propCoreType = daqCtUndefined; + + for(daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(properties, i, &temp); + if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_PROPERTY_INTF_ID)) + { + daqQueryInterface(temp, DAQ_PROPERTY_INTF_ID, &prop); + + daqProperty_getValueType(prop, &propCoreType); + daqProperty_getName(prop, &name); + printDaqFormattedString("\nProperty Name: %s\n", name); + daqReleaseRef(name); + determinePropertyTypeAndPrint(prop); + daqReleaseRef(prop); + } + daqReleaseRef(temp); + } + + daqReleaseRef(properties); +} + +void displayCommonMetadata(daqProperty* property) +{ + daqBool visible = False; + daqBool readOnly = False; + + daqProperty_getVisible(property, &visible); + daqProperty_getReadOnly(property, &readOnly); + + printf("\n- Visible: %s\n", visible == True ? "True" : "False"); + printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +} + +void intProp(daqProperty* property) +{ + daqBaseObject* temp = NULL; + daqProperty_getValue(property, &temp); + daqInteger* value = NULL; + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + daqInt valueNative = openDAQIntConversion(value); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Value %lld\n", valueNative); + + daqProperty_getDefaultValue(property, &temp); + if (temp != NULL) + { + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + valueNative = openDAQIntConversion(value); + daqReleaseRef(value); + daqReleaseRef(temp); + printf("- Default Value: %lld\n", valueNative); + } + + daqNumber* edgeCase = NULL; + daqProperty_getMinValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getIntValue(edgeCase, &valueNative); + printf("- Minimum Value: %lld\n", valueNative); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getIntValue(edgeCase, &valueNative); + printf("- Maximum Value: %lld\n", valueNative); + daqReleaseRef(edgeCase); + } + } + + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + + daqSizeT count = 0; + if (suggestedValues != NULL) + { + daqList_getCount(suggestedValues, &count); + printf("- Suggested Values: \n"); + + for (daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + value = daqQueryInterfacePtr(temp, DAQ_INTEGER_INTF_ID); + valueNative = openDAQIntConversion(value); + daqReleaseRef(value); + daqReleaseRef(temp); + printf(" -- %lld\n", valueNative); + } + daqReleaseRef(suggestedValues); + } +} + +void floatProp(daqProperty* property) +{ + daqBaseObject* temp = NULL; + daqProperty_getValue(property, &temp); + + daqFloatObject* value = NULL; + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + + daqFloat valueNative = 0; + daqFloatObject_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Value: %f\n", valueNative); + + daqProperty_getDefaultValue(property, &temp); + if (temp != NULL) + { + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + daqFloatObject_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default Value: %f\n", valueNative); + } + + daqNumber* edgeCase = NULL; + daqProperty_getMinValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &valueNative); + printf("- Minimum Value: %f\n", valueNative); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &valueNative); + printf("- Maximum Value: %f\n", valueNative); + daqReleaseRef(edgeCase); + } + } + + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Suggested Values:\n"); + + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for(daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + value = daqQueryInterfacePtr(temp, DAQ_FLOAT_OBJECT_INTF_ID); + valueNative = openDAQFloatConversion(value); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf(" -- %f\n", valueNative); + } + daqReleaseRef(suggestedValues); + } +} + +void stringProp(daqProperty* property) +{ + daqBaseObject* temp = NULL; + daqProperty_getValue(property, &temp); + + daqString* value = NULL; + daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Value: %s\n", value); + daqReleaseRef(value); + daqReleaseRef(temp); + + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Default Value: %s\n", value); + daqReleaseRef(value); + daqReleaseRef(temp); + + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + + daqSizeT count = 0; + if (suggestedValues) + daqList_getCount(suggestedValues, &count); + for(daqSizeT i = 0; i< count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + value = daqQueryInterfacePtr(temp, DAQ_STRING_INTF_ID); + + printDaqFormattedString("\n%s\n", value); + daqReleaseRef(value); + daqReleaseRef(temp); + } +} + +void boolProp(daqProperty* property) +{ + daqBaseObject* temp = NULL; + daqBoolean* value = NULL; + + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqBool valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Value: %s\n", valueNative == True ? "True" : "False"); + + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default Value: %s\n", valueNative == True ? "True" : "False"); +} + +void sparseSelectionProp(daqProperty* property) +{ + +} + +void selectionProp(daqProperty* property) +{ + +} + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + displayPropertyTypes((daqPropertyObject*) simulator); + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); + return 0; +} \ No newline at end of file diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 868b39b..fff212a 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -335,7 +335,7 @@ daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqType enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq) { enum ComponentStatusTypeEnum native = Error; - uint8_t temp; + daqInt temp; daqEnumeration_getIntValue(daq, &temp); // Sanity check From badb1fb43089a8d9c1be20259a3083f3929dc903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 2 Feb 2026 15:40:27 +0100 Subject: [PATCH 073/103] Updated structure for PR --- ..._0_property_name_and_value_visualization.c | 544 ------------------ examples/CMakeLists.txt | 6 - examples/conversions_demo.c | 11 - examples/getter_wrapper.c | 11 - examples/metadata_c_conversion.c | Bin 4234 -> 0 bytes examples/setter_wrapper.c | 11 - examples/tree_traversal.c | 384 ------------- 7 files changed, 967 deletions(-) delete mode 100644 examples/3_0_property_name_and_value_visualization.c delete mode 100644 examples/conversions_demo.c delete mode 100644 examples/getter_wrapper.c delete mode 100644 examples/metadata_c_conversion.c delete mode 100644 examples/setter_wrapper.c delete mode 100644 examples/tree_traversal.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c deleted file mode 100644 index e6b7021..0000000 --- a/examples/3_0_property_name_and_value_visualization.c +++ /dev/null @@ -1,544 +0,0 @@ -/* - * This example demonstrates how to search through properties, - * determine their (core)type and display their value. - */ - -#include - -enum PropertyType -{ - Property = 0, - BoolProprerty, - IntProperty, - FloatProperty, - StringProperty, - ListProperty, - DictProperty, - RatioProperty, - ObjectProperty, - ReferenceProperty, - FunctionProperty, - SelectionProperty, - SparseSelectionProperty, - StructSelectionProperty, - EnumerationProperty -}; - -void displayPropertyTypes(daqPropertyObject* propertyObject); -void functionProp(daqProperty* property); -void sparseSelectionProp(daqProperty* property); -void selectionProp(daqProperty* property); -void objectProp(daqProperty* property); -void boolProp(daqProperty* property); -void floatProp(daqProperty* property); -void intProp(daqProperty* property); -void stringProp(daqProperty* property); -void ratioProp(daqProperty* property); -void listProp(daqProperty* property); -void dictProp(daqProperty* property); -void structProp(daqProperty* property); -void enumProp(daqProperty* property); -void prop(daqProperty* property); - -int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) -{ - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, &propCoreType); - - if (propCoreType == coreType) - return 1; - return 0; -} - -// Note on universal attributes (default value, read-only, visible, ...): -// - They will be seen on all visualizations of properties -// - - -void displayCommonMetadata(daqProperty* property) -{ - // Read-only - // Visible - daqBool visible = False; - daqBool readOnly = False; - daqProperty_getVisible(property, &visible); - daqProperty_getReadOnly(property, &readOnly); - - printf("\n\n- Visible: %s\n", visible == True ? "True" : "False"); - printf("- ReadOnly: %s\n", readOnly == True ? "True" : "False"); -} - -void determinePropertyTypeAndPrint(daqProperty* property) -{ - displayCommonMetadata(property); - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, &propCoreType); - - switch(propCoreType) - { - case daqCtBool: - { - boolProp(property); - break; - } - case daqCtFloat: - { - floatProp(property); - break; - } - case daqCtString: - { - stringProp(property); - break; - } - case daqCtList: - { - listProp(property); - break; - } - case daqCtDict: - { - dictProp(property); - break; - } - case daqCtRatio: - { - ratioProp(property); - break; - } - case daqCtFunc: - { - // Function prop - functionProp(property); - break; - } - case daqCtProc: - { - // Function prop w/ no output - functionProp(property); - break; - } - case daqCtObject: - { - objectProp(property); - break; - } - case daqCtStruct: - { - structProp(property); - break; - } - case daqCtEnumeration: - { - enumProp(property); - break; - } - case daqCtInt: - { - // Check between selection, sparse selection and int property - daqBaseObject* selectionValues = NULL; - daqProperty_getSelectionValues(property, &selectionValues); - if (selectionValues == NULL) - { - intProp(property); - break; - } - - if(DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) - sparseSelectionProp(property); - else - selectionProp(property); - - break; - } - default: - { - prop(property); - break; - } - } -} - -// FunctionProperty (also handles ProcedureProperty) -void functionProp(daqProperty* property) -{ - daqCallableInfo* callInfo = NULL; - daqProperty_getCallableInfo(property, &callInfo); -} - -// SparseSelectionProperty -void sparseSelectionProp(daqProperty* property) -{ - -} - -// SelectionProperty -void selectionProp(daqProperty* property) -{ - -} - -// Property -void prop(daqProperty* property) -{ - -} - -// BoolProperty -void boolProp(daqProperty* property) -{ - daqBaseObject* temp = NULL; - daqBoolean* defaultValue = NULL; - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &defaultValue); - daqReleaseRef(temp); - - daqBoolean* value = NULL; - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqReleaseRef(temp); - - daqBool nativeValue = False; - daqBoolean_getValue(value, &nativeValue); - daqReleaseRef(value); - daqBool nativeDefaultValue = False; - daqBoolean_getValue(defaultValue, &nativeDefaultValue); - daqReleaseRef(defaultValue); - - printf("- Value: %s\n", nativeValue == True ? "True" : "False"); - printf("- Default Value: %s\n", nativeDefaultValue == True ? "True" : "False"); -} - -// FloatProperty -void floatProp(daqProperty* property) -{ - // Min value, max value, default value, suggested values, visible - daqNumber* minValueNum = NULL; - daqProperty_getMinValue(property, &minValueNum); - - daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, &maxValueNum); - - daqBaseObject* defaultValueObj = NULL; - daqProperty_getDefaultValue(property, &defaultValueObj); - - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - daqFloatObject* value = NULL; - daqQueryInterface(valueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); - daqReleaseRef(valueObj); - - daqFloat valueNative = 0; - daqFloatObject_getValue(value, &valueNative); - daqReleaseRef(value); - - printf("- Value: %f\n", valueNative); - - valueNative = 0; - if (defaultValueObj != NULL) - { - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); - daqReleaseRef(defaultValueObj); - daqFloatObject_getValue(value, &valueNative); - printf("- Default Value: %f\n", valueNative); - daqReleaseRef(value); - } - - daqList* listOfRecommendedValues = NULL; - daqProperty_getSuggestedValues(property, &listOfRecommendedValues); - - // Display min, max, default and suggested values - if(minValueNum != NULL) - { - valueNative = 0; - daqNumber_getFloatValue(minValueNum, &valueNative); - printf("- Minimum Value: %f\n", valueNative); - daqReleaseRef(minValueNum); - if (maxValueNum != NULL) - { - valueNative = 0; - daqNumber_getFloatValue(maxValueNum, &valueNative); - printf("- Maximum Value: %f\n", valueNative); - daqReleaseRef(maxValueNum); - } - } -} - -// IntProperty -void intProp(daqProperty* property) -{ - daqNumber* minValueNum = NULL; - daqProperty_getMinValue(property, &minValueNum); - - daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, &maxValueNum); - - daqBaseObject* defaultValueObj = NULL; - daqProperty_getDefaultValue(property, &defaultValueObj); - - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - daqInteger* value = NULL; - daqQueryInterface(valueObj, DAQ_INTEGER_INTF_ID, &value); - daqInt valueNative = openDAQIntConversion(value); - daqReleaseRef(value); - daqReleaseRef(valueObj); - - printf("- Value: %lld\n", valueNative); - - if (defaultValueObj != NULL) - { - daqInteger* defaultValueOb = NULL; - daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValueOb); - daqInt defaultValue = 0; - daqInteger_getValue(defaultValueOb, &defaultValue); - daqReleaseRef(defaultValueOb); - daqReleaseRef(defaultValueObj); - printf("- Default value: %lld\n", defaultValue); - } - daqList* listOfSuggestedValues = NULL; - daqProperty_getSuggestedValues(property, &listOfSuggestedValues); - - // Display attributes if they are not empty - if (minValueNum != NULL) - { - daqInt minValue = 0; - daqNumber_getIntValue(minValueNum, &minValue); - printf("- Minimum value: %lld\n", minValue); - daqReleaseRef(minValueNum); - if (maxValueNum != NULL) - { - daqInt maxValue = 0; - daqNumber_getIntValue(maxValueNum, &maxValue); - printf("- Maximum value: %lld\n", maxValue); - daqReleaseRef(maxValueNum); - } - } - if(listOfSuggestedValues!=NULL) - daqReleaseRef(listOfSuggestedValues); -} - -// StringProperty -void stringProp(daqProperty* property) -{ - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - - daqString* value = NULL; - daqQueryInterface(valueObj, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Value: %s\n", value); - daqReleaseRef(value); - daqReleaseRef(valueObj); - - daqProperty_getDefaultValue(property, &valueObj); - daqQueryInterface(valueObj, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Default value: %s\n", value); - daqList* suggestedStrings = NULL; - daqProperty_getSuggestedValues(property, &suggestedStrings); - daqReleaseRef(value); - daqReleaseRef(valueObj); - - daqSizeT count = 0; - if (suggestedStrings) - daqList_getCount(suggestedStrings, &count); - daqBaseObject* currentObj = NULL; - - for (daqSizeT i = 0; i< count; i++) - { - daqList_getItemAt(suggestedStrings, i, ¤tObj); - value = daqQueryInterfacePtr(currentObj, DAQ_STRING_INTF_ID); - - printf("\n%s\n", openDAQStringConversion(value)); - - daqReleaseRef(value); - daqReleaseRef(currentObj); - } -} - -// RatioProperty -void ratioProp(daqProperty* property) -{ - // Retrive metadata, check what type the value is... - daqBaseObject* defaultRatioObj = NULL; - daqProperty_getDefaultValue(property, &defaultRatioObj); - daqRatio* defaultRatio = NULL; - daqQueryInterface(defaultRatioObj, DAQ_RATIO_INTF_ID, &defaultRatio); - daqReleaseRef(defaultRatioObj); - - // Default value Display - if (defaultRatio == NULL) - return; - - daqInt denominator = 0; - daqInt numerator = 0; - daqRatio_getDenominator(defaultRatio, &denominator); - daqRatio_getNumerator(defaultRatio, &numerator); - - printf("- Default denominator: %lld\n", denominator); - printf("- Default numerator: %lld\n", numerator); - - daqReleaseRef(defaultRatio); -} - -// ListProperty -void listProp(daqProperty* property) -{ - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqCoreType itemType = daqCtUndefined; - daqProperty_getItemType(property, &itemType); -} - -// DictProperty -void dictProp(daqProperty* property) -{ - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqCoreType itemType = daqCtUndefined; - daqProperty_getItemType(property, &itemType); - - daqCoreType keyType = daqCtUndefined; - daqProperty_getKeyType(property, &keyType); -} - -// ObjectProperty -void objectProp(daqProperty* property) -{ - daqBaseObject* defaultObjectObj = NULL; - daqProperty_getDefaultValue(property, &defaultObjectObj); - - // PropertyObject value - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - - daqPropertyObject* defaultPropObj = NULL; - daqQueryInterface(defaultObjectObj, DAQ_PROPERTY_OBJECT_INTF_ID, &defaultPropObj); - - // Display both (default Value and actual value, even if they are the same) - if (valueObj != NULL) - { - daqPropertyObject* value = NULL; - daqQueryInterface(valueObj, DAQ_PROPERTY_OBJECT_INTF_ID, &value); - printf("\n--- Object property Value ---\n"); - displayPropertyTypes(value); - daqReleaseRef(value); - if (defaultPropObj != NULL) - { - daqQueryInterface(defaultPropObj, DAQ_PROPERTY_OBJECT_INTF_ID, &value); - printf("\n--- Object property DEFAULT Value ----\n"); - displayPropertyTypes(value); - daqReleaseRef(value); - } - printf("\n---\n"); - } -} - -// StructureProperty -void structProp(daqProperty* property) -{ - // Value is Struct Core Type - daqBaseObject* defValueObj = NULL; - daqProperty_getDefaultValue(property, &defValueObj); - - daqStruct* defValue = NULL; - daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); - - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - - daqStruct* value = NULL; - daqQueryInterface(valueObj, DAQ_STRUCT_INTF_ID, &value); - - daqList* valueNames = NULL; - daqStruct_getFieldNames(value, &valueNames); - // daqString* name = NULL; - daqSizeT count = 0; - daqBaseObject* temp = NULL; - daqList_getCount(valueNames, &count); - for (daqSizeT i = 0; i< count;i++) - { - daqList_getItemAt(valueNames, i, &temp); - - } - daqReleaseRef(valueNames); - daqReleaseRef(value); - daqReleaseRef(defValueObj); -} - -// EnumerationProperty -void enumProp(daqProperty* property) -{ - daqBaseObject* selectionValueObj = NULL; - daqProperty_getSelectionValues(property, &selectionValueObj); - -} - -void displayPropertyTypes(daqPropertyObject* propertyObject) -{ - // List of IProperty - daqList* properties = NULL; - daqPropertyObject_getVisibleProperties(propertyObject, &properties); - - daqSizeT count = 0; - daqList_getCount(properties, &count); - - if (count <= 0) - { - daqReleaseRef(properties); - return; - } - - for (daqSizeT i = 0; i< count; i++) - { - daqBaseObject* currentPropBaseObj = NULL; - daqList_getItemAt(properties, i, ¤tPropBaseObj); - - // Cast into IProperty - if (DAQ_SUPPORTS_INTERFACE(currentPropBaseObj, DAQ_PROPERTY_INTF_ID)) - { - daqProperty* prop = NULL; - daqQueryInterface(currentPropBaseObj, DAQ_PROPERTY_INTF_ID, &prop); - - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(prop, &propCoreType); - daqString* propName = NULL; - daqProperty_getName(prop, &propName); - printDaqFormattedString("\nProperty name: %s", propName); - daqReleaseRef(propName); - - if (propCoreType == daqCtObject) - { - // Write them up first - determinePropertyTypeAndPrint(prop); - } - else if (propCoreType == daqCtUndefined) - { - // Maybe needed (don't know yet) - } - else - determinePropertyTypeAndPrint(prop); - - daqReleaseRef(prop); - } - - daqReleaseRef(currentPropBaseObj); - } - daqReleaseRef(properties); -} - - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - displayPropertyTypes((daqPropertyObject*)simulator); - - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); -} diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7fa8e9e..c7c692a 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -11,12 +11,6 @@ set(EXAMPLE_SOURCES read_with_formatted_timestamps.c print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c - tree_traversal.c - 3_0_property_name_and_value_visualization.c - metadata_c_conversion.c - conversions_demo.c - getter_wrapper.c - setter_wrapper.c simple_properties_display_handling.c) foreach(src ${EXAMPLE_SOURCES}) diff --git a/examples/conversions_demo.c b/examples/conversions_demo.c deleted file mode 100644 index da2d605..0000000 --- a/examples/conversions_demo.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} diff --git a/examples/getter_wrapper.c b/examples/getter_wrapper.c deleted file mode 100644 index 2377e62..0000000 --- a/examples/getter_wrapper.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c deleted file mode 100644 index f24764216356209f53bd27c991d10533eab9f00c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4234 zcmds4U2oGs5Zq@Z{(}jkaw?P-Azt{BNJ2zWmC#UlLWVz&aS{&isH&KLX6 z=a5h#Dr6;b&U<^av%7QWpFi%)iOgjrkzB}FCKAYV{0`-d3^2-1jOUklvXBI}{Fg{W zKFdqFD|gg~9#YJlVIJ>8sjKlT^&Q{|FYR?t%}-&;RVT8IC-ghR`VmG`tgsN*Dv%ej z>&ge&$Mwweo4`wo+2``Ut%kV_jmH zXFRo(3fr0-N)61-U>9Ky^^j^_gYQ493DyAB*hU(FL-T~3{Ox+^pbC13>kt*tlcu~y zU9{9cUuD?Xd|5ru7)@0z)Z`O5EwdIt_e~B1^fD`lyApRtD)K4VWp-vNC#gKe_yh1V zRsL#si$XIWd!)0VmwvjHgfg}m7Ecc z7#U+^inwBo(@(0bSvTxh?#JBKb1rQCryd@`hOCU$ovwzPMQ-oyMZb@6>Uff=xs8OU z6@Rz8yt>{wb5(B+zz9zluFY-i@jTXb)Iu{`hdyXd)@9VE;Kql&f4Q6$mE?cc&YSIk zw?XlS=zqO)|4Y5o``-n$jw;lLBF)taGk{{5d%K_W@dgx)=WMM=?itXw8_L(r?$PqJ z=<5cvCQr*`hxk_Qf3{7&<~rS(Tf4ngM5dKLETFk(y(j6nFw>P+)?1Sq_3eoLCBH#- zrspn_K<`Jm72tR@84se!VuFxpS`-_G0X-yyQyA zGm7hL)y(zP&5z%Hf7xv1;;A;-2zB}Wd6Sjh_t8z}mREM)++A<16rN5Osyj_*Udu09 CvZU4k diff --git a/examples/setter_wrapper.c b/examples/setter_wrapper.c deleted file mode 100644 index da2d605..0000000 --- a/examples/setter_wrapper.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c deleted file mode 100644 index f54f401..0000000 --- a/examples/tree_traversal.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * In openDAQ devices are represented by a tree structure. Example demonstrates how to fully explore that tree and displays - * the type of the object alongside its name. After saving every object into an dictionary, example displays all of saved objects - * globalIds. - */ - -#include - -enum ComponentType -{ - Unk = 0, - Device, - FunctionBlock, - IOFolder, - Channel, - Server, - Signal, - Folder, - Component, - SyncComponent, - InputPort -}; - -void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout); - -void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout); -void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout); -void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout); -void printDaqServer(daqServer* server, daqDict* listOfAvailableDevices, daqBool printout); -void printDaqFolder(daqFolder* folder, daqDict* listOfAvailableDevices, daqBool printout); -void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout); -void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout); - -void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component); - - -void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component) -{ - daqString* globalId = NULL; - daqString* description = NULL; - daqComponent_getGlobalId(component, &globalId); - daqComponent_getDescription(component, &description); - - daqDict_set(listOfAvailableDevices, globalId, description); - - daqReleaseRef(globalId); - daqReleaseRef(description); -} - -void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout) -{ - daqDict_createDict(listOfAvailableDevices); - printDaqDevice(headDevice, *listOfAvailableDevices, printout); -} - -void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqBaseObject* listMember = NULL; - daqSizeT count = 0; - daqList_getCount(list, &count); - if (count <= 0) - return; - daqList_getItemAt(list, 0, &listMember); - enum ComponentType componentType = Unk; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_DEVICE_INTF_ID) && (componentType == Unk)) - componentType = Device; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SERVER_INTF_ID) && (componentType == Unk)) - componentType = Server; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == Unk)) - componentType = SyncComponent; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == Unk)) - componentType = FunctionBlock; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FOLDER_INTF_ID) && (componentType == Unk)) - componentType = Folder; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_INPUT_PORT_INTF_ID) && (componentType == Unk)) - componentType = InputPort; - - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SIGNAL_INTF_ID) && (componentType == Unk)) - componentType = Signal; - - daqSizeT numberOfObjects = 0; - daqList_getCount(list, &numberOfObjects); - - for (daqSizeT i = 0; i < numberOfObjects; i++) - { - daqList_getItemAt(list, i, &listMember); - - switch (componentType) - { - case Device: - { - daqDevice* device = NULL; - daqQueryInterface(listMember, DAQ_DEVICE_INTF_ID, &device); - printDaqDevice(device, listOfAvailableDevices, printout); - daqReleaseRef(device); - daqReleaseRef(listMember); - break; - } - case Server: - { - daqServer* server = NULL; - daqQueryInterface(listMember, DAQ_SERVER_INTF_ID, &server); - printDaqServer(server, listOfAvailableDevices, printout); - daqReleaseRef(server); - daqReleaseRef(listMember); - break; - } - case SyncComponent: - { - daqSyncComponent* syncComponent = NULL; - daqQueryInterface(listMember, DAQ_SYNC_COMPONENT_INTF_ID, &syncComponent); - printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); - daqReleaseRef(syncComponent); - daqReleaseRef(listMember); - break; - } - case FunctionBlock: - { - daqFunctionBlock* functionBlock = NULL; - daqQueryInterface(listMember, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); - printDaqFunctionBlock(functionBlock, listOfAvailableDevices, printout); - daqReleaseRef(functionBlock); - daqReleaseRef(listMember); - break; - } - case Folder: - { - daqFolder* folder = NULL; - daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &folder); - printDaqFolder(folder, listOfAvailableDevices, printout); - daqReleaseRef(folder); - daqReleaseRef(listMember); - break; - } - case InputPort: - { - daqInputPort* inputPort = NULL; - daqQueryInterface(listMember, DAQ_INPUT_PORT_INTF_ID, &inputPort); - printInputPort(inputPort, listOfAvailableDevices, printout); - daqReleaseRef(inputPort); - daqReleaseRef(listMember); - break; - } - case Signal: - { - daqSignal* signal = NULL; - daqQueryInterface(listMember, DAQ_SIGNAL_INTF_ID, &signal); - printDaqSignal(signal, listOfAvailableDevices, printout); - daqReleaseRef(signal); - daqReleaseRef(listMember); - break; - } - default: - { - daqReleaseRef(listMember); - break; - } - } - } -} - -void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)device, &name); - - if (printout && name != NULL) - printDaqFormattedString("Device: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); - - daqFolder* ioFolder = NULL; - daqDevice_getInputsOutputsFolder(device, &ioFolder); - if (ioFolder != NULL) - { - printDaqFolder(ioFolder, listOfAvailableDevices, printout); - daqReleaseRef(ioFolder); - } - - daqSyncComponent* syncComponent = NULL; - daqDevice_getSyncComponent(device, &syncComponent); - if (syncComponent != NULL) - { - printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); - daqReleaseRef(syncComponent); - } - - daqList* devices = NULL; - daqDevice_getDevices(device, &devices, NULL); - if (devices != NULL) - { - printObjectList(devices, listOfAvailableDevices, printout); - daqReleaseRef(devices); - } - - daqList* functionBlocks = NULL; - daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); - if (functionBlocks != NULL) - { - printObjectList(functionBlocks, listOfAvailableDevices, printout); - daqReleaseRef(functionBlocks); - } - - daqList* servers = NULL; - daqDevice_getServers(device, &servers); - if (servers != NULL) - { - printObjectList(servers, listOfAvailableDevices, printout); - daqReleaseRef(servers); - } -} - -void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)functionBlock, &name); - - if (printout && name != NULL) - printDaqFormattedString("Function block: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); - - daqList* functionBlocks = NULL; - daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); - if (functionBlocks != NULL) - { - printObjectList(functionBlocks, listOfAvailableDevices, printout); - daqReleaseRef(functionBlocks); - } - - daqList* inputPorts = NULL; - daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); - if (inputPorts != NULL) - { - printObjectList(inputPorts, listOfAvailableDevices, printout); - daqReleaseRef(inputPorts); - } - - daqList* listOfSignals = NULL; - daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); - if (listOfSignals != NULL) - { - printObjectList(listOfSignals, listOfAvailableDevices, printout); - daqReleaseRef(listOfSignals); - } -} - -void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)folder, &name); - - - if (printout&& name!=NULL) - printDaqFormattedString("Folder: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); - - daqList* listOfItems = NULL; - daqFolder_getItems(folder, &listOfItems, NULL); - if (listOfItems != NULL) - { - printObjectList(listOfItems, listOfAllDevices, printout); - daqReleaseRef(listOfItems); - } -} - -void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)server, &name); - - if(printout && name != NULL) - printDaqFormattedString("Server: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); - - daqList* listOfSignals = NULL; - daqServer_getSignals(server, &listOfSignals, NULL); - if (listOfSignals != NULL) - { - printObjectList(listOfSignals, listOfAllAvailableDevices, printout); - daqReleaseRef(listOfSignals); - } -} - -void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)syncComp, &name); - - if(printout && name != NULL) - printDaqFormattedString("Sync component: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); -} - -void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)inputPort, &name); - - if (printout && name != NULL) - printDaqFormattedString("Input port: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); -} - -void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) -{ - daqString* name = NULL; - daqComponent_getName((daqComponent*)signal, &name); - - if (printout && name != NULL) - printDaqFormattedString("Signal: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); -} - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - daqDict* listOfComponents = NULL; - - componentTreePrintOut((daqDevice*)instance, &listOfComponents, True); - - daqSizeT count = 0; - daqDict_getCount(listOfComponents, &count); - printf("\nNumber of components in the openDAQ tree: %llu\n\n", count); - - daqList* keys = NULL; - daqDict_getKeyList(listOfComponents, &keys); - daqIterator* iterator = NULL; - daqList_createStartIterator(keys, &iterator); - - while(daqIterator_moveNext(iterator) == DAQ_SUCCESS) - { - daqBaseObject* current = NULL; - daqIterator_getCurrent(iterator, ¤t); - daqString* comp = NULL; - if(DAQ_SUPPORTS_INTERFACE(current, DAQ_STRING_INTF_ID)) - { - daqQueryInterface(current, DAQ_STRING_INTF_ID, &comp); - daqConstCharPtr constChar = NULL; - daqString_getCharPtr(comp, &constChar); - printf("%s\n", constChar); - } - daqReleaseRef(current); - } - - daqReleaseRef(iterator); - daqReleaseRef(keys); - daqReleaseRef(listOfComponents); - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); - return 0; -} From 5bd6255fb09e492a07a4b448f1331ee24f02be9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 11:03:05 +0100 Subject: [PATCH 074/103] Added missing processing --- examples/simple_properties_display_handling.c | 243 +++++++++++++++++- 1 file changed, 235 insertions(+), 8 deletions(-) diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index d3e90f5..843915f 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -5,18 +5,24 @@ #include void determinePropertyTypeAndPrint(daqProperty* property); -void displayPropertyTypes(daqPropertyObject* propertyObject); -void displayCommonMetadata(daqProperty* property); +void printPropertyObject(daqPropertyObject* propertyObject); +void printMetadata(daqProperty* property); void intProp(daqProperty* property); void floatProp(daqProperty* property); void stringProp(daqProperty* property); void boolProp(daqProperty* property); void sparseSelectionProp(daqProperty* property); void selectionProp(daqProperty* property); +void ratioProp(daqProperty* property); +void functionProp(daqProperty* property); +void objectProp(daqProperty* property); +void prop(daqProperty* property); +void printSelectedValue(daqBaseObject* container, daqCoreType itemType, daqInteger* keyValue); + void determinePropertyTypeAndPrint(daqProperty* property) { - displayCommonMetadata(property); + printMetadata(property); daqCoreType propCoreType = daqCtUndefined; daqProperty_getValueType(property, &propCoreType); switch(propCoreType) @@ -42,12 +48,33 @@ void determinePropertyTypeAndPrint(daqProperty* property) selectionProp(property); break; } + case daqCtFunc: + { + functionProp(property); + break; + } + case daqCtProc: + { + functionProp(property); + break; + } + case daqCtRatio: + { + ratioProp(property); + break; + } + case daqCtObject: + { + objectProp(property); + break; + } default: + prop(property); break; } } -void displayPropertyTypes(daqPropertyObject* propertyObject) +void printPropertyObject(daqPropertyObject* propertyObject) { daqList* properties = NULL; daqPropertyObject_getVisibleProperties(propertyObject, &properties); @@ -63,13 +90,14 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) for(daqSizeT i = 0; i < count; i++) { daqList_getItemAt(properties, i, &temp); - if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_PROPERTY_INTF_ID)) + prop = daqBorrowInterfacePtr(temp, DAQ_PROPERTY_INTF_ID); + if (prop != NULL) { daqQueryInterface(temp, DAQ_PROPERTY_INTF_ID, &prop); daqProperty_getValueType(prop, &propCoreType); daqProperty_getName(prop, &name); - printDaqFormattedString("\nProperty Name: %s\n", name); + printDaqFormattedString("\n%s\n", name); daqReleaseRef(name); determinePropertyTypeAndPrint(prop); daqReleaseRef(prop); @@ -80,7 +108,7 @@ void displayPropertyTypes(daqPropertyObject* propertyObject) daqReleaseRef(properties); } -void displayCommonMetadata(daqProperty* property) +void printMetadata(daqProperty* property) { daqBool visible = False; daqBool readOnly = False; @@ -276,12 +304,211 @@ void boolProp(daqProperty* property) void sparseSelectionProp(daqProperty* property) { + // Value + daqBaseObject* tempObj = NULL; + daqProperty_getValue(property, &tempObj); + daqInteger* value = NULL; + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); + daqReleaseRef(tempObj); + + // Selection values + daqDict* selectionValues = NULL; + daqProperty_getSelectionValues(property, &tempObj); + daqQueryInterface(tempObj, DAQ_DICT_INTF_ID, &selectionValues); + daqReleaseRef(tempObj); + + daqCoreType tempEnum = daqCtUndefined; + daqProperty_getItemType(property, &tempEnum); + + printSelectedValue(selectionValues, tempEnum, value); + daqReleaseRef(value); + + // Default Value + daqProperty_getDefaultValue(property, &tempObj); + + if (tempObj != NULL) + return; + + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); + daqReleaseRef(tempObj); + printSelectedValue(selectionValues, tempEnum, value); + daqReleaseRef(value); } void selectionProp(daqProperty* property) { + // Value + daqBaseObject* tempObj = NULL; + daqProperty_getValue(property, &tempObj); + daqInteger* value = NULL; + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); + daqReleaseRef(tempObj); + + // Selection values + daqList* selectionValues = NULL; + daqProperty_getSelectionValues(property, &tempObj); + daqQueryInterface(tempObj, DAQ_LIST_INTF_ID, &selectionValues); + daqReleaseRef(tempObj); + + daqCoreType tempEnum = daqCtUndefined; + daqProperty_getItemType(property, &tempEnum); + + printSelectedValue(selectionValues, tempEnum, value); + daqReleaseRef(value); + + // Default Value + daqProperty_getDefaultValue(property, &tempObj); + + if (tempObj != NULL) + return; + + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); + daqReleaseRef(tempObj); + + printSelectedValue(selectionValues, tempEnum, value); + daqReleaseRef(value); +} + +void ratioProp(daqProperty* property) +{ + // Value + daqBaseObject* tempObj = NULL; + daqProperty_getValue(property, &tempObj); + daqRatio* temp = NULL; + daqQueryInterface(tempObj, DAQ_RATIO_INTF_ID, &temp); + daqReleaseRef(tempObj); + + daqInt denominator = 0; + daqInt numerator = 0; + daqRatio_getDenominator(temp, &denominator); + daqRatio_getNumerator(temp, &numerator); + daqReleaseRef(temp); + + // Print both + printf("- Value:\n"); + printf(" -- denominator: %lld\n", denominator); + printf(" -- numerator: %lld\n", numerator); + + // Default value + daqProperty_getDefaultValue(property, &tempObj); + + if (tempObj == NULL) + return; + + daqQueryInterface(tempObj, DAQ_RATIO_INTF_ID, &temp); + daqReleaseRef(tempObj); + denominator = 0; + numerator = 0; + daqRatio_getDenominator(temp, &denominator); + daqRatio_getNumerator(temp, &numerator); + daqReleaseRef(temp); + // Print both + printf("- Default Value:\n"); + printf(" -- denominator: %lld\n", denominator); + printf(" -- numerator: %lld\n", numerator); +} + +void functionProp(daqProperty* property) +{ + printf("\nMethod\n"); +} + +void objectProp(daqProperty* property) +{ + daqBaseObject* tempObj = NULL; + daqProperty_getValue(property, &tempObj); + daqPropertyObject* temp = NULL; + daqQueryInterface(tempObj, DAQ_PROPERTY_OBJECT_INTF_ID, &temp); + daqReleaseRef(tempObj); + printf("-- Object property Value --\n"); + printPropertyObject(temp); + daqReleaseRef(temp); + + printf("\n"); + daqProperty_getDefaultValue(property, &tempObj); + + if (tempObj == NULL) + { + printf("---\n"); + return; + } + + daqQueryInterface(tempObj, DAQ_PROPERTY_OBJECT_INTF_ID, &temp); + daqReleaseRef(tempObj); + printf("-- Object property Default Value --\n"); + printPropertyObject(temp); + daqReleaseRef(temp); + printf("---\n"); +} + +void prop(daqProperty* property) +{ + // Check for others and display what they are as in functionProp + daqCoreType tempCt = daqCtUndefined; + daqProperty_getValueType(property, &tempCt); + switch(tempCt) + { + case daqCtStruct: + { + printf("\nOpenDAQ Struct\n"); + } + case daqCtEnumeration: + { + printf("\nOpenDAQ Enumeration\n"); + } + case daqCtList: + { + printf("\nOpenDAQ List\n"); + } + case daqCtDict: + { + printf("\nOpenDAQ Dictionary\n"); + } + default: + { + daqProperty* tempProp = NULL; + daqProperty_getReferencedProperty(property, &tempProp); + if (tempProp != NULL) + { + daqString* name = NULL; + daqProperty_getName(prop, &name); + printDaqFormattedString("\nReferenced property: %s\n", name); + daqReleaseRef(name); + determinePropertyTypeAndPrint(tempProp); + daqReleaseRef(tempProp); + } + else + { + break; + } + } + } +} + +void printSelectedValue(daqBaseObject* container, daqCoreType itemType, daqInteger* keyValue) +{ + daqInt key = 0; + daqInteger_getValue(keyValue, key); + + daqBaseObject* temp = NULL; + + if(DAQ_SUPPORTS_INTERFACE(container, DAQ_LIST_INTF_ID)) + { + daqList* tempContainer = NULL; + daqQueryInterface(container, DAQ_LIST_INTF_ID, &tempContainer); + daqList_getItemAt(tempContainer, key, &temp); + daqReleaseRef(tempContainer); + } + else + { + daqDict* tempContainer = NULL; + daqQueryInterface(container, DAQ_DICT_INTF_ID, &tempContainer); + daqDict_get(tempContainer, keyValue, &temp); + daqReleaseRef(tempContainer); + } + } int main() @@ -293,7 +520,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - displayPropertyTypes((daqPropertyObject*) simulator); + printPropertyObject((daqPropertyObject*) simulator); daqReleaseRef(simulator); daqReleaseRef(instance); From 300610db793be84e1a5df157879b437dc439b4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 30 Jan 2026 11:48:46 +0100 Subject: [PATCH 075/103] Moved custom struct type into its own example # Conflicts: # examples/CMakeLists.txt # examples/util_headers/daq_c_conversions.h --- examples/custom_struct_type_conversion.c | 185 +++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 examples/custom_struct_type_conversion.c diff --git a/examples/custom_struct_type_conversion.c b/examples/custom_struct_type_conversion.c new file mode 100644 index 0000000..b788536 --- /dev/null +++ b/examples/custom_struct_type_conversion.c @@ -0,0 +1,185 @@ +/* + * + */ +#include + + // Custom struct type +struct Coordinates +{ + int64_t x; + int64_t y; + int64_t z; +}; + +// Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager +void addCoordinateStructToTypeManager(daqContext* context) +{ + daqTypeManager* typeManager = NULL; + daqContext_getTypeManager(context, &typeManager); + + daqList* names = NULL; + daqList_createList(&names); + + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("x")); + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("y")); + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("z")); + + daqSimpleType* simpleType = NULL; + daqSimpleType_createSimpleType(&simpleType, daqCtInt); + + daqList* types = NULL; + daqList_createList(&types); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqReleaseRef(simpleType); + + daqStructType* newType = NULL; + daqStructType_createStructTypeNoDefaults(&newType, daq_toDaqString("DAQ_Coordinates"), names, types); + + daqTypeManager_addType(typeManager, (daqType*) newType); + daqReleaseRef(newType); + daqReleaseRef(names); + + daqList_createList(&names); + + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Error")); + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Ok")); + daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Warning")); + + daqEnumerationType* enumType = NULL; + daqEnumerationType_createEnumerationType(&enumType, daq_toDaqString("DAQ_ComponentStatusTypeEnum"), names, 0); + + daqTypeManager_addType(typeManager, (daqType*) enumType); + daqReleaseRef(enumType); + + daqBool check = False; + daqTypeManager_hasType(typeManager, daq_toDaqString("DAQ_Coordinates"), &check); + + daqBool enumCheck = False; + daqTypeManager_hasType(typeManager, daq_toDaqString("DAQ_ComponentStatusTypeEnum"), &enumCheck); + + if (check && enumCheck) + printf("\nNew types added.\n"); + else + printf("\nFailed to add new types.\n"); + + daqReleaseRef(types); + daqReleaseRef(names); + daqReleaseRef(typeManager); +} + +// Struct conversion +/* + * Conversion from and to daqStruct objects to C style structs. + * Warning: These types of conversions require prior knowledge of + * the struct structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ structs are implemented. + */ +struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) +{ + struct Coordinates native = { 0,0,0 }; + + daqBaseObject* tempObj = NULL; + + daqStruct_get(daq, daq_toDaqString("x"), tempObj); + native.x = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); + + daqStruct_get(daq, daq_toDaqString("y"), tempObj); + native.y = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); + + daqStruct_get(daq, daq_toDaqString("z"), tempObj); + native.z = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqReleaseRef(tempObj); + + return native; +} + +daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeManager) +{ + daqStructBuilder* builder = NULL; + daqStructBuilder_createStructBuilder(&builder, daq_toDaqString("DAQ_Coordinates"), typeManager); + + if (0) + { + // We can set values in the struct either via directly assigning them to the + // corresponding struct values or adding them in the correct sequence + // to a daqList and setting the list. + daqList* values = NULL; + daqList_createList(&values); + + daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.x)); + daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.y)); + daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.z)); + + daqStructBuilder_setFieldValues(builder, values); + daqReleaseRef(values); + } + else + { + daqStructBuilder_set(builder, daq_toDaqString("x"), (daqBaseObject*) daq_toDaqInteger(native.x)); + + daqStructBuilder_set(builder, daq_toDaqString("y"), (daqBaseObject*) daq_toDaqInteger(native.y)); + + daqStructBuilder_set(builder, daq_toDaqString("z"), (daqBaseObject*) daq_toDaqInteger(native.z)); + } + daqStruct* daq = NULL; + daqStructBuilder_build(builder, &daq); + daqReleaseRef(builder); + + return daq; +} + +// Enumeration conversion +/* + * Conversion from and to openDAQ String (daqEnumeration) core type + * from C language (enum ComponentStutesTypeEnum). + * Warning: These types of conversions require prior knowledge of + * the enumeration structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ enumeration is implemented. + */ +enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) +{ + enum ComponentStatusTypeEnum native = Error; + uint8_t temp; + daqEnumeration_getIntValue(daq, &temp); + + // Sanity check + if (temp < 2) + native = temp; + + return native; +} + +daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) +{ + daqEnumeration* daq = NULL; + daqInteger* temp = daq_toDaqInteger(native); + + daqEnumeration_createEnumerationWithIntValue(&daq, daq_toDaqString("ComponentStatusType"), temp, typeManager); + + daqReleaseRef(temp); + return daq; +} + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); + + return 0; +} \ No newline at end of file From 187ba2ec95e6ad84ce4e1af3c04db5191a594cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 4 Feb 2026 14:11:24 +0100 Subject: [PATCH 076/103] Fixed memory leak when using conversion into openDAQ --- examples/custom_struct_type_conversion.c | 101 +++++++++++++++++----- examples/util_headers/daq_c_conversions.h | 54 ++++++++++-- 2 files changed, 125 insertions(+), 30 deletions(-) diff --git a/examples/custom_struct_type_conversion.c b/examples/custom_struct_type_conversion.c index b788536..3784f9f 100644 --- a/examples/custom_struct_type_conversion.c +++ b/examples/custom_struct_type_conversion.c @@ -20,9 +20,16 @@ void addCoordinateStructToTypeManager(daqContext* context) daqList* names = NULL; daqList_createList(&names); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("x")); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("y")); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("z")); + daqString* temp = daq_toDaqString("x"); + + daqList_pushBack(names, (daqBaseObject*)temp); + daqReleaseRef(temp); + temp = daq_toDaqString("y"); + daqList_pushBack(names, (daqBaseObject*) temp); + daqReleaseRef(temp); + temp = daq_toDaqString("z"); + daqList_pushBack(names, (daqBaseObject*)temp); + daqReleaseRef(temp); daqSimpleType* simpleType = NULL; daqSimpleType_createSimpleType(&simpleType, daqCtInt); @@ -43,9 +50,15 @@ void addCoordinateStructToTypeManager(daqContext* context) daqList_createList(&names); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Error")); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Ok")); - daqList_pushBack(names, (daqBaseObject*) daq_toDaqString("Warning")); + temp = daq_toDaqString("Error"); + daqList_pushBack(names, (daqBaseObject*) temp); + daqReleaseRef(temp); + temp = daq_toDaqString("Ok"); + daqList_pushBack(names, (daqBaseObject*) temp); + daqReleaseRef(temp); + temp = daq_toDaqString("Warning"); + daqList_pushBack(names, (daqBaseObject*) temp); + daqReleaseRef(temp); daqEnumerationType* enumType = NULL; daqEnumerationType_createEnumerationType(&enumType, daq_toDaqString("DAQ_ComponentStatusTypeEnum"), names, 0); @@ -82,18 +95,31 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) struct Coordinates native = { 0,0,0 }; daqBaseObject* tempObj = NULL; + daqBaseObject* tempMid = NULL; - daqStruct_get(daq, daq_toDaqString("x"), tempObj); - native.x = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + daqString* temp = daq_toDaqString("x"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.x = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); daqReleaseRef(tempObj); + daqReleaseRef(temp); - daqStruct_get(daq, daq_toDaqString("y"), tempObj); - native.y = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + temp = daq_toDaqString("y"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.y = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); daqReleaseRef(tempObj); + daqReleaseRef(temp); - daqStruct_get(daq, daq_toDaqString("z"), tempObj); - native.z = daq_fromDaqInteger((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); + temp = daq_toDaqString("z"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.z = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); daqReleaseRef(tempObj); + daqReleaseRef(temp); return native; } @@ -103,6 +129,8 @@ daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeM daqStructBuilder* builder = NULL; daqStructBuilder_createStructBuilder(&builder, daq_toDaqString("DAQ_Coordinates"), typeManager); + daqString* temp = NULL; + daqInteger* tempInt = NULL; if (0) { // We can set values in the struct either via directly assigning them to the @@ -111,20 +139,39 @@ daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeM daqList* values = NULL; daqList_createList(&values); - daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.x)); - daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.y)); - daqList_pushBack(values, (daqBaseObject*) daq_toDaqInteger(native.z)); + tempInt = daq_toDaqInteger(native.x); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); + tempInt = daq_toDaqInteger(native.y); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); + tempInt = daq_toDaqInteger(native.z); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); daqStructBuilder_setFieldValues(builder, values); daqReleaseRef(values); } else { - daqStructBuilder_set(builder, daq_toDaqString("x"), (daqBaseObject*) daq_toDaqInteger(native.x)); - daqStructBuilder_set(builder, daq_toDaqString("y"), (daqBaseObject*) daq_toDaqInteger(native.y)); - - daqStructBuilder_set(builder, daq_toDaqString("z"), (daqBaseObject*) daq_toDaqInteger(native.z)); + temp = daq_toDaqString("x"); + tempInt = daq_toDaqInteger(native.x); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("y"); + tempInt = daq_toDaqInteger(native.y); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("z"); + tempInt = daq_toDaqInteger(native.z); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); } daqStruct* daq = NULL; daqStructBuilder_build(builder, &daq); @@ -158,11 +205,13 @@ enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) { daqEnumeration* daq = NULL; - daqInteger* temp = daq_toDaqInteger(native); + daqInteger* tempInt = daq_toDaqInteger(native); + daqString* temp = daq_toDaqString("ComponentStatusType"); - daqEnumeration_createEnumerationWithIntValue(&daq, daq_toDaqString("ComponentStatusType"), temp, typeManager); + daqEnumeration_createEnumerationWithIntValue(&daq, temp, tempInt, typeManager); daqReleaseRef(temp); + daqReleaseRef(tempInt); return daq; } @@ -175,8 +224,16 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); + daqContext* context = NULL; + daqComponent_getContext((daqComponent*) instance, &context); + addCoordinateStructToTypeManager(context); + daqReleaseRef(context); - + daqStructBuilder* builder = NULL; + + // Set a new property Object that is the new type and write its value and read it + // Might need to set up a custom simulator that will have daq_coordinates as a field + daqReleaseRef(simulator); daqReleaseRef(instance); daqReleaseRef(simulatorInstance); diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index fff212a..83473ed 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -129,7 +129,48 @@ void addCoordinateStructToTypeManager(daqContext* context) * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. */ -daqInt openDAQIntConversion(daqInteger* daq) +daqInt daq_fromDaqInteger(daqInteger* daq); +daqInteger* daq_toDaqInteger(daqInt native); + +// String conversion +/* + * Conversion from and to openDAQ String (daqString) core type + * from C language (const char*). + */ +char* daq_fromDaqString(daqString* daq); +daqString* daq_toDaqString(const char* native); + +// Bool conversion +/* + * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). + */ +uint8_t daq_fromDaqBoolean(daqBoolean* daq); +daqBoolean* daq_toDaqBoolean(uint8_t native); + +// Float conversion +/* + *Conversion from and to openDAQ String (daqFloat) core type from C language (double). + */ +daqFloat daq_fromDaqObject(daqFloatObject* daq); +daqFloatObject* daq_toDaqFloatObject(daqFloat native); + +// Complex number conversion +/* + * Conversion from and to openDAQ Complex (daqComplex) core type + * from C language (struct ComplexNumber). + */ +struct ComplexNumber daq_fromDaqComplex(daqComplexNumber* daq); +daqComplexNumber* daq_toDaqComplex(struct ComplexNumber* native); + +// Range conversion +/* + * Conversion from and to openDAQ String (daqRange) core type + * from C language (struct Range). + */ +struct Range daq_fromDaqRange(daqRange* daq); +daqRange* daq_toDaqRange(struct Range native); + +daqInt daq_fromDaqInteger(daqInteger* daq) { daqInt native = 0; daqInteger_getValue(daq, &native); @@ -171,17 +212,14 @@ daqBoolean* booleanOpenDAQConversion(uint8_t native) return daq; } -uint8_t openDAQBooleanConversion(daqBoolean* daq) +daqFloat daq_fromDaqObject(daqFloatObject* daq) { - uint8_t native = 0; - daqBoolean_getValue(daq, &native); + daqFloat native = 0; + daqFloatObject_getValue(daq, &native); return native; } -/* - *Conversion from and to openDAQ String (daqFloat) core type from C language (double). - */ -daqFloatObject* floatOpenDAQConversion(double native) +daqFloatObject* daq_toDaqFloatObject(daqFloat native) { daqFloatObject* daq = 0; daqFloatObject_createFloatObject(&daq, native); From d47e28bd52f85f716cc2adc4383cc3dc432075cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 09:23:41 +0100 Subject: [PATCH 077/103] Removed redundant enumeration addition and Updated comment in String C conversion --- examples/custom_struct_type_conversion.c | 18 ------------------ examples/util_headers/daq_c_conversions.h | 3 ++- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/examples/custom_struct_type_conversion.c b/examples/custom_struct_type_conversion.c index 3784f9f..264f289 100644 --- a/examples/custom_struct_type_conversion.c +++ b/examples/custom_struct_type_conversion.c @@ -48,24 +48,6 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(newType); daqReleaseRef(names); - daqList_createList(&names); - - temp = daq_toDaqString("Error"); - daqList_pushBack(names, (daqBaseObject*) temp); - daqReleaseRef(temp); - temp = daq_toDaqString("Ok"); - daqList_pushBack(names, (daqBaseObject*) temp); - daqReleaseRef(temp); - temp = daq_toDaqString("Warning"); - daqList_pushBack(names, (daqBaseObject*) temp); - daqReleaseRef(temp); - - daqEnumerationType* enumType = NULL; - daqEnumerationType_createEnumerationType(&enumType, daq_toDaqString("DAQ_ComponentStatusTypeEnum"), names, 0); - - daqTypeManager_addType(typeManager, (daqType*) enumType); - daqReleaseRef(enumType); - daqBool check = False; daqTypeManager_hasType(typeManager, daq_toDaqString("DAQ_Coordinates"), &check); diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 83473ed..ff646df 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -135,7 +135,8 @@ daqInteger* daq_toDaqInteger(daqInt native); // String conversion /* * Conversion from and to openDAQ String (daqString) core type - * from C language (const char*). + * from C language (const char*). The function that converts to native C return a non-owning pointer. + * Precautions should be taken, when using the received pointer. */ char* daq_fromDaqString(daqString* daq); daqString* daq_toDaqString(const char* native); From 652e12fbcdaeabfa93e9e826f5d6f182cf3e5fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 15 Jan 2026 15:59:30 +0100 Subject: [PATCH 078/103] Updated exaple to a working state It now displays the tree structure of the connected simulator --- examples/util_headers/daq_utils.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 3d7d86c..a32c603 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -157,7 +157,14 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + err = daqInstanceBuilder_build(instanceBuilder, instance); + + if (err != 0) + { + printf("Error occured when creating simulator device."); + return DAQ_FAILED(err); + } daqReleaseRef(modulePath); daqReleaseRef(instanceBuilder); From 8b9c0b538fc2e7d46c9aa69aed68fb6c1dde0d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 08:49:34 +0100 Subject: [PATCH 079/103] Updated example and removed dangling comments --- examples/util_headers/daq_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index a32c603..289bf0d 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -157,7 +157,7 @@ static inline daqErrCode setupSimulator(daqInstance** instance) daqInstanceBuilder_setGlobalLogLevel(instanceBuilder, daqLogLevelOff); - daqErrCode err = 0;//daqInstance_createInstanceFromBuilder(instance, instanceBuilder); + daqErrCode err = 0; err = daqInstanceBuilder_build(instanceBuilder, instance); if (err != 0) From 42adc9c11f2d24f864a7c5ed83ac73c1aa11d30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 16 Jan 2026 08:55:14 +0100 Subject: [PATCH 080/103] Added the new example --- examples/3_0_property_name_and_value_visualization.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/3_0_property_name_and_value_visualization.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c new file mode 100644 index 0000000..e69de29 From f73986366db9d39a7b86a1b03821bb44fb413931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 22 Jan 2026 15:06:00 +0100 Subject: [PATCH 081/103] Updated and added metada_c_converters --- ..._0_property_name_and_value_visualization.c | 432 ++++++++++++++++++ examples/metadata_c_conversion.c | Bin 0 -> 2414 bytes 2 files changed, 432 insertions(+) create mode 100644 examples/metadata_c_conversion.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index e69de29..f45e97c 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -0,0 +1,432 @@ +/* + * This example demonstrates how to search through properties, + * determine their (core)type and display their value. + */ + +#include + +enum PropertyType +{ + Property = 0, + BoolProprerty, + IntProperty, + FloatProperty, + StringProperty, + ListProperty, + DictProperty, + RatioProperty, + ObjectProperty, + ReferenceProperty, + FunctionProperty, + SelectionProperty, + SparseSelectionProperty, + StructSelectionProperty, + EnumerationProperty +}; + +int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) +{ + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(property, &propCoreType); + + if (propCoreType == coreType) + return 1; + return 0; +} + +// Missing handling for IntProp, SelectionProp, SparseSelectionProp, ReferenceProp, FunctionProp +// Note on universal attributes (default value, read-only, visible, ...): +// - They will be seen on all visualizations of properties +// - + +void determinePropertyTypeAndPrint(daqProperty* property) +{ + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(property, &propCoreType); + + switch(propCoreType) + { + case daqCtBool: + { + boolProp(property); + break; + } + case daqCtFloat: + { + floatProp(property); + break; + } + case daqCtString: + { + stringProp(property); + break; + } + case daqCtList: + { + listProp(property); + break; + } + case daqCtDict: + { + dictProp(property); + break; + } + case daqCtRatio: + { + ratioProp(property); + break; + } + case daqCtFunc: + { + // Function prop + functionProp(property); + break; + } + case daqCtProc: + { + // Function prop w/ no output + functionProp(property); + break; + } + case daqCtStruct: + { + structProp(property); + break; + } + case daqCtEnumeration: + { + enumProp(property); + break; + } + case daqCtInt: + { + // Check between selection, sparse selection and int property + daqBaseObject* selectionValues = NULL; + daqProperty_getSelectionValues(property, &selectionValues); + if (selectionValues == NULL) + { + intProp(property); + break; + } + + if(DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) + sparseSelectionProp(property); + else + selectionProp(property); + + break; + } + default: + { + prop(property); + break; + } + } +} + +// FunctionProperty (also handles ProcedureProperty) +void functionProp(daqProperty* property) +{ + daqCallableInfo* callInfo = NULL; + daqProperty_getCallableInfo(property, &callInfo); + + daqBool* visible = NULL; + daqProperty_getVisible(property, visible); + + +} + +// SparseSelectionProperty +void sparseSelectionProp(daqProperty* property) +{ + +} + +// SelectionProperty +void selectionProp(daqProperty* property) +{ + +} + +// Property +void prop(daqProperty* property) +{ + +} + +// BoolProperty +void boolProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if (propertyValueTypeCheck(property, daqCtBool)) + { + // We have to check the default value and the current value that the property is set to + } + daqBool* visible = NULL; + daqProperty_getVisible(property, visible); + + daqBaseObject* defaultVisibleObj = NULL; + daqProperty_getDefaultValue(property, &defaultVisibleObj); + + daqBool* defaultVisible = NULL; + daqQueryInterface(property, DAQ_BOOLEAN_INTF_ID, &defaultVisible); + + +} + +// FloatProperty +void floatProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if (propertyValueTypeCheck(property, daqCtFloat)) + { + // Min value, max value, default value, suggested values, visible + daqNumber* minValueNum = NULL; + daqProperty_getMinValue(property, &minValueNum); + + daqNumber* maxValueNum = NULL; + daqProperty_getMaxValue(property, &maxValueNum); + + daqBaseObject* defaultValueObj = NULL; + daqProperty_getDefaultValue(property, &defaultValueObj); + daqFloat defaultValue = 0; + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + + daqList* listOfRecommendedValues = NULL; + daqProperty_getSuggestedValues(property, &listOfRecommendedValues); + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + // Display min, max, default and suggested values + + } +} + +// IntProperty +void intProp(daqProperty* property) +{ + daqNumber* minValueNum = NULL; + daqProperty_getMinValue(property, &minValueNum); + + daqNumber* maxValueNum = NULL; + daqProperty_getMaxValue(property, maxValueNum); + + daqBaseObject* defaultValueObj = NULL; + daqProperty_getDefaultValue(property, &defaultValueObj); + + daqInt defaultValue = 0; + daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + + daqList* listOfSuggestedValues = NULL; + daqProperty_getSuggestedValues(property, &listOfSuggestedValues); + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + // We will display the name outside of this function + daqBool* readOnly = NULL; + daqProperty_getReadOnly(property, readOnly); + + // Display attributes if they are not empty + if (minValueNum != NULL && maxValueNum != NULL) + { + daqInt minValue = 0; + daqNumber_getIntValue(minValueNum, &minValue); + daqInt maxValue = 0; + daqNumber_getIntValue(maxValueNum, &maxValue); + + printf("Minimum acceptable value of the property is: %lld\n", minValue); + printf("Maximum acceptable value of the property is: %lld\n", maxValue); + } + + daqReleaseRef(listOfSuggestedValues); + daqReleaseRef(maxValueNum); + daqReleaseRef(minValueNum); +} + +// StringProperty +void stringProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + if(propertyValueTypeCheck(property, daqCtString)) + { + // Default value, suggested values, visible + } + daqBaseObject* defaultStringObj = NULL; + daqProperty_getDefaultValue(property, &defaultStringObj); + daqString* defaultString = NULL; + daqQueryInterface(defaultStringObj, DAQ_STRING_INTF_ID, &defaultString); + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqList* suggestedStrings = NULL; + daqProperty_getSuggestedValues(property, &suggestedStrings); + // Display +} + +// RatioProperty +void ratioProp(daqProperty* property) +{ + // Retrive metadata, check what type the value is... + daqBaseObject* defaultRatioObj = NULL; + daqProperty_getDefaultValue(property, &defaultRatioObj); + daqRatio* defaultRatio = NULL; + daqQueryInterface(defaultRatioObj, DAQ_RATIO_INTF_ID, &defaultRatio); + + // Min and max are included here + daqNumber* minValue = NULL; + daqNumber* maxValue = NULL; + daqProperty_getMinValue(property, &minValue); + daqProperty_getMaxValue(property, &maxValue); + + // When displaying min/max, there needs to be an emptiness check + + daqBool visible = False; + daqProperty_getVisible(property, &visible); + // Not sure about suggested values.... +} + +// ListProperty +void listProp(daqProperty* property) +{ + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); +} + +// DictProperty +void dictProp(daqProperty* property) +{ + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + + daqCoreType keyType = daqCtUndefined; + daqProperty_getKeyType(property, &keyType); +} + +// ObjectProperty +void objectProp(daqProperty* property) +{ + daqBool visible = False; + daqProperty_getVisible(property, &visible); + + daqBaseObject* defaultObjectObj = NULL; + daqProperty_getDefaultValue(property, &defaultObjectObj); + + // PropertyObject value + daqBaseObject* valueObj = NULL; + daqProperty_getValue(property, &valueObj); + + daqPropertyObject* defaultPropObj = NULL; + daqQueryInterface(defaultObjectObj, DAQ_PROPERTY_OBJECT_INTF_ID, &defaultPropObj); + + // Check if empty and then rerun the objectProp on the defaultPropObj +} + +// StructureProperty +void structProp(daqProperty* property) +{ + if(propertyValueTypeCheck(property, daqCtStruct)) + {} + // Value is Struct Core Type + daqBaseObject* defValueObj = NULL; + daqProperty_getDefaultValue(property, &defValueObj); + + daqStruct* defValue = NULL; + if (defValueObj) + daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); + + daqBool* visible = False; + daqProperty_getVisible(property, visible); + + +} + +// EnumerationProperty +void enumProp(daqProperty* property) +{ + daqBaseObject* selectionValueObj = NULL; + daqProperty_getSelectionValues(property, &selectionValueObj); + + +} + +void displayPropertyTypes(daqPropertyObject* propertyObject) +{ + // List of IProperty + daqList* properties = NULL; + daqPropertyObject_getVisibleProperties(propertyObject, &properties); + + daqSizeT count = 0; + daqList_getCount(properties, &count); + + if (count <= 0) + { + daqReleaseRef(properties); + return; + } + + for (daqSizeT i = 0; i< count; i++) + { + daqBaseObject* currentPropBaseObj = NULL; + daqList_getItemAt(properties, i, ¤tPropBaseObj); + + // Cast into IProperty + if (DAQ_SUPPORTS_INTERFACE(currentPropBaseObj, DAQ_PROPERTY_INTF_ID)) + { + daqProperty* prop = NULL; + daqQueryInterface(currentPropBaseObj, DAQ_PROPERTY_INTF_ID, &prop); + + daqCoreType propCoreType = daqCtUndefined; + daqProperty_getValueType(prop, &propCoreType); + if (propCoreType == daqCtObject) + { + // Write them up first + printCoreTypeObjects(prop); + } + else if (propCoreType == daqCtUndefined) + { + // Maybe needed (don't know yet) + } + daqString* propName = NULL; + daqProperty_getName(prop, &propName); + printDaqFormattedString("Property name: %s", propName); + daqBaseObject* propValueObj = NULL; + daqProperty_getValue(prop, &propValueObj); + daqConstCharPtr propValueObjStr = ""; + daqBaseObject_toString(propValueObj, propValueObjStr); + printf("\nValue of the property: %s\n", propValueObjStr); + + daqReleaseRef(propValueObj); + daqReleaseRef(propName); + daqReleaseRef(prop); + } + + daqReleaseRef(currentPropBaseObj); + } + daqReleaseRef(properties); +} + + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + displayPropertyTypes((daqPropertyObject*)simulator); + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); +} diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c new file mode 100644 index 0000000000000000000000000000000000000000..cf016352bd644bd899c386d329caed38c0ac5b69 GIT binary patch literal 2414 zcmbVN?~Btw5PhEo|A&AexkEfZhzR}wy($Re>G|Vp>Gg8GN-sInqzK3T>*{+uS+m(T zX_Szb?9RM-^LA$T_pf_cBF7vn)Hp|m1kd?D!w*ckQgL^MH6G#;FL4)l+$)a?Pw<#F z6+H@E(=*2eukZ=)-0m?~b8NU?(tqi`(gxWqGA!KgArTDGuN=52H|{s#t{&rLp7Pj` zqc~@H)@$eSrY=&2Z-0H#DB^<-;z5L2GD^i*B{NEJxE1@>F_1bTOCP<>@1&#CZiP&V zR@;A5rj4nn1rzhXGSd@>VjYMpq479wdovMDc^PAHAZX0m6u{%GS`x)>v8(4up77aIB^}5V4u>V z|CEtiox`29$;VKovY3|GSDj{MUa`8{S?c5#7^BvZ=DV~CV-^3UjOIgyOy6n9w z(&IksLNjVu5wnSvusVB9go1OVzs9_UIw5z}an|_Q${6M9razuG^Rk^?yL8hWiTmL# zITo%LcQKWR<)fK$#VNC*azB|>PJOO81vG_+Jx^VJQhdLiZiQlxomFz(%%1HIZaKec zSc;>jjolS}ENs#w%xdOTO?mply6L$E)D1ehIWx0PUDCIvLW)%|re<4cHPpXrqUa{L z=7frIQr4qxx?%LVR;{Zh#NE)hpXCs%_SOmWP_|MlTpL1}@%B0&otO1rjPJA4iTInl zo#-_#_$2tkc{AZFtI*Q&IHeY<-x--_(ANdj^|7)(mX9;!-N$o`?{?(4VqzxU`|eS5 H+uq_2V!wQi literal 0 HcmV?d00001 From d66dad18a9cf011dec2ec29c4a5df8f2c4b44ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 11:32:06 +0100 Subject: [PATCH 082/103] Adjusted file structure --- examples/conversions_demo.c | 11 +++++++++++ examples/getter_wrapper.c | 11 +++++++++++ examples/metadata_c_conversion.c | Bin 2414 -> 4234 bytes examples/setter_wrapper.c | 11 +++++++++++ 4 files changed, 33 insertions(+) create mode 100644 examples/conversions_demo.c create mode 100644 examples/getter_wrapper.c create mode 100644 examples/setter_wrapper.c diff --git a/examples/conversions_demo.c b/examples/conversions_demo.c new file mode 100644 index 0000000..da2d605 --- /dev/null +++ b/examples/conversions_demo.c @@ -0,0 +1,11 @@ +/* + * + */ + +#include + + +int main() +{ + +} diff --git a/examples/getter_wrapper.c b/examples/getter_wrapper.c new file mode 100644 index 0000000..2377e62 --- /dev/null +++ b/examples/getter_wrapper.c @@ -0,0 +1,11 @@ +/* + * + */ + +#include + + +int main() +{ + +} diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index cf016352bd644bd899c386d329caed38c0ac5b69..1631d003ec1b6c7bbaa85b8b640789351841ac15 100644 GIT binary patch literal 4234 zcmds4U2oGs5Zq@Z{(}jkaw^moAzt{BNJ2zWmC#anLWVz&aS{&isH&KLX6 zXOmDNDr6;b&UbsWv%9nBpFi%)iOgjrkzB}FCKAYV{0`-d3^2-1jOUklvXBIG`7e##RqZVqN`TlfP-kTb*2XLQ z^$;9ws0bA88}Aq`I~IGG%bAS92oWWsIlPWA>O)nwP~>PJ$0`zS$I<~tM~IKkA7)bM ziHXMUqTr~BdbJ;n`*+wqRDQ(ROXnkVX2%;_<9UwRtO`p^7-VKfHI5b-WH$EYNKTd4 zhFf~SzzA{ar#^oD(J>fzv37zwd4*p;${jIS%llQM?kc`Uu&S%Oh4{x{;mng4zel|f zYt)Kws)mVpAye?eDkADKGGgw)t9__VTi)QVhwC-!d;l9gM768#I!o`0nOf}^^De?i z$Atf;6$q+ryaW0e%0e$v_*9IniHkeuBX*>k(%&#sJ$Fvg&L-5-tv_wKE}Sp zFwb~uD;2giIg|#Nn_*srHPl0@c>}ipEGL))RAU=y01nL)a`LzHp^Gf&!>>bRKwnz& z7J1QD|9qKYWAjDzJYzIfxzLbL;IzzI0Npn+3{cC=9CjskM=J6u*kyEPDkiBs#rOm8 zGFA2(igBGaCSu(sYyQ}|$bHziWgGiYU8$#MS!M+Ionkyy<2G{E36-24FnidcW8mkC z6O4>8GKF6;#%U*2vza%nSoULf^_&Y^|EY&Zm_t^^>P~0F%{;ezd(rM=oI0LlYHlOp zX~kddF0Zb2uB@xg0T|)w!ku#)YdrUL6}8aJHlYuilT{h@DY&s=_b->TqLTd2+Ih1M zcpDUNi2B!^`(Nsv?td51I;zkC6ltzbm;n^a+}rh>k8eTIc+S>}N%}3!ROOZR)?`L~9Wh52 zWM_JIkpy}_!bQ&$WC;61gfkJ(F6@mwEwHC-WnIukZg$jfMt;3EoVjbS751XGli$qg{n?dnb-0Q DSInf= literal 2414 zcmbVN?~Btw5PhEo|A&AexkEfZhzR}wy($Re>G|Vp>Gg8GN-sInqzK3T>*{+uS+m(T zX_Szb?9RM-^LA$T_pf_cBF7vn)Hp|m1kd?D!w*ckQgL^MH6G#;FL4)l+$)a?Pw<#F z6+H@E(=*2eukZ=)-0m?~b8NU?(tqi`(gxWqGA!KgArTDGuN=52H|{s#t{&rLp7Pj` zqc~@H)@$eSrY=&2Z-0H#DB^<-;z5L2GD^i*B{NEJxE1@>F_1bTOCP<>@1&#CZiP&V zR@;A5rj4nn1rzhXGSd@>VjYMpq479wdovMDc^PAHAZX0m6u{%GS`x)>v8(4up77aIB^}5V4u>V z|CEtiox`29$;VKovY3|GSDj{MUa`8{S?c5#7^BvZ=DV~CV-^3UjOIgyOy6n9w z(&IksLNjVu5wnSvusVB9go1OVzs9_UIw5z}an|_Q${6M9razuG^Rk^?yL8hWiTmL# zITo%LcQKWR<)fK$#VNC*azB|>PJOO81vG_+Jx^VJQhdLiZiQlxomFz(%%1HIZaKec zSc;>jjolS}ENs#w%xdOTO?mply6L$E)D1ehIWx0PUDCIvLW)%|re<4cHPpXrqUa{L z=7frIQr4qxx?%LVR;{Zh#NE)hpXCs%_SOmWP_|MlTpL1}@%B0&otO1rjPJA4iTInl zo#-_#_$2tkc{AZFtI*Q&IHeY<-x--_(ANdj^|7)(mX9;!-N$o`?{?(4VqzxU`|eS5 H+uq_2V!wQi diff --git a/examples/setter_wrapper.c b/examples/setter_wrapper.c new file mode 100644 index 0000000..da2d605 --- /dev/null +++ b/examples/setter_wrapper.c @@ -0,0 +1,11 @@ +/* + * + */ + +#include + + +int main() +{ + +} From 0df6c6f9a8e02a608f8bc47686a1d38a65a6fd34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 30 Jan 2026 15:45:21 +0100 Subject: [PATCH 083/103] Updated some displays --- ..._0_property_name_and_value_visualization.c | 55 ++++++++++++++---- examples/metadata_c_conversion.c | Bin 4234 -> 4234 bytes 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c index f45e97c..e1427a2 100644 --- a/examples/3_0_property_name_and_value_visualization.c +++ b/examples/3_0_property_name_and_value_visualization.c @@ -189,9 +189,17 @@ void floatProp(daqProperty* property) daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); - daqFloat defaultValue = 0; - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); + + if (defaultValueObj != NULL) + { + daqFloatObject* defaultValue = NULL; + daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); + daqReleaseRef(defaultValueObj); + daqFloat value = 0; + daqFloatObject_getValue(defaultValue, &value); + printf("- Default Value: %f\n", value); + daqReleaseRef(defaultValue); + } daqList* listOfRecommendedValues = NULL; daqProperty_getSuggestedValues(property, &listOfRecommendedValues); @@ -199,7 +207,20 @@ void floatProp(daqProperty* property) daqBool visible = False; daqProperty_getVisible(property, &visible); // Display min, max, default and suggested values - + if(minValueNum != NULL) + { + daqFloat value = 0; + daqNumber_getFloatValue(minValueNum, &value); + printf("- Minimum Value: %f\n", value); + daqReleaseRef(minValueNum); + if (maxValueNum != NULL) + { + value = 0; + daqNumber_getFloatValue(maxValueNum, &value); + printf("- Maximum Value: %f\n", value); + daqReleaseRef(maxValueNum); + } + } } } @@ -215,10 +236,16 @@ void intProp(daqProperty* property) daqBaseObject* defaultValueObj = NULL; daqProperty_getDefaultValue(property, &defaultValueObj); - daqInt defaultValue = 0; - daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); + if (defaultValueObj != NULL) + { + daqInteger* defaultValueOb = NULL; + daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValueOb); + daqInt defaultValue = 0; + daqInteger_getValue(defaultValueOb, &defaultValue); + daqReleaseRef(defaultValueOb); + printf("- Default value: %lld\n", defaultValue); + } daqList* listOfSuggestedValues = NULL; daqProperty_getSuggestedValues(property, &listOfSuggestedValues); @@ -234,11 +261,15 @@ void intProp(daqProperty* property) { daqInt minValue = 0; daqNumber_getIntValue(minValueNum, &minValue); - daqInt maxValue = 0; - daqNumber_getIntValue(maxValueNum, &maxValue); - - printf("Minimum acceptable value of the property is: %lld\n", minValue); - printf("Maximum acceptable value of the property is: %lld\n", maxValue); + printf("- Minimum value: %lld\n", minValue); + daqReleaseRef(minValueNum); + if (maxValueNum != NULL) + { + daqInt maxValue = 0; + daqNumber_getIntValue(maxValueNum, &maxValue); + printf("- Maximum value: %lld\n", maxValue); + daqReleaseRef(maxValueNum); + } } daqReleaseRef(listOfSuggestedValues); diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c index 1631d003ec1b6c7bbaa85b8b640789351841ac15..f24764216356209f53bd27c991d10533eab9f00c 100644 GIT binary patch delta 26 hcmeBD>{8s2#mia5kjRk7kj{`gxtmjU^9{8s2#VelAP{5GNkjLP{;K&fj5X6uOWT!KvZf@k|WCj4IrU+L6 From 6e4ffe8617e3dcf46cbe0a0d298967eb430cec9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 2 Feb 2026 15:03:11 +0100 Subject: [PATCH 084/103] Added a simplified display for properties --- examples/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index c7c692a..7e8dab3 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -11,6 +11,13 @@ set(EXAMPLE_SOURCES read_with_formatted_timestamps.c print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c + custom_struct_type_conversion.c + tree_traversal.c + 3_0_property_name_and_value_visualization.c + metadata_c_conversion.c + conversions_demo.c + getter_wrapper.c + setter_wrapper.c simple_properties_display_handling.c) foreach(src ${EXAMPLE_SOURCES}) From 541282adf30fcf509ae563502919350d3b531e33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 2 Feb 2026 15:40:27 +0100 Subject: [PATCH 085/103] Updated structure for PR --- examples/conversions_demo.c | 11 ----------- examples/getter_wrapper.c | 11 ----------- examples/metadata_c_conversion.c | Bin 4234 -> 0 bytes examples/setter_wrapper.c | 11 ----------- 4 files changed, 33 deletions(-) delete mode 100644 examples/conversions_demo.c delete mode 100644 examples/getter_wrapper.c delete mode 100644 examples/metadata_c_conversion.c delete mode 100644 examples/setter_wrapper.c diff --git a/examples/conversions_demo.c b/examples/conversions_demo.c deleted file mode 100644 index da2d605..0000000 --- a/examples/conversions_demo.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} diff --git a/examples/getter_wrapper.c b/examples/getter_wrapper.c deleted file mode 100644 index 2377e62..0000000 --- a/examples/getter_wrapper.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} diff --git a/examples/metadata_c_conversion.c b/examples/metadata_c_conversion.c deleted file mode 100644 index f24764216356209f53bd27c991d10533eab9f00c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4234 zcmds4U2oGs5Zq@Z{(}jkaw?P-Azt{BNJ2zWmC#UlLWVz&aS{&isH&KLX6 z=a5h#Dr6;b&U<^av%7QWpFi%)iOgjrkzB}FCKAYV{0`-d3^2-1jOUklvXBI}{Fg{W zKFdqFD|gg~9#YJlVIJ>8sjKlT^&Q{|FYR?t%}-&;RVT8IC-ghR`VmG`tgsN*Dv%ej z>&ge&$Mwweo4`wo+2``Ut%kV_jmH zXFRo(3fr0-N)61-U>9Ky^^j^_gYQ493DyAB*hU(FL-T~3{Ox+^pbC13>kt*tlcu~y zU9{9cUuD?Xd|5ru7)@0z)Z`O5EwdIt_e~B1^fD`lyApRtD)K4VWp-vNC#gKe_yh1V zRsL#si$XIWd!)0VmwvjHgfg}m7Ecc z7#U+^inwBo(@(0bSvTxh?#JBKb1rQCryd@`hOCU$ovwzPMQ-oyMZb@6>Uff=xs8OU z6@Rz8yt>{wb5(B+zz9zluFY-i@jTXb)Iu{`hdyXd)@9VE;Kql&f4Q6$mE?cc&YSIk zw?XlS=zqO)|4Y5o``-n$jw;lLBF)taGk{{5d%K_W@dgx)=WMM=?itXw8_L(r?$PqJ z=<5cvCQr*`hxk_Qf3{7&<~rS(Tf4ngM5dKLETFk(y(j6nFw>P+)?1Sq_3eoLCBH#- zrspn_K<`Jm72tR@84se!VuFxpS`-_G0X-yyQyA zGm7hL)y(zP&5z%Hf7xv1;;A;-2zB}Wd6Sjh_t8z}mREM)++A<16rN5Osyj_*Udu09 CvZU4k diff --git a/examples/setter_wrapper.c b/examples/setter_wrapper.c deleted file mode 100644 index da2d605..0000000 --- a/examples/setter_wrapper.c +++ /dev/null @@ -1,11 +0,0 @@ -/* - * - */ - -#include - - -int main() -{ - -} From 0453cd2fed55dbb0735c97c56aa469e0aa86967f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 13:14:32 +0100 Subject: [PATCH 086/103] Cmake update --- examples/CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 7e8dab3..d30a6ac 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,12 +12,7 @@ set(EXAMPLE_SOURCES print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c custom_struct_type_conversion.c - tree_traversal.c 3_0_property_name_and_value_visualization.c - metadata_c_conversion.c - conversions_demo.c - getter_wrapper.c - setter_wrapper.c simple_properties_display_handling.c) foreach(src ${EXAMPLE_SOURCES}) From 85352f5a1ca890893e8b9dff3630acae474e2963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 13:50:47 +0100 Subject: [PATCH 087/103] Updated the structure of daq_c_conversions --- examples/custom_struct_type_conversion.c | 8 + examples/simple_properties_display_handling.c | 12 +- examples/util_headers/daq_c_conversions.h | 276 ++---------------- 3 files changed, 42 insertions(+), 254 deletions(-) diff --git a/examples/custom_struct_type_conversion.c b/examples/custom_struct_type_conversion.c index 264f289..28ce223 100644 --- a/examples/custom_struct_type_conversion.c +++ b/examples/custom_struct_type_conversion.c @@ -11,6 +11,14 @@ struct Coordinates int64_t z; }; +// Standard enum +enum ComponentStatusTypeEnum +{ + Error = 0, + Ok, + Warning +}; + // Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager void addCoordinateStructToTypeManager(daqContext* context) { diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index 843915f..cba8507 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -126,7 +126,7 @@ void intProp(daqProperty* property) daqProperty_getValue(property, &temp); daqInteger* value = NULL; daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - daqInt valueNative = openDAQIntConversion(value); + daqInt valueNative = daq_fromDaqInteger(value); daqReleaseRef(value); daqReleaseRef(temp); @@ -136,7 +136,7 @@ void intProp(daqProperty* property) if (temp != NULL) { daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - valueNative = openDAQIntConversion(value); + valueNative = daq_fromDaqInteger(value); daqReleaseRef(value); daqReleaseRef(temp); printf("- Default Value: %lld\n", valueNative); @@ -171,7 +171,7 @@ void intProp(daqProperty* property) { daqList_getItemAt(suggestedValues, i, &temp); value = daqQueryInterfacePtr(temp, DAQ_INTEGER_INTF_ID); - valueNative = openDAQIntConversion(value); + valueNative = daq_fromDaqInteger(value); daqReleaseRef(value); daqReleaseRef(temp); printf(" -- %lld\n", valueNative); @@ -234,7 +234,7 @@ void floatProp(daqProperty* property) { daqList_getItemAt(suggestedValues, i, &temp); value = daqQueryInterfacePtr(temp, DAQ_FLOAT_OBJECT_INTF_ID); - valueNative = openDAQFloatConversion(value); + valueNative = daq_fromDaqFloat(value); daqReleaseRef(value); daqReleaseRef(temp); @@ -473,7 +473,7 @@ void prop(daqProperty* property) if (tempProp != NULL) { daqString* name = NULL; - daqProperty_getName(prop, &name); + daqProperty_getName(tempProp, &name); printDaqFormattedString("\nReferenced property: %s\n", name); daqReleaseRef(name); determinePropertyTypeAndPrint(tempProp); @@ -490,7 +490,7 @@ void prop(daqProperty* property) void printSelectedValue(daqBaseObject* container, daqCoreType itemType, daqInteger* keyValue) { daqInt key = 0; - daqInteger_getValue(keyValue, key); + daqInteger_getValue(keyValue, &key); daqBaseObject* temp = NULL; diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index ff646df..f5d0770 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -1,130 +1,20 @@ #include +// Core struct type struct ComplexNumber { double real; double imaginary; }; +// Core struct type struct Range { double min; double max; }; -struct Coordinates -{ - int64_t x; - int64_t y; - int64_t z; -}; - -enum ComponentStatusTypeEnum -{ - Error = 0, - Ok, - Warning -}; - -// Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager -void addCoordinateStructToTypeManager(daqContext* context); - // Int conversion -daqInt openDAQIntConversion(daqInteger* daq); -daqInteger* intOpenDAQConversion(daqInt native); - -// String conversion -char* openDAQStringConversion(daqString* daq); -daqString* stringOpenDAQConversion(const char* native); - -// Bool conversion -daqBoolean* booleanOpenDAQConversion(uint8_t native); -uint8_t openDAQBooleanConversion(daqBoolean* daq); - -// Float conversion -daqFloatObject* floatOpenDAQConversion(double native); -double openDAQFloatConversion(daqFloatObject* daq); - -// Complex number conversion -struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq); -daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native); - -// Range conversion -struct Range openDAQRangeConversion(daqRange* daq); -daqRange* rangeOpenDAQConversion(struct Range native); - -// Struct conversion -struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq); -daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqTypeManager* typeManager); - -// Enumeration conversion -enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq); -daqEnumeration* EnumOpenDAQConversion(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager); - -void addCoordinateStructToTypeManager(daqContext* context) -{ - daqTypeManager* typeManager = NULL; - daqContext_getTypeManager(context, &typeManager); - - daqList* names = NULL; - daqList_createList(&names); - - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("x")); - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("y")); - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("z")); - - daqList* defaultValues = NULL; - daqList_createList(&defaultValues); - daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); - daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); - daqList_pushBack(defaultValues, (daqBaseObject*) intOpenDAQConversion(0)); - - daqSimpleType* simpleType = NULL; - daqSimpleType_createSimpleType(&simpleType, daqCtInt); - - daqList* types = NULL; - daqList_createList(&types); - daqList_pushBack(types, simpleType); - daqList_pushBack(types, simpleType); - daqList_pushBack(types, simpleType); - daqReleaseRef(simpleType); - - daqStructType* newType = NULL; - daqStructType_createStructType(&newType, stringOpenDAQConversion("DAQ_Coordinates"), names, defaultValues, types); - - daqTypeManager_addType(typeManager, (daqType*) newType); - daqReleaseRef(newType); - daqReleaseRef(names); - - daqList_createList(&names); - - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Error")); - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Ok")); - daqList_pushBack(names, (daqBaseObject*) stringOpenDAQConversion("Warning")); - - daqEnumerationType* enumType = NULL; - daqEnumerationType_createEnumerationType(&enumType, stringOpenDAQConversion("DAQ_ComponentStatusTypeEnum"), names, 0); - - daqTypeManager_addType(typeManager, (daqType*) enumType); - daqReleaseRef(enumType); - - daqBool check = False; - daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_Coordinates"), &check); - - daqBool enumCheck = False; - daqTypeManager_hasType(typeManager, stringOpenDAQConversion("DAQ_ComponentStatusTypeEnum"), &enumCheck); - - if(check && enumCheck) - printf("\nNew types added.\n"); - else - printf("\nFailed to add new types.\n"); - - daqReleaseRef(types); - daqReleaseRef(defaultValues); - daqReleaseRef(names); - daqReleaseRef(typeManager); -} - /* * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. @@ -152,8 +42,8 @@ daqBoolean* daq_toDaqBoolean(uint8_t native); /* *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ -daqFloat daq_fromDaqObject(daqFloatObject* daq); -daqFloatObject* daq_toDaqFloatObject(daqFloat native); +daqFloat daq_fromDaqFloat(daqFloatObject* daq); +daqFloatObject* daq_toDaqFloat(daqFloat native); // Complex number conversion /* @@ -178,70 +68,59 @@ daqInt daq_fromDaqInteger(daqInteger* daq) return native; } -daqInteger* intOpenDAQConversion(daqInt native) +daqInteger* daq_toDaqInteger(daqInt native) { daqInteger* daq = NULL; daqInteger_createInteger(&daq, native); return daq; } -/* - * Conversion from and to openDAQ String (daqString) core type - * from C language (const char*). - */ -daqString* stringOpenDAQConversion(const char* native) +char* daq_fromDaqString(daqString* daq) +{ + char* native = NULL; + daqString_getCharPtr(daq, &native); + return native; +} + +daqString* daq_toDaqString(const char* native) { daqString* daq = NULL; daqString_createString(&daq, native); return daq; } -char* openDAQStringConversion(daqString* daq) +uint8_t daq_fromDaqBoolean(daqBoolean* daq) { - char* native = NULL; - daqString_getCharPtr(daq, &native); + uint8_t native = 0; + daqBoolean_getValue(daq, &native); return native; } -/* - * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). - */ -daqBoolean* booleanOpenDAQConversion(uint8_t native) +daqBoolean* daq_toDaqBoolean(uint8_t native) { daqBoolean* daq = NULL; daqBoolean_createBoolean(&daq, native); return daq; } -daqFloat daq_fromDaqObject(daqFloatObject* daq) +daqFloat daq_fromDaqFloat(daqFloatObject* daq) { daqFloat native = 0; daqFloatObject_getValue(daq, &native); return native; } -daqFloatObject* daq_toDaqFloatObject(daqFloat native) +daqFloatObject* daq_toDaqFloat(daqFloat native) { daqFloatObject* daq = 0; daqFloatObject_createFloatObject(&daq, native); return daq; } -double openDAQFloatConversion(daqFloatObject* daq) +struct ComplexNumber daq_fromDaqComplex(daqComplexNumber* daq) { - double native = 0; - daqFloatObject_getValue(daq, &native); - return native; -} - -/* - * Conversion from and to openDAQ Complex (daqComplex) core type - * from C language (struct ComplexNumber). - */ -struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq) -{ - struct ComplexNumber native = {0, 0}; - double tempDouble= 0; + struct ComplexNumber native = { 0, 0 }; + double tempDouble = 0; daqComplexNumber_getReal(daq, &tempDouble); native.real = tempDouble; daqComplexNumber_getImaginary(daq, &tempDouble); @@ -249,20 +128,16 @@ struct ComplexNumber openDAQComplexConversion(daqComplexNumber* daq) return native; } -daqComplexNumber* complexOpenDAQConversion(struct ComplexNumber* native) +daqComplexNumber* daq_toDaqComplex(struct ComplexNumber* native) { daqComplexNumber* daq = NULL; daqComplexNumber_createComplexNumber(&daq, native->real, native->imaginary); return daq; } -/* - * Conversion from and to openDAQ String (daqRange) core type - * from C language (struct Range). - */ -struct Range openDAQRangeConversion(daqRange* daq) +struct Range daq_fromDaqRange(daqRange* daq) { - struct Range native = {0, 0}; + struct Range native = { 0, 0 }; daqNumber* temp; daqRange_getLowValue(daq, &temp); double intermmidiate = 0; @@ -277,14 +152,14 @@ struct Range openDAQRangeConversion(daqRange* daq) return native; } -daqRange* rangeOpenDAQConversion(struct Range native) +daqRange* daq_toDaqRange(struct Range native) { daqRange* daq = NULL; daqNumber* lowValue = NULL; daqNumber* highValue = NULL; - daqFloatObject* lowFloat = floatOpenDAQConversion(native.min); - daqFloatObject* highFloat = floatOpenDAQConversion(native.max); + daqFloatObject* lowFloat = daq_toDaqFloat(native.min); + daqFloatObject* highFloat = daq_toDaqFloat(native.max); daqQueryInterface(lowFloat, DAQ_NUMBER_INTF_ID, &lowValue); daqQueryInterface(highFloat, DAQ_NUMBER_INTF_ID, &highValue); @@ -299,98 +174,3 @@ daqRange* rangeOpenDAQConversion(struct Range native) daqReleaseRef(highValue); return daq; } - -/* - * Conversion from and to daqStruct objects to C style structs. - * Warning: These types of conversions require prior knowledge of - * the struct structure and its definition in C. For conversion - * from C to openDAQ a pointer to the TypeManager is needed because - * of the way openDAQ structs are implemented. - */ -struct Coordinates openDAQCoordinatesStructConversion(daqStruct* daq) -{ - struct Coordinates native = {0,0,0}; - - daqBaseObject* tempObj = NULL; - - daqStruct_get(daq, stringOpenDAQConversion("x"), tempObj); - native.x = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); - daqReleaseRef(tempObj); - - daqStruct_get(daq, stringOpenDAQConversion("y"), tempObj); - native.y = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); - daqReleaseRef(tempObj); - - daqStruct_get(daq, stringOpenDAQConversion("z"), tempObj); - native.z = openDAQIntConversion((daqInteger*) daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID)); - daqReleaseRef(tempObj); - - return native; -} - -daqStruct* coordinatesStructOpenDAQConversion(struct Coordinates native, daqTypeManager* typeManager) -{ - daqStructBuilder* builder = NULL; - daqStructBuilder_createStructBuilder(&builder, stringOpenDAQConversion("DAQ_Coordinates"), typeManager); - - if (0) - { - // We can set values in the struct either via directly assigning them to the - // corresponding struct values or adding them in the correct sequence - // to a daqList and setting the list. - daqList* values = NULL; - daqList_createList(&values); - - daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.x)); - daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.y)); - daqList_pushBack(values, (daqBaseObject*) intOpenDAQConversion(native.z)); - - daqStructBuilder_setFieldValues(builder, values); - daqReleaseRef(values); - } - else - { - daqStructBuilder_set(builder, stringOpenDAQConversion("x"), (daqBaseObject*) intOpenDAQConversion(native.x)); - - daqStructBuilder_set(builder, stringOpenDAQConversion("y"), (daqBaseObject*) intOpenDAQConversion(native.y)); - - daqStructBuilder_set(builder, stringOpenDAQConversion("z"), (daqBaseObject*) intOpenDAQConversion(native.z)); - } - daqStruct* daq = NULL; - daqStructBuilder_build(builder, &daq); - daqReleaseRef(builder); - - return daq; -} - -/* - * Conversion from and to openDAQ String (daqEnumeration) core type - * from C language (enum ComponentStutesTypeEnum). - * Warning: These types of conversions require prior knowledge of - * the enumeration structure and its definition in C. For conversion - * from C to openDAQ a pointer to the TypeManager is needed because - * of the way openDAQ enumeration is implemented. - */ -enum ComponentStatusTypeEnum openDAQEnumConversion(daqEnumeration* daq) -{ - enum ComponentStatusTypeEnum native = Error; - daqInt temp; - daqEnumeration_getIntValue(daq, &temp); - - // Sanity check - if (temp < 2) - native = temp; - - return native; -} - -daqEnumeration* EnumOpenDAQConversion(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) -{ - daqEnumeration* daq = NULL; - daqInteger* temp = intOpenDAQConversion(native); - - daqEnumeration_createEnumerationWithIntValue(&daq, stringOpenDAQConversion("ComponentStatusType"), temp, typeManager); - - daqReleaseRef(temp); - return daq; -} From 90e42873dd843605fc1749935e2d2f762877d88a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 15:23:37 +0100 Subject: [PATCH 088/103] Updated example structure --- examples/CMakeLists.txt | 7 +- examples/advanced_conversions_example.c | 160 ++++++++++++++++++++++ examples/basic_conversions_example.c | 22 +++ examples/metadata_read_example.c | 0 examples/util_headers/daq_example_utils.h | 66 +++++++++ examples/value_change_example.c | 0 examples/value_read_example.c | 0 7 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 examples/advanced_conversions_example.c create mode 100644 examples/basic_conversions_example.c create mode 100644 examples/metadata_read_example.c create mode 100644 examples/util_headers/daq_example_utils.h create mode 100644 examples/value_change_example.c create mode 100644 examples/value_read_example.c diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index d30a6ac..1ce280d 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,12 @@ set(EXAMPLE_SOURCES create_and_read_sample_rate_buffers.c custom_struct_type_conversion.c 3_0_property_name_and_value_visualization.c - simple_properties_display_handling.c) + simple_properties_display_handling.c + basic_conversions_example.c + advanced_conversions_example.c + metadata_read_example.c + value_read_example.c + value_change_example.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c new file mode 100644 index 0000000..ef30a36 --- /dev/null +++ b/examples/advanced_conversions_example.c @@ -0,0 +1,160 @@ +/* + * + */ +#include + + +struct Coordinates; + +enum ComponentStatusTypeEnum; + +// Struct conversion +/* + * Conversion from and to daqStruct objects to C style structs. + * Warning: These types of conversions require prior knowledge of + * the struct structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ structs are implemented. + */ +struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) +{ + struct Coordinates native = { 0,0,0 }; + + daqBaseObject* tempObj = NULL; + daqBaseObject* tempMid = NULL; + + daqString* temp = daq_toDaqString("x"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.x = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); + daqReleaseRef(tempObj); + daqReleaseRef(temp); + + temp = daq_toDaqString("y"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.y = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); + daqReleaseRef(tempObj); + daqReleaseRef(temp); + + temp = daq_toDaqString("z"); + daqStruct_get(daq, temp, tempObj); + tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + native.z = daq_fromDaqInteger((daqInteger*) tempMid); + daqReleaseRef(tempMid); + daqReleaseRef(tempObj); + daqReleaseRef(temp); + + return native; +} + +daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeManager) +{ + daqStructBuilder* builder = NULL; + daqStructBuilder_createStructBuilder(&builder, daq_toDaqString("DAQ_Coordinates"), typeManager); + + daqString* temp = NULL; + daqInteger* tempInt = NULL; + if (0) + { + // We can set values in the struct either via directly assigning them to the + // corresponding struct values or adding them in the correct sequence + // to a daqList and setting the list. + daqList* values = NULL; + daqList_createList(&values); + + tempInt = daq_toDaqInteger(native.x); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); + tempInt = daq_toDaqInteger(native.y); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); + tempInt = daq_toDaqInteger(native.z); + daqList_pushBack(values, (daqBaseObject*) tempInt); + daqReleaseRef(tempInt); + + daqStructBuilder_setFieldValues(builder, values); + daqReleaseRef(values); + } + else + { + + temp = daq_toDaqString("x"); + tempInt = daq_toDaqInteger(native.x); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("y"); + tempInt = daq_toDaqInteger(native.y); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("z"); + tempInt = daq_toDaqInteger(native.z); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + } + daqStruct* daq = NULL; + daqStructBuilder_build(builder, &daq); + daqReleaseRef(builder); + + return daq; +} + +// Enumeration conversion +/* + * Conversion from and to openDAQ String (daqEnumeration) core type + * from C language (enum ComponentStutesTypeEnum). + * Warning: These types of conversions require prior knowledge of + * the enumeration structure and its definition in C. For conversion + * from C to openDAQ a pointer to the TypeManager is needed because + * of the way openDAQ enumeration is implemented. + */ +enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) +{ + enum ComponentStatusTypeEnum native = Error; + int64_t temp; + daqEnumeration_getIntValue(daq, &temp); + + // Sanity check + if (temp < 2 && temp >= 0) + native = temp; + + return native; +} + +daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) +{ + daqEnumeration* daq = NULL; + daqInteger* tempInt = daq_toDaqInteger(native); + daqString* temp = daq_toDaqString("ComponentStatusType"); + + daqEnumeration_createEnumerationWithIntValue(&daq, temp, tempInt, typeManager); + + daqReleaseRef(temp); + daqReleaseRef(tempInt); + return daq; +} + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + advancedSimulatorAddition(&simulator, &instance); + + + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); + + return 0; +} \ No newline at end of file diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c new file mode 100644 index 0000000..02107f6 --- /dev/null +++ b/examples/basic_conversions_example.c @@ -0,0 +1,22 @@ +/* + * + */ +#include + +int main() +{ + daqInteger* daq = NULL; + daqInteger_createInteger(&daq, 7); + + int64_t native = daq_fromDaqInteger(daq); + + daqInteger* daqCreated = daq_toDaqInteger(native); + + uint8_t check = False; + daqBaseObject_equals(daq, daqCreated, &check); + + if (check) + printf("We create an openDAQ Object and converted it from and to C.\n"); + else + printf("Something went wrong.\n"); +} \ No newline at end of file diff --git a/examples/metadata_read_example.c b/examples/metadata_read_example.c new file mode 100644 index 0000000..e69de29 diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h new file mode 100644 index 0000000..35d9c08 --- /dev/null +++ b/examples/util_headers/daq_example_utils.h @@ -0,0 +1,66 @@ +#include + + // Custom struct type +struct Coordinates +{ + int64_t x; + int64_t y; + int64_t z; +}; + +// Standard enum +enum ComponentStatusTypeEnum +{ + Error = 0, + Ok, + Warning +}; + +// Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager +void addCoordinateStructToTypeManager(daqContext* context) +{ + daqTypeManager* typeManager = NULL; + daqContext_getTypeManager(context, &typeManager); + + daqList* names = NULL; + daqList_createList(&names); + + daqString* temp = daq_toDaqString("x"); + + daqList_pushBack(names, (daqBaseObject*)temp); + daqReleaseRef(temp); + temp = daq_toDaqString("y"); + daqList_pushBack(names, (daqBaseObject*) temp); + daqReleaseRef(temp); + temp = daq_toDaqString("z"); + daqList_pushBack(names, (daqBaseObject*)temp); + daqReleaseRef(temp); + + daqSimpleType* simpleType = NULL; + daqSimpleType_createSimpleType(&simpleType, daqCtInt); + + daqList* types = NULL; + daqList_createList(&types); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqList_pushBack(types, simpleType); + daqReleaseRef(simpleType); + + daqStructType* newType = NULL; + daqStructType_createStructTypeNoDefaults(&newType, daq_toDaqString("DAQ_Coordinates"), names, types); + + daqTypeManager_addType(typeManager, (daqType*) newType); + daqReleaseRef(newType); + daqReleaseRef(names); + daqReleaseRef(types); + daqReleaseRef(typeManager); +} + +void advancedSimulatorAddition(daqDevice** device, daqInstance** instance) +{ + addSimulator(device, instance); + + daqContext* context = NULL; + daqComponent_getContext((daqComponent*) *instance, &context); + addCoordinateStructToTypeManager(context); +} \ No newline at end of file diff --git a/examples/value_change_example.c b/examples/value_change_example.c new file mode 100644 index 0000000..e69de29 diff --git a/examples/value_read_example.c b/examples/value_read_example.c new file mode 100644 index 0000000..e69de29 From 40085e862a1d31b6909327ee7084a450c563e5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 5 Feb 2026 16:29:50 +0100 Subject: [PATCH 089/103] Basic_conversion_example finished --- examples/basic_conversions_example.c | 51 +++++++++++++++++------ examples/util_headers/daq_example_utils.h | 4 +- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c index 02107f6..b4dd9f9 100644 --- a/examples/basic_conversions_example.c +++ b/examples/basic_conversions_example.c @@ -1,22 +1,49 @@ /* - * + * Example that displays Conversions between native C types and their openDAQ equvalents. */ #include int main() { - daqInteger* daq = NULL; - daqInteger_createInteger(&daq, 7); + // Integer example + int64_t i = 10; + daqInteger* daqInt = daq_toDaqInteger(i); + int64_t i2 = daq_fromDaqInteger(daqInt); + printf("Integer is equal: %s\n", i == i2 ? "True": "False"); + daqReleaseRef(daqInt); - int64_t native = daq_fromDaqInteger(daq); - - daqInteger* daqCreated = daq_toDaqInteger(native); + // Float example + double j = 1.0; + daqFloatObject* daqFloat = daq_toDaqFloat(j); + double j2 = daq_fromDaqFloat(daqFloat); + printf("Float is equal: %s\n", j == j2 ? "True" : "False"); + daqReleaseRef(daqFloat); - uint8_t check = False; - daqBaseObject_equals(daq, daqCreated, &check); + // String example + char* k = "check"; + daqString* daqStr = daq_toDaqString(k); + char* k2 = daq_fromDaqString(daqStr); + printf("String is equal: %s\n", strcmp(k, k2) == 0 ? "True" : "False"); + daqReleaseRef(daqStr); - if (check) - printf("We create an openDAQ Object and converted it from and to C.\n"); - else - printf("Something went wrong.\n"); + // Bool example + uint8_t l = True; + daqBoolean* daqBl = daq_toDaqBoolean(l); + uint8_t l2 = daq_fromDaqBoolean(daqBl); + printf("Boolean is equal: %s\n", l == l2 ? "True" : "False"); + daqReleaseRef(daqBl); + + // Complex Number example + struct ComplexNumber m = { 1,5 }; + daqComplexNumber* daqComplex = daq_toDaqComplex(&m); + struct ComplexNumber m2 = daq_fromDaqComplex(daqComplex); + printf("Complex Number is equal: %s\n", ((m.imaginary == m2.imaginary) && (m.real == m2.real)) ? "True" : "False"); + daqReleaseRef(daqComplex); + + // Range example + struct Range n = { 1,10 }; + daqRange* daqRng = daq_toDaqRange(n); + struct Range n2 = daq_fromDaqRange(daqRng); + printf("Range is equal: %s\n", ((n.max == n2.max) && (n.min == n2.min)) ? "True" : "False"); + daqReleaseRef(daqRng); } \ No newline at end of file diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index 35d9c08..0b2d216 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -47,7 +47,9 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(simpleType); daqStructType* newType = NULL; - daqStructType_createStructTypeNoDefaults(&newType, daq_toDaqString("DAQ_Coordinates"), names, types); + daqString* typeName = daq_toDaqString("DAQ_Coordinates"); + daqStructType_createStructTypeNoDefaults(&newType, typeName, names, types); + daqReleaseRef(typeName); daqTypeManager_addType(typeManager, (daqType*) newType); daqReleaseRef(newType); From 28c6c75934d7edcd89c11430059f4efa1d17398d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 6 Feb 2026 13:48:59 +0100 Subject: [PATCH 090/103] Advanced conversion examples done --- examples/advanced_conversions_example.c | 122 +++++++++++++--------- examples/util_headers/daq_example_utils.h | 52 +++++++-- 2 files changed, 119 insertions(+), 55 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index ef30a36..bede4a2 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -24,24 +24,25 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) daqBaseObject* tempMid = NULL; daqString* temp = daq_toDaqString("x"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + daqStruct_get(daq, temp, &tempObj); + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); native.x = daq_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); daqReleaseRef(temp); temp = daq_toDaqString("y"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + daqStruct_get(daq, temp, &tempObj); + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); native.y = daq_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); daqReleaseRef(temp); temp = daq_toDaqString("z"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); + daqStruct_get(daq, temp, & + tempObj); + daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); native.z = daq_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); @@ -57,48 +58,25 @@ daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeM daqString* temp = NULL; daqInteger* tempInt = NULL; - if (0) - { - // We can set values in the struct either via directly assigning them to the - // corresponding struct values or adding them in the correct sequence - // to a daqList and setting the list. - daqList* values = NULL; - daqList_createList(&values); - - tempInt = daq_toDaqInteger(native.x); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - tempInt = daq_toDaqInteger(native.y); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - tempInt = daq_toDaqInteger(native.z); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - - daqStructBuilder_setFieldValues(builder, values); - daqReleaseRef(values); - } - else - { - temp = daq_toDaqString("x"); - tempInt = daq_toDaqInteger(native.x); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daq_toDaqString("y"); - tempInt = daq_toDaqInteger(native.y); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daq_toDaqString("z"); - tempInt = daq_toDaqInteger(native.z); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - } + temp = daq_toDaqString("x"); + tempInt = daq_toDaqInteger(native.x); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("y"); + tempInt = daq_toDaqInteger(native.y); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("z"); + tempInt = daq_toDaqInteger(native.z); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + daqStruct* daq = NULL; daqStructBuilder_build(builder, &daq); daqReleaseRef(builder); @@ -118,7 +96,7 @@ daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeM enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) { enum ComponentStatusTypeEnum native = Error; - int64_t temp; + int64_t temp = -1; daqEnumeration_getIntValue(daq, &temp); // Sanity check @@ -145,12 +123,58 @@ int main() { daqInstance* simulatorInstance = NULL; setupSimulator(&simulatorInstance); + addCustomTypes(simulatorInstance); + addCustomStructAndEnumProp(simulatorInstance); daqInstance* instance = NULL; daqDevice* simulator = NULL; - advancedSimulatorAddition(&simulator, &instance); + addSimulator(&simulator, &instance); + daqComponentStatusContainer* statusContainer = NULL; + daqComponent_getStatusContainer((daqComponent*)simulator, &statusContainer); + daqString* tempStr = daq_toDaqString("ConnectionStatus"); + daqEnumeration* temp = NULL; + daqComponentStatusContainer_getStatus(statusContainer, tempStr, &temp); + daqReleaseRef(tempStr); + enum ComponentStatusTypeEnum status = daq_fromDaqCompStatusTypeEnum(temp); + printf("Status is: %d\n", status); + daqReleaseRef(temp); + + daqProperty* currentPosition = NULL; + daqStruct* tempStruct = NULL; + struct Coordinates nativeCoordinates = {4, 4, 4}; + daqTypeManager* typeMan = NULL; + daqContext* context = NULL; + daqComponent_getContext((daqComponent*)simulator, &context); + daqContext_getTypeManager(context, &typeMan); + tempStr = daq_toDaqString("DAQ_CurrentPosition"); + daqPropertyObject_getProperty((daqPropertyObject*) simulator,tempStr, ¤tPosition); + daqReleaseRef(tempStr); + daqBaseObject* tempObj = NULL; + daqProperty_getValue(currentPosition, &tempObj); + daqReleaseRef(currentPosition); + if (tempObj != NULL) + { + daqQueryInterface(tempObj, DAQ_STRUCT_INTF_ID, &tempStruct); + daqReleaseRef(tempObj); + nativeCoordinates = daq_fromDaqCoordinates(tempStruct); + + printf("x: %lld,\ny: %lld,\nz: %lld\n", nativeCoordinates.x, nativeCoordinates.y, nativeCoordinates.z); + + daqStruct* tempStruct2 = daq_toDaqCoordinates(nativeCoordinates, typeMan); + uint8_t check = False; + daqBaseObject_equals(tempStruct, tempStruct2, &check); + + if (check) + printf("OpenDAQ structs are the same after being translated to C and back."); + else + printf("Structs are different!"); + + daqReleaseRef(typeMan); + daqReleaseRef(tempStruct); + daqReleaseRef(tempStruct2); + } daqReleaseRef(simulator); daqReleaseRef(instance); diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index 0b2d216..166aa43 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -11,9 +11,9 @@ struct Coordinates // Standard enum enum ComponentStatusTypeEnum { - Error = 0, - Ok, - Warning + Ok = 0, + Warning, + Error }; // Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager @@ -58,11 +58,51 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(typeManager); } -void advancedSimulatorAddition(daqDevice** device, daqInstance** instance) +void addCustomStructAndEnumProp(daqDevice* device) { - addSimulator(device, instance); + daqTypeManager* typeMan = NULL; + daqContext* context = NULL; + daqComponent_getContext((daqComponent*)device, &context); + daqContext_getTypeManager(context, &typeMan); + daqStructBuilder* builder = NULL; + daqString* nameTemp = daq_toDaqString("DAQ_Coordinates"); + daqStructBuilder_createStructBuilder(&builder, nameTemp, typeMan); + daqReleaseRef(nameTemp); + daqInteger* tempInt = NULL; + daqString* temp = NULL; + + temp = daq_toDaqString("x"); + tempInt = daq_toDaqInteger(2); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + temp = daq_toDaqString("y"); + tempInt = daq_toDaqInteger(3); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + temp = daq_toDaqString("z"); + tempInt = daq_toDaqInteger(4); + daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); + daqReleaseRef(temp); + daqReleaseRef(tempInt); + + daqStruct* coordinatesStruct = NULL; + daqStructBuilder_build(builder, &coordinatesStruct); + + nameTemp = daq_toDaqString("DAQ_CurrentPosition"); + daqPropertyBuilder* structBuilder = NULL; + daqPropertyBuilder_createStructPropertyBuilder(&structBuilder, nameTemp,coordinatesStruct); + daqProperty* structProp = NULL; + daqPropertyBuilder_build(structBuilder, &structProp); + daqPropertyObject_addProperty((daqPropertyObject*)device, structProp); +} + +void addCustomTypes(daqInstance* instance) +{ daqContext* context = NULL; - daqComponent_getContext((daqComponent*) *instance, &context); + daqComponent_getContext(instance, &context); addCoordinateStructToTypeManager(context); } \ No newline at end of file From da3fb6081eca1afb7d7baeeed27e36382e7935f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 6 Feb 2026 16:24:31 +0100 Subject: [PATCH 091/103] Added a few property parsing functions (need to be moved into their own header) --- examples/advanced_conversions_example.c | 4 +- examples/metadata_read_example.c | 23 +++ examples/util_headers/daq_utils.h | 192 ++++++++++++++++++++++++ 3 files changed, 218 insertions(+), 1 deletion(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index bede4a2..d1522cf 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -144,10 +144,12 @@ int main() daqProperty* currentPosition = NULL; daqStruct* tempStruct = NULL; struct Coordinates nativeCoordinates = {4, 4, 4}; - daqTypeManager* typeMan = NULL; + daqContext* context = NULL; daqComponent_getContext((daqComponent*)simulator, &context); + daqTypeManager* typeMan = NULL; daqContext_getTypeManager(context, &typeMan); + tempStr = daq_toDaqString("DAQ_CurrentPosition"); daqPropertyObject_getProperty((daqPropertyObject*) simulator,tempStr, ¤tPosition); daqReleaseRef(tempStr); diff --git a/examples/metadata_read_example.c b/examples/metadata_read_example.c index e69de29..86a865d 100644 --- a/examples/metadata_read_example.c +++ b/examples/metadata_read_example.c @@ -0,0 +1,23 @@ +/* + * + */ +#include + +// + +int main() +{ + daqInstance* simulatorInstance = NULL; + setupSimulator(&simulatorInstance); + + daqInstance* instance = NULL; + daqDevice* simulator = NULL; + addSimulator(&simulator, &instance); + + + + daqReleaseRef(simulator); + daqReleaseRef(instance); + daqReleaseRef(simulatorInstance); + return 0; +} \ No newline at end of file diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 289bf0d..7b96d24 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -377,4 +377,196 @@ static inline int checkIsLinearRule(daqDataRule* dataRule) daqDataRule_getType(dataRule, &dataRuleType); return dataRuleType == daqDataRuleTypeLinear; +} + +struct PropFields +{ + daqCoreType valueType; + uint8_t name; + uint8_t description; + uint8_t unit; + uint8_t minValue; + uint8_t maxValue; + uint8_t defaultValue; + uint8_t visible; + uint8_t realOnly; + uint8_t selectionValue; + uint8_t suggestedValues; + uint8_t refProp; + uint8_t callableInfo; +}; + +void printCommonMetadata(daqProperty* property) +{ + daqBool visible = False; + daqBool readOnly = False; + daqProperty_getVisible(property, &visible); + daqProperty_getReadOnly(property, &readOnly); + + printf("- Visible: %s\n", visible == True ? "True" : "False"); + printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +} + +void printIntProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqInteger* value = NULL; + + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + int64_t valueNative = daq_fromDaqInteger(value); + printf("- Default value: %lld\n", valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + // Min/Max value + daqNumber* edgeCase = NULL; + int64_t minNativeValue = 0; + int64_t maxNativeValue = 0; + daqProperty_getMinValue(property, &edgeCase); + if(edgeCase != NULL) + { + daqNumber_getIntValue(edgeCase, &minNativeValue); + printf("- Minimal value: %lld\n", minNativeValue); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if(edgeCase!=NULL) + { + daqNumber_getIntValue(edgeCase, &maxNativeValue); + printf("- Maximum value: %lld\n", maxNativeValue); + daqReleaseRef(edgeCase); + } + } + + // Suggested values + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Suggested values:\n"); + + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for (daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + valueNative = daq_fromDaqFloat(value); + daqReleaseRef(value); + daqReleaseRef(temp); + printf(" -- %lld\n", valueNative); + } + daqReleaseRef(suggestedValues); + } + } + + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + int64_t valueNative = daq_fromDaqInteger(value); + printf("- Value: %lld\n", valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + } +} + +void printBoolProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqBoolean* value = NULL; + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqBool valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default value: %s\n", valueNative == True ? "True" : "False"); + } + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqBool valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Value: %s\n", valueNative); + } +} + +void printFloatProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqFloatObject* value = NULL; + if (metadata) + { + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + double valueNative = 0; + daqFloatObject_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default value: %f\n", valueNative); + + // Min/Max value + daqNumber* edgeCase = NULL; + double minNativeValue = 0; + double maxNativeValue = 0; + daqProperty_getMinValue(property, &edgeCase); + if(edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &minNativeValue); + printf("- Minimal value: %f\n", minNativeValue); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &maxNativeValue); + printf("- Maximum value: %f\n", maxNativeValue); + daqReleaseRef(edgeCase); + } + } + + // Suggested values + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Suggested values:\n"); + + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for(daqSizeT i = 0; i Date: Mon, 9 Feb 2026 17:01:20 +0100 Subject: [PATCH 092/103] Preperation for rewrite --- examples/CMakeLists.txt | 1 - examples/simple_properties_display_handling.c | 6 +- examples/util_headers/daq_property_utils.h | 284 ++++++++++++++++++ examples/util_headers/daq_utils.h | 192 ------------ 4 files changed, 287 insertions(+), 196 deletions(-) create mode 100644 examples/util_headers/daq_property_utils.h diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 1ce280d..4e61eeb 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,7 +12,6 @@ set(EXAMPLE_SOURCES print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c custom_struct_type_conversion.c - 3_0_property_name_and_value_visualization.c simple_properties_display_handling.c basic_conversions_example.c advanced_conversions_example.c diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index cba8507..1268ea2 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -2,7 +2,7 @@ * Example that show how to properly display all relevant attributes and * metadata in properties. */ -#include +#include void determinePropertyTypeAndPrint(daqProperty* property); void printPropertyObject(daqPropertyObject* propertyObject); @@ -116,7 +116,7 @@ void printMetadata(daqProperty* property) daqProperty_getVisible(property, &visible); daqProperty_getReadOnly(property, &readOnly); - printf("\n- Visible: %s\n", visible == True ? "True" : "False"); + printf("- Visible: %s\n", visible == True ? "True" : "False"); printf("- Read only: %s\n", readOnly == True ? "True" : "False"); } @@ -130,7 +130,7 @@ void intProp(daqProperty* property) daqReleaseRef(value); daqReleaseRef(temp); - printf("- Value %lld\n", valueNative); + printf("- Value: %lld\n", valueNative); daqProperty_getDefaultValue(property, &temp); if (temp != NULL) diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h new file mode 100644 index 0000000..5b158d7 --- /dev/null +++ b/examples/util_headers/daq_property_utils.h @@ -0,0 +1,284 @@ +#include + +struct PropFields +{ + daqCoreType valueType; + uint8_t name; + uint8_t description; + uint8_t unit; + uint8_t minValue; + uint8_t maxValue; + uint8_t defaultValue; + uint8_t visible; + uint8_t realOnly; + uint8_t selectionValue; + uint8_t suggestedValues; + uint8_t refProp; + uint8_t callableInfo; +}; + +void printCommonMetadata(daqProperty* property) +{ + daqBool visible = False; + daqBool readOnly = False; + daqProperty_getVisible(property, &visible); + daqProperty_getReadOnly(property, &readOnly); + + printf("- Visible: %s\n", visible == True ? "True" : "False"); + printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +} + +void printIntProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqInteger* value = NULL; + + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + int64_t valueNative = daq_fromDaqInteger(value); + printf("- Default value: %lld\n", valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + // Min/Max value + daqNumber* edgeCase = NULL; + int64_t minNativeValue = 0; + int64_t maxNativeValue = 0; + daqProperty_getMinValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getIntValue(edgeCase, &minNativeValue); + printf("- Minimal value: %lld\n", minNativeValue); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getIntValue(edgeCase, &maxNativeValue); + printf("- Maximum value: %lld\n", maxNativeValue); + daqReleaseRef(edgeCase); + } + } + + // Suggested values + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Suggested values:\n"); + + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for (daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + valueNative = daq_fromDaqFloat(value); + daqReleaseRef(value); + daqReleaseRef(temp); + printf(" -- %lld\n", valueNative); + } + daqReleaseRef(suggestedValues); + } + } + + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); + int64_t valueNative = daq_fromDaqInteger(value); + printf("- Value: %lld\n", valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + } +} + +void printBoolProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqBoolean* value = NULL; + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqBool valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default value: %s\n", valueNative == True ? "True" : "False"); + } + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); + daqBool valueNative = False; + daqBoolean_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Value: %s\n", valueNative == True ? "True" : "False"); + } +} + +void printFloatProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqFloatObject* value = NULL; + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + double valueNative = 0; + daqFloatObject_getValue(value, &valueNative); + daqReleaseRef(value); + daqReleaseRef(temp); + + printf("- Default value: %f\n", valueNative); + + // Min/Max value + daqNumber* edgeCase = NULL; + double minNativeValue = 0; + double maxNativeValue = 0; + daqProperty_getMinValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &minNativeValue); + printf("- Minimal value: %f\n", minNativeValue); + daqReleaseRef(edgeCase); + daqProperty_getMaxValue(property, &edgeCase); + if (edgeCase != NULL) + { + daqNumber_getFloatValue(edgeCase, &maxNativeValue); + printf("- Maximum value: %f\n", maxNativeValue); + daqReleaseRef(edgeCase); + } + } + + // Suggested values + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Suggested values:\n"); + + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for (daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + valueNative = daq_fromDaqFloat(value); + daqReleaseRef(value); + daqReleaseRef(temp); + printf(" -- %f\n", valueNative); + } + daqReleaseRef(suggestedValues); + } + } + if (val) + { + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); + double valueNative = daq_fromDaqFloat(value); + daqReleaseRef(temp); + daqReleaseRef(value); + + printf("- Value: %f\n", valueNative); + } +} + +void printStringProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqString* value = NULL; + + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Default value: %s\n", value); + daqReleaseRef(temp); + daqReleaseRef(value); + + // Suggested values + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + if (suggestedValues != NULL) + { + printf("- Sugggested values:\n"); + daqSizeT count = 0; + daqList_getCount(suggestedValues, &count); + for (daqSizeT i = 0; i < count; i++) + { + daqList_getItemAt(suggestedValues, i, &temp); + daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString(" -- %s\n", value); + daqReleaseRef(temp); + daqReleaseRef(value); + } + daqReleaseRef(suggestedValues); + } + } + + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("- Value: %s\n", value); + daqReleaseRef(temp); + daqReleaseRef(value); + } +} + +void printRatioProp(daqProperty* property, daqBool metadata, daqBool val) +{ + daqBaseObject* temp = NULL; + daqRatio* value = NULL; + struct Range range = { 1, 1 }; + + if (metadata) + { + printCommonMetadata(property); + + // Default value + daqProperty_getDefaultValue(property, &temp); + daqQueryInterface(temp, DAQ_RATIO_INTF_ID, &value); + range = daq_fromDaqRange(value); + daqReleaseRef(temp); + daqReleaseRef(value); + + printf("- Default value:\n"); + printf(" -- Denominator: %f\n", range.max); + printf(" -- Numerator: %f\n", range.min); + } + if (val) + { + // Value + daqProperty_getValue(property, &temp); + daqQueryInterface(temp, DAQ_RATIO_INTF_ID, &value); + range = daq_fromDaqRange(value); + daqReleaseRef(temp); + daqReleaseRef(value); + + printf("- Value:\n"); + printf(" -- Denominator: %lld\n", range.max); + printf(" -- Numerator: %lld\n", range.min); + } +} diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index 7b96d24..ea1be61 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -378,195 +378,3 @@ static inline int checkIsLinearRule(daqDataRule* dataRule) return dataRuleType == daqDataRuleTypeLinear; } - -struct PropFields -{ - daqCoreType valueType; - uint8_t name; - uint8_t description; - uint8_t unit; - uint8_t minValue; - uint8_t maxValue; - uint8_t defaultValue; - uint8_t visible; - uint8_t realOnly; - uint8_t selectionValue; - uint8_t suggestedValues; - uint8_t refProp; - uint8_t callableInfo; -}; - -void printCommonMetadata(daqProperty* property) -{ - daqBool visible = False; - daqBool readOnly = False; - daqProperty_getVisible(property, &visible); - daqProperty_getReadOnly(property, &readOnly); - - printf("- Visible: %s\n", visible == True ? "True" : "False"); - printf("- Read only: %s\n", readOnly == True ? "True" : "False"); -} - -void printIntProp(daqProperty* property, daqBool metadata, daqBool val) -{ - daqBaseObject* temp = NULL; - daqInteger* value = NULL; - - if (metadata) - { - printCommonMetadata(property); - - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - int64_t valueNative = daq_fromDaqInteger(value); - printf("- Default value: %lld\n", valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - // Min/Max value - daqNumber* edgeCase = NULL; - int64_t minNativeValue = 0; - int64_t maxNativeValue = 0; - daqProperty_getMinValue(property, &edgeCase); - if(edgeCase != NULL) - { - daqNumber_getIntValue(edgeCase, &minNativeValue); - printf("- Minimal value: %lld\n", minNativeValue); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if(edgeCase!=NULL) - { - daqNumber_getIntValue(edgeCase, &maxNativeValue); - printf("- Maximum value: %lld\n", maxNativeValue); - daqReleaseRef(edgeCase); - } - } - - // Suggested values - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) - { - printf("- Suggested values:\n"); - - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for (daqSizeT i = 0; i < count; i++) - { - daqList_getItemAt(suggestedValues, i, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - valueNative = daq_fromDaqFloat(value); - daqReleaseRef(value); - daqReleaseRef(temp); - printf(" -- %lld\n", valueNative); - } - daqReleaseRef(suggestedValues); - } - } - - if (val) - { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - int64_t valueNative = daq_fromDaqInteger(value); - printf("- Value: %lld\n", valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - } -} - -void printBoolProp(daqProperty* property, daqBool metadata, daqBool val) -{ - daqBaseObject* temp = NULL; - daqBoolean* value = NULL; - if (metadata) - { - printCommonMetadata(property); - - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqBool valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Default value: %s\n", valueNative == True ? "True" : "False"); - } - if (val) - { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqBool valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Value: %s\n", valueNative); - } -} - -void printFloatProp(daqProperty* property, daqBool metadata, daqBool val) -{ - daqBaseObject* temp = NULL; - daqFloatObject* value = NULL; - if (metadata) - { - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - double valueNative = 0; - daqFloatObject_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Default value: %f\n", valueNative); - - // Min/Max value - daqNumber* edgeCase = NULL; - double minNativeValue = 0; - double maxNativeValue = 0; - daqProperty_getMinValue(property, &edgeCase); - if(edgeCase != NULL) - { - daqNumber_getFloatValue(edgeCase, &minNativeValue); - printf("- Minimal value: %f\n", minNativeValue); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getFloatValue(edgeCase, &maxNativeValue); - printf("- Maximum value: %f\n", maxNativeValue); - daqReleaseRef(edgeCase); - } - } - - // Suggested values - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) - { - printf("- Suggested values:\n"); - - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for(daqSizeT i = 0; i Date: Tue, 10 Feb 2026 17:00:35 +0100 Subject: [PATCH 093/103] Updated state --- examples/util_headers/daq_c_conversions.h | 35 +- examples/util_headers/daq_property_utils.h | 631 ++++++++++++++------- 2 files changed, 455 insertions(+), 211 deletions(-) diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index f5d0770..8685705 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -14,6 +14,13 @@ struct Range double max; }; +// Core struct type +struct Ratio +{ + int64_t denominator; + int64_t numerator; +}; + // Int conversion /* * The following two funtions represent the conversion between the openDAQ native @@ -55,12 +62,20 @@ daqComplexNumber* daq_toDaqComplex(struct ComplexNumber* native); // Range conversion /* - * Conversion from and to openDAQ String (daqRange) core type + * Conversion from and to openDAQ Struct (daqRange) core type * from C language (struct Range). */ struct Range daq_fromDaqRange(daqRange* daq); daqRange* daq_toDaqRange(struct Range native); +// Ratio conversion +/* + * Conversion from and to openDAQ Ratio Struct (daqRatio) + * from C language (struct Ratio). + */ +struct Ratio daq_fromDaqRatio(daqRatio* daq); +daqRatio* daq_toDaqRatio(struct Ratio native); + daqInt daq_fromDaqInteger(daqInteger* daq) { daqInt native = 0; @@ -174,3 +189,21 @@ daqRange* daq_toDaqRange(struct Range native) daqReleaseRef(highValue); return daq; } + +struct Ratio daq_fromDaqRatio(daqRatio* daq) +{ + struct Ratio native = { 0,0 }; + int64_t temp = 0; + daqRatio_getDenominator(daq, &temp); + native.denominator = temp; + daqRatio_getNumerator(daq, &temp); + native.numerator = temp; + return native; +} + +daqRatio* daq_toDaqRatio(struct Ratio native) +{ + daqRatio** daq = NULL; + daqRatio_createRatio(daq, native.numerator, native.denominator); + return *daq; +} diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 5b158d7..4738345 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -1,284 +1,495 @@ #include -struct PropFields +enum DAQ_PropType { - daqCoreType valueType; - uint8_t name; - uint8_t description; - uint8_t unit; - uint8_t minValue; - uint8_t maxValue; - uint8_t defaultValue; - uint8_t visible; - uint8_t realOnly; - uint8_t selectionValue; - uint8_t suggestedValues; - uint8_t refProp; - uint8_t callableInfo; + selection, + sparseSelection, + integer, + floatObject, + string, + boolean, + ratio, + enumeration, + structObject, + function, + list, + dictionary, + objectObject, + complexNo, + oh_no }; -void printCommonMetadata(daqProperty* property) +void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); +char* daqCoreTypeToString(daqCoreType type); +enum DAQ_PropType daq_getPropType(daqProperty* property); +void printPropertyValue(daqBaseObject* value, daqProperty* property); +void printPropertyMetadata(daqProperty* property); +void printUnit(daqUnit* unit); +void printCallableInfo(daqCallableInfo* callableInfo); +void printName(daqProperty* property); +void printVisible(daqProperty* property); +void printReadOnly(daqProperty* property); +void printNumber(daqNumber* number, enum DAQ_PropType type); +void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); +void printDaqList(daqBaseObject* value, daqCoreType itemType); +void printRatio(struct Ratio native); + +void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType) { - daqBool visible = False; - daqBool readOnly = False; - daqProperty_getVisible(property, &visible); - daqProperty_getReadOnly(property, &readOnly); + switch (suggestedValuesItemType) + { + case daqCtInt: + { + daqInteger* value = NULL; + daqQueryInterface(selectedValueObj, DAQ_INTEGER_INTF_ID, &value); + printf("%lld\n", daq_fromDaqInteger(value)); + daqReleaseRef(value); + return; + } + case daqCtFloat: + { + daqFloatObject* value = NULL; + daqQueryInterface(selectedValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); + printf("%f\n", daq_fromDaqFloat(value)); + daqReleaseRef(value); + } + case daqCtBool: + { + daqBoolean* value = NULL; + daqQueryInterface(selectedValueObj, DAQ_BOOLEAN_INTF_ID, &value); + printf("%u\n", daq_fromDaqBoolean(value)); + daqReleaseRef(value); + } + case daqCtString: + { + daqString* value = NULL; + daqQueryInterface(selectedValueObj, DAQ_STRING_INTF_ID, &value); + printDaqFormattedString("%s\n", value); + daqReleaseRef(value); + } + case daqCtRatio: + { + daqRatio* value = NULL; + daqQueryInterface(selectedValueObj, DAQ_RATIO_INTF_ID, &value); + printRatio(daq_fromDaqRatio(value)); + daqReleaseRef(value); + } + case daqCtEnumeration: + printf("Enumeration\n"); + break; + case daqCtStruct: + printf("Struct\n"); + break; + case daqCtFunc: + printf("Function\n"); + break; + case daqCtProc: + printf("Procedure\n"); + break; + case daqCtObject: + case daqCtList: + case daqCtDict: + default: + { + daqConstCharPtr* value = NULL; + daqBaseObject_toString(selectedValueObj, value); + printf("%s\n", *value); + } + } +} - printf("- Visible: %s\n", visible == True ? "True" : "False"); - printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +char* daqCoreTypeToString(daqCoreType type) +{ + switch(type) + { + case daqCtBool: + return "Bool"; + case daqCtInt: + return "Integer"; + case daqCtFloat: + return "Float"; + case daqCtString: + return "String"; + case daqCtList: + return "List"; + case daqCtDict: + return "Dictionary"; + case daqCtRatio: + return "Ratio"; + case daqCtProc: + return "Procedure"; + case daqCtObject: + return "Object"; + case daqCtBinaryData: + return "Binary data"; + case daqCtFunc: + return "Function"; + case daqCtComplexNumber: + return "Complex number"; + case daqCtStruct: + return "Struct"; + case daqCtEnumeration: + return "Enumeration"; + case daqCtUndefined: + return "Undefined"; + } } -void printIntProp(daqProperty* property, daqBool metadata, daqBool val) +enum DAQ_PropType daq_getPropType(daqProperty* property) { + daqCoreType type = daqCtUndefined; + daqProperty_getValueType(property, &type); + daqBaseObject* temp = NULL; - daqInteger* value = NULL; - if (metadata) + switch (type) { - printCommonMetadata(property); - - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - int64_t valueNative = daq_fromDaqInteger(value); - printf("- Default value: %lld\n", valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - // Min/Max value - daqNumber* edgeCase = NULL; - int64_t minNativeValue = 0; - int64_t maxNativeValue = 0; - daqProperty_getMinValue(property, &edgeCase); - if (edgeCase != NULL) + case daqCtInt: + { + daqProperty_getSelectionValues(property, &temp); + if (temp != NULL) { - daqNumber_getIntValue(edgeCase, &minNativeValue); - printf("- Minimal value: %lld\n", minNativeValue); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if (edgeCase != NULL) + if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_DICT_INTF_ID)) { - daqNumber_getIntValue(edgeCase, &maxNativeValue); - printf("- Maximum value: %lld\n", maxNativeValue); - daqReleaseRef(edgeCase); + daqReleaseRef(temp); + return sparseSelection; } - } - - // Suggested values - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) - { - printf("- Suggested values:\n"); - - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for (daqSizeT i = 0; i < count; i++) + else if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_LIST_INTF_ID)) { - daqList_getItemAt(suggestedValues, i, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - valueNative = daq_fromDaqFloat(value); - daqReleaseRef(value); daqReleaseRef(temp); - printf(" -- %lld\n", valueNative); + return selection; } - daqReleaseRef(suggestedValues); + daqReleaseRef(temp); } + return integer; } - if (val) - { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - int64_t valueNative = daq_fromDaqInteger(value); - printf("- Value: %lld\n", valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); + case daqCtString: + return string; + + case daqCtBool: + return boolean; + + case daqCtFloat: + return floatObject; + + case daqCtProc: + case daqCtFunc: + return function; + + case daqCtObject: + return objectObject; + + case daqCtStruct: + return structObject; + + case daqCtRatio: + return ratio; + + case daqCtComplexNumber: + return complexNo; + + case daqCtList: + return list; + + case daqCtDict: + return dictionary; + + default: + return oh_no; } } -void printBoolProp(daqProperty* property, daqBool metadata, daqBool val) +void printPropertyValue(daqBaseObject* value, daqProperty* property) { - daqBaseObject* temp = NULL; - daqBoolean* value = NULL; - if (metadata) + enum DAQ_PropType propType = daq_getPropType(property); + + switch (propType) + { + case integer: + case string: + case floatObject: + case ratio: { - printCommonMetadata(property); + daqCoreType valueType; + daqProperty_getValueType(property, &valueType); + printSimpleCoreTypeValue(value, valueType); + break; + } + case function: + { + printf("Function\n"); + break; + } + case selection: + { + daqInteger* val = NULL; + daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &val); - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqBool valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); + daqBaseObject* temp = NULL; + daqProperty_getSelectionValues(property, &temp); + daqList* selectionValues = NULL; + daqQueryInterface(temp, DAQ_LIST_INTF_ID, &selectionValues); daqReleaseRef(temp); - printf("- Default value: %s\n", valueNative == True ? "True" : "False"); + daqList_getItemAt(selectionValues, daq_fromDaqInteger(val), &temp); + daqReleaseRef(val); + daqReleaseRef(selectionValues); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + printSimpleCoreTypeValue(temp, itemType); + daqReleaseRef(temp); + break; } - if (val) + case sparseSelection: { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqBool valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); + daqBaseObject* temp = NULL; + daqDict* selectionValues = NULL; + + daqProperty_getSelectionValues(property, &temp); + daqQueryInterface(temp, DAQ_DICT_INTF_ID, &selectionValues); daqReleaseRef(temp); - printf("- Value: %s\n", valueNative == True ? "True" : "False"); + daqDict_get(selectionValues, value, &temp); + daqReleaseRef(selectionValues); + + daqCoreType type = daqCtUndefined; + daqProperty_getItemType(property, &type); + printSimpleCoreTypeValue(temp, type); + daqReleaseRef(temp); + break; + } + case dictionary: + { + daqCoreType itemType = daqCtUndefined; + daqCoreType keyType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + daqProperty_getKeyType(property, &keyType); + printDaqDict(value, keyType, itemType); + break; + } + case list: + { + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + printDaqList(value, itemType); + break; + } + case objectObject: + printf("Object\n"); + break; + default: + { + printf("Property Value\n"); + break; + } } } -void printFloatProp(daqProperty* property, daqBool metadata, daqBool val) +void printPropertyMetadata(daqProperty* property) { - daqBaseObject* temp = NULL; - daqFloatObject* value = NULL; - if (metadata) + enum DAQ_PropType type = daq_getPropType(property); + + // Strings + printName(property); + + daqString* description = NULL; + daqProperty_getDescription(property, &description); + if (description != NULL) { - printCommonMetadata(property); + printDaqFormattedString("- Description: %s\n", description); + daqReleaseRef(description); + } - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - double valueNative = 0; - daqFloatObject_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); + // Booleans + printVisible(property); + printReadOnly(property); + + // Value Type + daqCoreType coreType = daqCtUndefined; + daqProperty_getValueType(property, &coreType); + printf("Value type: %s\n", daqCoreTypeToString(coreType)); - printf("- Default value: %f\n", valueNative); + // Default Value + daqBaseObject* defaultValue = NULL; + daqProperty_getDefaultValue(property, &defaultValue); + printf("Default value: "); + printPropertyValue(defaultValue, property); + daqReleaseRef(defaultValue); - // Min/Max value - daqNumber* edgeCase = NULL; - double minNativeValue = 0; - double maxNativeValue = 0; - daqProperty_getMinValue(property, &edgeCase); - if (edgeCase != NULL) + if (type == dictionary) + { + daqProperty_getKeyType(property, &coreType); + printf("- Key type: %s\n", daqCoreTypeToString(coreType)); + } + + if (type == dictionary || type == list) + { + daqProperty_getItemType(property, &coreType); + printf("- Item type: %s\n", daqCoreTypeToString(coreType)); + } + + if (type == integer || type == floatObject) + { + daqNumber* min = NULL; + daqNumber* max = NULL; + daqProperty_getMinValue(property, &min); + daqProperty_getMaxValue(property, &max); + if (min != NULL) { - daqNumber_getFloatValue(edgeCase, &minNativeValue); - printf("- Minimal value: %f\n", minNativeValue); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getFloatValue(edgeCase, &maxNativeValue); - printf("- Maximum value: %f\n", maxNativeValue); - daqReleaseRef(edgeCase); - } + printf("- Min value:"); + printNumber(min, type); + } + if (max != NULL) + { + printf("- Max value:"); + printNumber(max, type); } + } + + if (type == selection) + { + daqBaseObject* temp = NULL; + daqProperty_getSelectionValues(property, &temp); + daqProperty_getItemType(property, &coreType); + printf("- Selection values:\n"); + printDaqList(temp, coreType); + daqReleaseRef(temp); + } + + if (type == sparseSelection) + { + daqBaseObject* temp = NULL; + daqProperty_getSelectionValues(property, &temp); + daqProperty_getItemType(property, &coreType); + printf("- Selection values: \n"); + printDaqDict(temp, daqCtInt, coreType); + daqReleaseRef(temp); + } - // Suggested values - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) + if (type == integer || type == string || type == floatObject) + { + daqBaseObject* temp = NULL; + daqProperty_getSuggestedValues(property, &temp); + if (temp != NULL) { + daqProperty_getValueType(property, &coreType); printf("- Suggested values:\n"); - - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for (daqSizeT i = 0; i < count; i++) - { - daqList_getItemAt(suggestedValues, i, &temp); - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - valueNative = daq_fromDaqFloat(value); - daqReleaseRef(value); - daqReleaseRef(temp); - printf(" -- %f\n", valueNative); - } - daqReleaseRef(suggestedValues); + printDaqList(temp, coreType); + daqReleaseRef(temp); } } - if (val) + + if (type == integer || type == floatObject) { - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - double valueNative = daq_fromDaqFloat(value); - daqReleaseRef(temp); - daqReleaseRef(value); + daqUnit* unit = NULL; + daqProperty_getUnit(property, &unit); + if (unit != NULL) + { + printUnit(unit); + daqReleaseRef(unit); + } + } - printf("- Value: %f\n", valueNative); + if (type == function) + { + daqCallableInfo* callableInfo = NULL; + daqProperty_getCallableInfo(property, &callableInfo); + printCallableInfo(callableInfo); + daqReleaseRef(callableInfo); } } -void printStringProp(daqProperty* property, daqBool metadata, daqBool val) +void printUnit(daqUnit* unit) { - daqBaseObject* temp = NULL; - daqString* value = NULL; - - if (metadata) + printf("- Unit:\n"); + int64_t id = 0; + daqUnit_getId(unit, &id); + if (id >-1) { - printCommonMetadata(property); + printf(" -- Id: %lld\n", id); + } - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Default value: %s\n", value); - daqReleaseRef(temp); + daqString* value = NULL; + daqUnit_getName(unit, &value); + if (value != NULL) + { + printDaqFormattedString(" -- Unit name: %s\n", value); daqReleaseRef(value); + } - // Suggested values - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) - { - printf("- Sugggested values:\n"); - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for (daqSizeT i = 0; i < count; i++) - { - daqList_getItemAt(suggestedValues, i, &temp); - daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString(" -- %s\n", value); - daqReleaseRef(temp); - daqReleaseRef(value); - } - daqReleaseRef(suggestedValues); - } + daqUnit_getQuantity(unit, &value); + if (value != NULL) + { + printDaqFormattedString(" -- Quantity: %s\n", value); + daqReleaseRef(value); } - if (val) + daqUnit_getSymbol(unit, &value); + if (value != NULL) { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Value: %s\n", value); - daqReleaseRef(temp); + printDaqFormattedString(" -- Symbol: %s\n", value); daqReleaseRef(value); } } -void printRatioProp(daqProperty* property, daqBool metadata, daqBool val) +void printCallableInfo(daqCallableInfo* callableInfo) { - daqBaseObject* temp = NULL; - daqRatio* value = NULL; - struct Range range = { 1, 1 }; + // Argument Info +} - if (metadata) - { - printCommonMetadata(property); +void printName(daqProperty* property) +{ + daqString* name = NULL; + daqProperty_getName(property, &name); + printDaqFormattedString("Name: %s\n", name); + daqReleaseRef(name); +} - // Default value - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_RATIO_INTF_ID, &value); - range = daq_fromDaqRange(value); - daqReleaseRef(temp); - daqReleaseRef(value); +void printVisible(daqProperty* property) +{ + uint8_t visible = False; + daqProperty_getVisible(property, &visible); + printf("- Visible: %s\n", visible == True ? "True" : "False"); +} + +void printReadOnly(daqProperty* property) +{ + uint8_t readOnly = False; + daqProperty_getReadOnly(property, &readOnly); + printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +} - printf("- Default value:\n"); - printf(" -- Denominator: %f\n", range.max); - printf(" -- Numerator: %f\n", range.min); +void printNumber(daqNumber* number, enum DAQ_PropType type) +{ + if (type == integer) + { + int64_t value = 0; + daqNumber_getIntValue(number, &value); + printf("%lld\n", value); } - if (val) + else if(type == floatObject) { - // Value - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_RATIO_INTF_ID, &value); - range = daq_fromDaqRange(value); - daqReleaseRef(temp); - daqReleaseRef(value); - - printf("- Value:\n"); - printf(" -- Denominator: %lld\n", range.max); - printf(" -- Numerator: %lld\n", range.min); + double value = 0.0; + daqNumber_getFloatValue(number, &value); + printf("%f\n", value); } } + +void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType) +{ + +} + +void printDaqList(daqBaseObject* value, daqCoreType itemType) +{ + +} + +void printRatio(struct Ratio native) +{ + printf("Ratio:\n"); + printf(" - Denominator: %lld\n", native.denominator); + printf(" - Numerator: %lld\n", native.numerator); +} From 2df495202b7e8934dd23a5c0e93f90ec32821809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 11 Feb 2026 07:52:18 +0100 Subject: [PATCH 094/103] Added missing utils --- examples/util_headers/daq_property_utils.h | 70 +++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 4738345..9d9efe5 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -436,7 +436,30 @@ void printUnit(daqUnit* unit) void printCallableInfo(daqCallableInfo* callableInfo) { - // Argument Info + daqList* arguments = NULL; + daqCallableInfo_getArguments(callableInfo, &arguments); + + printf("- Callable info:\n"); + + daqSizeT count = 0; + daqList_getCount(arguments, &count); + + daqBaseObject* temp = NULL; + daqArgumentInfo* value = NULL; + daqString* name = NULL; + for (daqSizeT i = 0; i< count; i++) + { + // Arguments are a list of Argument Info Objects + daqList_getItemAt(arguments, i, &temp); + daqQueryInterface(temp, DAQ_ARGUMENT_INFO_INTF_ID, &value); + daqReleaseRef(temp); + + daqArgumentInfo_getName(value, &name); + printDaqFormattedString(" -- Argument name: %s\n", name); + daqReleaseRef(value); + daqReleaseRef(name); + } + daqReleaseRef(arguments); } void printName(daqProperty* property) @@ -479,12 +502,57 @@ void printNumber(daqNumber* number, enum DAQ_PropType type) void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType) { + daqDict* valueDict = NULL; + daqQueryInterface(value, DAQ_DICT_INTF_ID, &valueDict); + + daqBaseObject* key = NULL; + daqBaseObject* val = NULL; + + daqSizeT count = 0; + daqDict_getCount(valueDict, &count); + + daqList* keys = NULL; + daqDict_getKeyList(valueDict, &keys); + printf("- Dictionary:\n"); + + for(daqSizeT i = 0; i Date: Wed, 11 Feb 2026 08:17:01 +0100 Subject: [PATCH 095/103] Updated PR structure --- ..._0_property_name_and_value_visualization.c | 463 ------------------ examples/CMakeLists.txt | 5 +- examples/custom_struct_type_conversion.c | 232 --------- examples/value_change_example.c | 0 examples/value_read_example.c | 0 5 files changed, 1 insertion(+), 699 deletions(-) delete mode 100644 examples/3_0_property_name_and_value_visualization.c delete mode 100644 examples/custom_struct_type_conversion.c delete mode 100644 examples/value_change_example.c delete mode 100644 examples/value_read_example.c diff --git a/examples/3_0_property_name_and_value_visualization.c b/examples/3_0_property_name_and_value_visualization.c deleted file mode 100644 index e1427a2..0000000 --- a/examples/3_0_property_name_and_value_visualization.c +++ /dev/null @@ -1,463 +0,0 @@ -/* - * This example demonstrates how to search through properties, - * determine their (core)type and display their value. - */ - -#include - -enum PropertyType -{ - Property = 0, - BoolProprerty, - IntProperty, - FloatProperty, - StringProperty, - ListProperty, - DictProperty, - RatioProperty, - ObjectProperty, - ReferenceProperty, - FunctionProperty, - SelectionProperty, - SparseSelectionProperty, - StructSelectionProperty, - EnumerationProperty -}; - -int propertyValueTypeCheck(daqProperty* property, daqCoreType coreType) -{ - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, &propCoreType); - - if (propCoreType == coreType) - return 1; - return 0; -} - -// Missing handling for IntProp, SelectionProp, SparseSelectionProp, ReferenceProp, FunctionProp -// Note on universal attributes (default value, read-only, visible, ...): -// - They will be seen on all visualizations of properties -// - - -void determinePropertyTypeAndPrint(daqProperty* property) -{ - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, &propCoreType); - - switch(propCoreType) - { - case daqCtBool: - { - boolProp(property); - break; - } - case daqCtFloat: - { - floatProp(property); - break; - } - case daqCtString: - { - stringProp(property); - break; - } - case daqCtList: - { - listProp(property); - break; - } - case daqCtDict: - { - dictProp(property); - break; - } - case daqCtRatio: - { - ratioProp(property); - break; - } - case daqCtFunc: - { - // Function prop - functionProp(property); - break; - } - case daqCtProc: - { - // Function prop w/ no output - functionProp(property); - break; - } - case daqCtStruct: - { - structProp(property); - break; - } - case daqCtEnumeration: - { - enumProp(property); - break; - } - case daqCtInt: - { - // Check between selection, sparse selection and int property - daqBaseObject* selectionValues = NULL; - daqProperty_getSelectionValues(property, &selectionValues); - if (selectionValues == NULL) - { - intProp(property); - break; - } - - if(DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) - sparseSelectionProp(property); - else - selectionProp(property); - - break; - } - default: - { - prop(property); - break; - } - } -} - -// FunctionProperty (also handles ProcedureProperty) -void functionProp(daqProperty* property) -{ - daqCallableInfo* callInfo = NULL; - daqProperty_getCallableInfo(property, &callInfo); - - daqBool* visible = NULL; - daqProperty_getVisible(property, visible); - - -} - -// SparseSelectionProperty -void sparseSelectionProp(daqProperty* property) -{ - -} - -// SelectionProperty -void selectionProp(daqProperty* property) -{ - -} - -// Property -void prop(daqProperty* property) -{ - -} - -// BoolProperty -void boolProp(daqProperty* property) -{ - // Retrive metadata, check what type the value is... - if (propertyValueTypeCheck(property, daqCtBool)) - { - // We have to check the default value and the current value that the property is set to - } - daqBool* visible = NULL; - daqProperty_getVisible(property, visible); - - daqBaseObject* defaultVisibleObj = NULL; - daqProperty_getDefaultValue(property, &defaultVisibleObj); - - daqBool* defaultVisible = NULL; - daqQueryInterface(property, DAQ_BOOLEAN_INTF_ID, &defaultVisible); - - -} - -// FloatProperty -void floatProp(daqProperty* property) -{ - // Retrive metadata, check what type the value is... - if (propertyValueTypeCheck(property, daqCtFloat)) - { - // Min value, max value, default value, suggested values, visible - daqNumber* minValueNum = NULL; - daqProperty_getMinValue(property, &minValueNum); - - daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, &maxValueNum); - - daqBaseObject* defaultValueObj = NULL; - daqProperty_getDefaultValue(property, &defaultValueObj); - - if (defaultValueObj != NULL) - { - daqFloatObject* defaultValue = NULL; - daqQueryInterface(defaultValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &defaultValue); - daqReleaseRef(defaultValueObj); - daqFloat value = 0; - daqFloatObject_getValue(defaultValue, &value); - printf("- Default Value: %f\n", value); - daqReleaseRef(defaultValue); - } - - daqList* listOfRecommendedValues = NULL; - daqProperty_getSuggestedValues(property, &listOfRecommendedValues); - - daqBool visible = False; - daqProperty_getVisible(property, &visible); - // Display min, max, default and suggested values - if(minValueNum != NULL) - { - daqFloat value = 0; - daqNumber_getFloatValue(minValueNum, &value); - printf("- Minimum Value: %f\n", value); - daqReleaseRef(minValueNum); - if (maxValueNum != NULL) - { - value = 0; - daqNumber_getFloatValue(maxValueNum, &value); - printf("- Maximum Value: %f\n", value); - daqReleaseRef(maxValueNum); - } - } - } -} - -// IntProperty -void intProp(daqProperty* property) -{ - daqNumber* minValueNum = NULL; - daqProperty_getMinValue(property, &minValueNum); - - daqNumber* maxValueNum = NULL; - daqProperty_getMaxValue(property, maxValueNum); - - daqBaseObject* defaultValueObj = NULL; - daqProperty_getDefaultValue(property, &defaultValueObj); - - if (defaultValueObj != NULL) - { - daqInteger* defaultValueOb = NULL; - daqQueryInterface(defaultValueObj, DAQ_INTEGER_INTF_ID, &defaultValueOb); - daqInt defaultValue = 0; - daqInteger_getValue(defaultValueOb, &defaultValue); - daqReleaseRef(defaultValueOb); - - printf("- Default value: %lld\n", defaultValue); - } - daqList* listOfSuggestedValues = NULL; - daqProperty_getSuggestedValues(property, &listOfSuggestedValues); - - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - // We will display the name outside of this function - daqBool* readOnly = NULL; - daqProperty_getReadOnly(property, readOnly); - - // Display attributes if they are not empty - if (minValueNum != NULL && maxValueNum != NULL) - { - daqInt minValue = 0; - daqNumber_getIntValue(minValueNum, &minValue); - printf("- Minimum value: %lld\n", minValue); - daqReleaseRef(minValueNum); - if (maxValueNum != NULL) - { - daqInt maxValue = 0; - daqNumber_getIntValue(maxValueNum, &maxValue); - printf("- Maximum value: %lld\n", maxValue); - daqReleaseRef(maxValueNum); - } - } - - daqReleaseRef(listOfSuggestedValues); - daqReleaseRef(maxValueNum); - daqReleaseRef(minValueNum); -} - -// StringProperty -void stringProp(daqProperty* property) -{ - // Retrive metadata, check what type the value is... - if(propertyValueTypeCheck(property, daqCtString)) - { - // Default value, suggested values, visible - } - daqBaseObject* defaultStringObj = NULL; - daqProperty_getDefaultValue(property, &defaultStringObj); - daqString* defaultString = NULL; - daqQueryInterface(defaultStringObj, DAQ_STRING_INTF_ID, &defaultString); - - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqList* suggestedStrings = NULL; - daqProperty_getSuggestedValues(property, &suggestedStrings); - // Display -} - -// RatioProperty -void ratioProp(daqProperty* property) -{ - // Retrive metadata, check what type the value is... - daqBaseObject* defaultRatioObj = NULL; - daqProperty_getDefaultValue(property, &defaultRatioObj); - daqRatio* defaultRatio = NULL; - daqQueryInterface(defaultRatioObj, DAQ_RATIO_INTF_ID, &defaultRatio); - - // Min and max are included here - daqNumber* minValue = NULL; - daqNumber* maxValue = NULL; - daqProperty_getMinValue(property, &minValue); - daqProperty_getMaxValue(property, &maxValue); - - // When displaying min/max, there needs to be an emptiness check - - daqBool visible = False; - daqProperty_getVisible(property, &visible); - // Not sure about suggested values.... -} - -// ListProperty -void listProp(daqProperty* property) -{ - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqCoreType itemType = daqCtUndefined; - daqProperty_getItemType(property, &itemType); -} - -// DictProperty -void dictProp(daqProperty* property) -{ - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqCoreType itemType = daqCtUndefined; - daqProperty_getItemType(property, &itemType); - - daqCoreType keyType = daqCtUndefined; - daqProperty_getKeyType(property, &keyType); -} - -// ObjectProperty -void objectProp(daqProperty* property) -{ - daqBool visible = False; - daqProperty_getVisible(property, &visible); - - daqBaseObject* defaultObjectObj = NULL; - daqProperty_getDefaultValue(property, &defaultObjectObj); - - // PropertyObject value - daqBaseObject* valueObj = NULL; - daqProperty_getValue(property, &valueObj); - - daqPropertyObject* defaultPropObj = NULL; - daqQueryInterface(defaultObjectObj, DAQ_PROPERTY_OBJECT_INTF_ID, &defaultPropObj); - - // Check if empty and then rerun the objectProp on the defaultPropObj -} - -// StructureProperty -void structProp(daqProperty* property) -{ - if(propertyValueTypeCheck(property, daqCtStruct)) - {} - // Value is Struct Core Type - daqBaseObject* defValueObj = NULL; - daqProperty_getDefaultValue(property, &defValueObj); - - daqStruct* defValue = NULL; - if (defValueObj) - daqQueryInterface(defValueObj, DAQ_STRUCT_INTF_ID, &defValue); - - daqBool* visible = False; - daqProperty_getVisible(property, visible); - - -} - -// EnumerationProperty -void enumProp(daqProperty* property) -{ - daqBaseObject* selectionValueObj = NULL; - daqProperty_getSelectionValues(property, &selectionValueObj); - - -} - -void displayPropertyTypes(daqPropertyObject* propertyObject) -{ - // List of IProperty - daqList* properties = NULL; - daqPropertyObject_getVisibleProperties(propertyObject, &properties); - - daqSizeT count = 0; - daqList_getCount(properties, &count); - - if (count <= 0) - { - daqReleaseRef(properties); - return; - } - - for (daqSizeT i = 0; i< count; i++) - { - daqBaseObject* currentPropBaseObj = NULL; - daqList_getItemAt(properties, i, ¤tPropBaseObj); - - // Cast into IProperty - if (DAQ_SUPPORTS_INTERFACE(currentPropBaseObj, DAQ_PROPERTY_INTF_ID)) - { - daqProperty* prop = NULL; - daqQueryInterface(currentPropBaseObj, DAQ_PROPERTY_INTF_ID, &prop); - - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(prop, &propCoreType); - if (propCoreType == daqCtObject) - { - // Write them up first - printCoreTypeObjects(prop); - } - else if (propCoreType == daqCtUndefined) - { - // Maybe needed (don't know yet) - } - daqString* propName = NULL; - daqProperty_getName(prop, &propName); - printDaqFormattedString("Property name: %s", propName); - daqBaseObject* propValueObj = NULL; - daqProperty_getValue(prop, &propValueObj); - daqConstCharPtr propValueObjStr = ""; - daqBaseObject_toString(propValueObj, propValueObjStr); - printf("\nValue of the property: %s\n", propValueObjStr); - - daqReleaseRef(propValueObj); - daqReleaseRef(propName); - daqReleaseRef(prop); - } - - daqReleaseRef(currentPropBaseObj); - } - daqReleaseRef(properties); -} - - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - displayPropertyTypes((daqPropertyObject*)simulator); - - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); -} diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 4e61eeb..13d1f15 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -11,13 +11,10 @@ set(EXAMPLE_SOURCES read_with_formatted_timestamps.c print_data_descriptor_and_calculater_sample_rate.c create_and_read_sample_rate_buffers.c - custom_struct_type_conversion.c simple_properties_display_handling.c basic_conversions_example.c advanced_conversions_example.c - metadata_read_example.c - value_read_example.c - value_change_example.c) + metadata_read_example.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/custom_struct_type_conversion.c b/examples/custom_struct_type_conversion.c deleted file mode 100644 index 28ce223..0000000 --- a/examples/custom_struct_type_conversion.c +++ /dev/null @@ -1,232 +0,0 @@ -/* - * - */ -#include - - // Custom struct type -struct Coordinates -{ - int64_t x; - int64_t y; - int64_t z; -}; - -// Standard enum -enum ComponentStatusTypeEnum -{ - Error = 0, - Ok, - Warning -}; - -// Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager -void addCoordinateStructToTypeManager(daqContext* context) -{ - daqTypeManager* typeManager = NULL; - daqContext_getTypeManager(context, &typeManager); - - daqList* names = NULL; - daqList_createList(&names); - - daqString* temp = daq_toDaqString("x"); - - daqList_pushBack(names, (daqBaseObject*)temp); - daqReleaseRef(temp); - temp = daq_toDaqString("y"); - daqList_pushBack(names, (daqBaseObject*) temp); - daqReleaseRef(temp); - temp = daq_toDaqString("z"); - daqList_pushBack(names, (daqBaseObject*)temp); - daqReleaseRef(temp); - - daqSimpleType* simpleType = NULL; - daqSimpleType_createSimpleType(&simpleType, daqCtInt); - - daqList* types = NULL; - daqList_createList(&types); - daqList_pushBack(types, simpleType); - daqList_pushBack(types, simpleType); - daqList_pushBack(types, simpleType); - daqReleaseRef(simpleType); - - daqStructType* newType = NULL; - daqStructType_createStructTypeNoDefaults(&newType, daq_toDaqString("DAQ_Coordinates"), names, types); - - daqTypeManager_addType(typeManager, (daqType*) newType); - daqReleaseRef(newType); - daqReleaseRef(names); - - daqBool check = False; - daqTypeManager_hasType(typeManager, daq_toDaqString("DAQ_Coordinates"), &check); - - daqBool enumCheck = False; - daqTypeManager_hasType(typeManager, daq_toDaqString("DAQ_ComponentStatusTypeEnum"), &enumCheck); - - if (check && enumCheck) - printf("\nNew types added.\n"); - else - printf("\nFailed to add new types.\n"); - - daqReleaseRef(types); - daqReleaseRef(names); - daqReleaseRef(typeManager); -} - -// Struct conversion -/* - * Conversion from and to daqStruct objects to C style structs. - * Warning: These types of conversions require prior knowledge of - * the struct structure and its definition in C. For conversion - * from C to openDAQ a pointer to the TypeManager is needed because - * of the way openDAQ structs are implemented. - */ -struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) -{ - struct Coordinates native = { 0,0,0 }; - - daqBaseObject* tempObj = NULL; - daqBaseObject* tempMid = NULL; - - daqString* temp = daq_toDaqString("x"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); - native.x = daq_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); - - temp = daq_toDaqString("y"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); - native.y = daq_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); - - temp = daq_toDaqString("z"); - daqStruct_get(daq, temp, tempObj); - tempMid = daqQueryInterfacePtr(tempObj, DAQ_INTEGER_INTF_ID); - native.z = daq_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); - - return native; -} - -daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeManager) -{ - daqStructBuilder* builder = NULL; - daqStructBuilder_createStructBuilder(&builder, daq_toDaqString("DAQ_Coordinates"), typeManager); - - daqString* temp = NULL; - daqInteger* tempInt = NULL; - if (0) - { - // We can set values in the struct either via directly assigning them to the - // corresponding struct values or adding them in the correct sequence - // to a daqList and setting the list. - daqList* values = NULL; - daqList_createList(&values); - - tempInt = daq_toDaqInteger(native.x); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - tempInt = daq_toDaqInteger(native.y); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - tempInt = daq_toDaqInteger(native.z); - daqList_pushBack(values, (daqBaseObject*) tempInt); - daqReleaseRef(tempInt); - - daqStructBuilder_setFieldValues(builder, values); - daqReleaseRef(values); - } - else - { - - temp = daq_toDaqString("x"); - tempInt = daq_toDaqInteger(native.x); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daq_toDaqString("y"); - tempInt = daq_toDaqInteger(native.y); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daq_toDaqString("z"); - tempInt = daq_toDaqInteger(native.z); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - } - daqStruct* daq = NULL; - daqStructBuilder_build(builder, &daq); - daqReleaseRef(builder); - - return daq; -} - -// Enumeration conversion -/* - * Conversion from and to openDAQ String (daqEnumeration) core type - * from C language (enum ComponentStutesTypeEnum). - * Warning: These types of conversions require prior knowledge of - * the enumeration structure and its definition in C. For conversion - * from C to openDAQ a pointer to the TypeManager is needed because - * of the way openDAQ enumeration is implemented. - */ -enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) -{ - enum ComponentStatusTypeEnum native = Error; - uint8_t temp; - daqEnumeration_getIntValue(daq, &temp); - - // Sanity check - if (temp < 2) - native = temp; - - return native; -} - -daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) -{ - daqEnumeration* daq = NULL; - daqInteger* tempInt = daq_toDaqInteger(native); - daqString* temp = daq_toDaqString("ComponentStatusType"); - - daqEnumeration_createEnumerationWithIntValue(&daq, temp, tempInt, typeManager); - - daqReleaseRef(temp); - daqReleaseRef(tempInt); - return daq; -} - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - daqContext* context = NULL; - daqComponent_getContext((daqComponent*) instance, &context); - addCoordinateStructToTypeManager(context); - daqReleaseRef(context); - - daqStructBuilder* builder = NULL; - - // Set a new property Object that is the new type and write its value and read it - // Might need to set up a custom simulator that will have daq_coordinates as a field - - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); - - return 0; -} \ No newline at end of file diff --git a/examples/value_change_example.c b/examples/value_change_example.c deleted file mode 100644 index e69de29..0000000 diff --git a/examples/value_read_example.c b/examples/value_read_example.c deleted file mode 100644 index e69de29..0000000 From 40396ba595a15eef0b0f626b0e304d676b6c79a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 11 Feb 2026 09:04:28 +0100 Subject: [PATCH 096/103] Pretty print updates and updated example --- examples/simple_properties_display_handling.c | 518 +----------------- examples/util_headers/daq_property_utils.h | 27 +- 2 files changed, 45 insertions(+), 500 deletions(-) diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index 1268ea2..42b5362 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -4,511 +4,49 @@ */ #include -void determinePropertyTypeAndPrint(daqProperty* property); -void printPropertyObject(daqPropertyObject* propertyObject); -void printMetadata(daqProperty* property); -void intProp(daqProperty* property); -void floatProp(daqProperty* property); -void stringProp(daqProperty* property); -void boolProp(daqProperty* property); -void sparseSelectionProp(daqProperty* property); -void selectionProp(daqProperty* property); -void ratioProp(daqProperty* property); -void functionProp(daqProperty* property); -void objectProp(daqProperty* property); -void prop(daqProperty* property); -void printSelectedValue(daqBaseObject* container, daqCoreType itemType, daqInteger* keyValue); - - -void determinePropertyTypeAndPrint(daqProperty* property) -{ - printMetadata(property); - daqCoreType propCoreType = daqCtUndefined; - daqProperty_getValueType(property, &propCoreType); - switch(propCoreType) - { - case daqCtBool: - boolProp(property); - break; - case daqCtFloat: - floatProp(property); - break; - case daqCtString: - stringProp(property); - break; - case daqCtInt: - { - daqBaseObject* selectionValues = NULL; - daqProperty_getSelectionValues(property, &selectionValues); - if (selectionValues == NULL) - intProp(property); - else if (DAQ_SUPPORTS_INTERFACE(selectionValues, DAQ_DICT_INTF_ID)) - sparseSelectionProp(property); - else - selectionProp(property); - break; - } - case daqCtFunc: - { - functionProp(property); - break; - } - case daqCtProc: - { - functionProp(property); - break; - } - case daqCtRatio: - { - ratioProp(property); - break; - } - case daqCtObject: - { - objectProp(property); - break; - } - default: - prop(property); - break; - } -} - -void printPropertyObject(daqPropertyObject* propertyObject) +void recursive(daqPropertyObject* property) { - daqList* properties = NULL; - daqPropertyObject_getVisibleProperties(propertyObject, &properties); + daqList* visibleProperties = NULL; + daqPropertyObject_getVisibleProperties(property, &visibleProperties); daqSizeT count = 0; - daqList_getCount(properties, &count); - - daqBaseObject* temp = NULL; - daqProperty* prop = NULL; - daqString* name = NULL; - daqCoreType propCoreType = daqCtUndefined; + daqList_getCount(visibleProperties, &count); - for(daqSizeT i = 0; i < count; i++) - { - daqList_getItemAt(properties, i, &temp); - prop = daqBorrowInterfacePtr(temp, DAQ_PROPERTY_INTF_ID); - if (prop != NULL) - { - daqQueryInterface(temp, DAQ_PROPERTY_INTF_ID, &prop); - - daqProperty_getValueType(prop, &propCoreType); - daqProperty_getName(prop, &name); - printDaqFormattedString("\n%s\n", name); - daqReleaseRef(name); - determinePropertyTypeAndPrint(prop); - daqReleaseRef(prop); - } - daqReleaseRef(temp); - } - - daqReleaseRef(properties); -} - -void printMetadata(daqProperty* property) -{ - daqBool visible = False; - daqBool readOnly = False; - - daqProperty_getVisible(property, &visible); - daqProperty_getReadOnly(property, &readOnly); - - printf("- Visible: %s\n", visible == True ? "True" : "False"); - printf("- Read only: %s\n", readOnly == True ? "True" : "False"); -} - -void intProp(daqProperty* property) -{ daqBaseObject* temp = NULL; - daqProperty_getValue(property, &temp); - daqInteger* value = NULL; - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - daqInt valueNative = daq_fromDaqInteger(value); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Value: %lld\n", valueNative); + daqProperty* value = NULL; + daqCoreType check = daqCtUndefined; - daqProperty_getDefaultValue(property, &temp); - if (temp != NULL) + for(daqSizeT i = 0; i< count; i++) { - daqQueryInterface(temp, DAQ_INTEGER_INTF_ID, &value); - valueNative = daq_fromDaqInteger(value); - daqReleaseRef(value); + daqList_getItemAt(visibleProperties, i, &temp); + daqQueryInterface(temp, DAQ_PROPERTY_INTF_ID, &value); daqReleaseRef(temp); - printf("- Default Value: %lld\n", valueNative); - } - - daqNumber* edgeCase = NULL; - daqProperty_getMinValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getIntValue(edgeCase, &valueNative); - printf("- Minimum Value: %lld\n", valueNative); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getIntValue(edgeCase, &valueNative); - printf("- Maximum Value: %lld\n", valueNative); - daqReleaseRef(edgeCase); - } - } - - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - - daqSizeT count = 0; - if (suggestedValues != NULL) - { - daqList_getCount(suggestedValues, &count); - printf("- Suggested Values: \n"); - - for (daqSizeT i = 0; i < count; i++) + daqProperty_getValueType(value, &check); + daqProperty_getValue(value, &temp); + if (check == daqCtObject) { - daqList_getItemAt(suggestedValues, i, &temp); - value = daqQueryInterfacePtr(temp, DAQ_INTEGER_INTF_ID); - valueNative = daq_fromDaqInteger(value); - daqReleaseRef(value); + daqString* name = NULL; + daqProperty_getName(value, &name); + printDaqFormattedString("- Property name: %s -\n", name); + daqReleaseRef(name); + daqPropertyObject* propObj = NULL; + daqQueryInterface(temp, DAQ_PROPERTY_OBJECT_INTF_ID, &propObj); daqReleaseRef(temp); - printf(" -- %lld\n", valueNative); - } - daqReleaseRef(suggestedValues); - } -} - -void floatProp(daqProperty* property) -{ - daqBaseObject* temp = NULL; - daqProperty_getValue(property, &temp); - - daqFloatObject* value = NULL; - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - - daqFloat valueNative = 0; - daqFloatObject_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Value: %f\n", valueNative); - - daqProperty_getDefaultValue(property, &temp); - if (temp != NULL) - { - daqQueryInterface(temp, DAQ_FLOAT_OBJECT_INTF_ID, &value); - daqFloatObject_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Default Value: %f\n", valueNative); - } - - daqNumber* edgeCase = NULL; - daqProperty_getMinValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getFloatValue(edgeCase, &valueNative); - printf("- Minimum Value: %f\n", valueNative); - daqReleaseRef(edgeCase); - daqProperty_getMaxValue(property, &edgeCase); - if (edgeCase != NULL) - { - daqNumber_getFloatValue(edgeCase, &valueNative); - printf("- Maximum Value: %f\n", valueNative); - daqReleaseRef(edgeCase); + recursive(propObj); + daqReleaseRef(propObj); + printf("---\n\n"); } - } - - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - if (suggestedValues != NULL) - { - printf("- Suggested Values:\n"); - - daqSizeT count = 0; - daqList_getCount(suggestedValues, &count); - for(daqSizeT i = 0; i < count; i++) + else { - daqList_getItemAt(suggestedValues, i, &temp); - value = daqQueryInterfacePtr(temp, DAQ_FLOAT_OBJECT_INTF_ID); - valueNative = daq_fromDaqFloat(value); - daqReleaseRef(value); + printPropertyMetadata(value); + printf("- Value: "); + printPropertyValue(temp, value); daqReleaseRef(temp); - - printf(" -- %f\n", valueNative); + printf("\n"); } - daqReleaseRef(suggestedValues); - } -} - -void stringProp(daqProperty* property) -{ - daqBaseObject* temp = NULL; - daqProperty_getValue(property, &temp); - - daqString* value = NULL; - daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Value: %s\n", value); - daqReleaseRef(value); - daqReleaseRef(temp); - - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_STRING_INTF_ID, &value); - printDaqFormattedString("- Default Value: %s\n", value); - daqReleaseRef(value); - daqReleaseRef(temp); - - daqList* suggestedValues = NULL; - daqProperty_getSuggestedValues(property, &suggestedValues); - - daqSizeT count = 0; - if (suggestedValues) - daqList_getCount(suggestedValues, &count); - for(daqSizeT i = 0; i< count; i++) - { - daqList_getItemAt(suggestedValues, i, &temp); - value = daqQueryInterfacePtr(temp, DAQ_STRING_INTF_ID); - - printDaqFormattedString("\n%s\n", value); daqReleaseRef(value); - daqReleaseRef(temp); - } -} - -void boolProp(daqProperty* property) -{ - daqBaseObject* temp = NULL; - daqBoolean* value = NULL; - - daqProperty_getValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - daqBool valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Value: %s\n", valueNative == True ? "True" : "False"); - - daqProperty_getDefaultValue(property, &temp); - daqQueryInterface(temp, DAQ_BOOLEAN_INTF_ID, &value); - valueNative = False; - daqBoolean_getValue(value, &valueNative); - daqReleaseRef(value); - daqReleaseRef(temp); - - printf("- Default Value: %s\n", valueNative == True ? "True" : "False"); -} - -void sparseSelectionProp(daqProperty* property) -{ - // Value - daqBaseObject* tempObj = NULL; - daqProperty_getValue(property, &tempObj); - daqInteger* value = NULL; - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); - daqReleaseRef(tempObj); - - // Selection values - daqDict* selectionValues = NULL; - daqProperty_getSelectionValues(property, &tempObj); - daqQueryInterface(tempObj, DAQ_DICT_INTF_ID, &selectionValues); - daqReleaseRef(tempObj); - - daqCoreType tempEnum = daqCtUndefined; - daqProperty_getItemType(property, &tempEnum); - - printSelectedValue(selectionValues, tempEnum, value); - daqReleaseRef(value); - - // Default Value - daqProperty_getDefaultValue(property, &tempObj); - - if (tempObj != NULL) - return; - - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); - daqReleaseRef(tempObj); - - printSelectedValue(selectionValues, tempEnum, value); - daqReleaseRef(value); -} - -void selectionProp(daqProperty* property) -{ - // Value - daqBaseObject* tempObj = NULL; - daqProperty_getValue(property, &tempObj); - daqInteger* value = NULL; - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); - daqReleaseRef(tempObj); - - // Selection values - daqList* selectionValues = NULL; - daqProperty_getSelectionValues(property, &tempObj); - daqQueryInterface(tempObj, DAQ_LIST_INTF_ID, &selectionValues); - daqReleaseRef(tempObj); - - daqCoreType tempEnum = daqCtUndefined; - daqProperty_getItemType(property, &tempEnum); - - printSelectedValue(selectionValues, tempEnum, value); - daqReleaseRef(value); - - // Default Value - daqProperty_getDefaultValue(property, &tempObj); - - if (tempObj != NULL) - return; - - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &value); - daqReleaseRef(tempObj); - - printSelectedValue(selectionValues, tempEnum, value); - daqReleaseRef(value); -} - -void ratioProp(daqProperty* property) -{ - // Value - daqBaseObject* tempObj = NULL; - daqProperty_getValue(property, &tempObj); - daqRatio* temp = NULL; - daqQueryInterface(tempObj, DAQ_RATIO_INTF_ID, &temp); - daqReleaseRef(tempObj); - - daqInt denominator = 0; - daqInt numerator = 0; - daqRatio_getDenominator(temp, &denominator); - daqRatio_getNumerator(temp, &numerator); - daqReleaseRef(temp); - - // Print both - printf("- Value:\n"); - printf(" -- denominator: %lld\n", denominator); - printf(" -- numerator: %lld\n", numerator); - - // Default value - daqProperty_getDefaultValue(property, &tempObj); - - if (tempObj == NULL) - return; - - daqQueryInterface(tempObj, DAQ_RATIO_INTF_ID, &temp); - daqReleaseRef(tempObj); - denominator = 0; - numerator = 0; - daqRatio_getDenominator(temp, &denominator); - daqRatio_getNumerator(temp, &numerator); - daqReleaseRef(temp); - - // Print both - printf("- Default Value:\n"); - printf(" -- denominator: %lld\n", denominator); - printf(" -- numerator: %lld\n", numerator); -} - -void functionProp(daqProperty* property) -{ - printf("\nMethod\n"); -} - -void objectProp(daqProperty* property) -{ - daqBaseObject* tempObj = NULL; - daqProperty_getValue(property, &tempObj); - daqPropertyObject* temp = NULL; - daqQueryInterface(tempObj, DAQ_PROPERTY_OBJECT_INTF_ID, &temp); - daqReleaseRef(tempObj); - printf("-- Object property Value --\n"); - printPropertyObject(temp); - daqReleaseRef(temp); - - printf("\n"); - daqProperty_getDefaultValue(property, &tempObj); - - if (tempObj == NULL) - { - printf("---\n"); - return; - } - - daqQueryInterface(tempObj, DAQ_PROPERTY_OBJECT_INTF_ID, &temp); - daqReleaseRef(tempObj); - printf("-- Object property Default Value --\n"); - printPropertyObject(temp); - daqReleaseRef(temp); - printf("---\n"); -} - -void prop(daqProperty* property) -{ - // Check for others and display what they are as in functionProp - daqCoreType tempCt = daqCtUndefined; - daqProperty_getValueType(property, &tempCt); - switch(tempCt) - { - case daqCtStruct: - { - printf("\nOpenDAQ Struct\n"); - } - case daqCtEnumeration: - { - printf("\nOpenDAQ Enumeration\n"); - } - case daqCtList: - { - printf("\nOpenDAQ List\n"); - } - case daqCtDict: - { - printf("\nOpenDAQ Dictionary\n"); - } - default: - { - daqProperty* tempProp = NULL; - daqProperty_getReferencedProperty(property, &tempProp); - if (tempProp != NULL) - { - daqString* name = NULL; - daqProperty_getName(tempProp, &name); - printDaqFormattedString("\nReferenced property: %s\n", name); - daqReleaseRef(name); - determinePropertyTypeAndPrint(tempProp); - daqReleaseRef(tempProp); - } - else - { - break; - } - } - } -} - -void printSelectedValue(daqBaseObject* container, daqCoreType itemType, daqInteger* keyValue) -{ - daqInt key = 0; - daqInteger_getValue(keyValue, &key); - - daqBaseObject* temp = NULL; - - if(DAQ_SUPPORTS_INTERFACE(container, DAQ_LIST_INTF_ID)) - { - daqList* tempContainer = NULL; - daqQueryInterface(container, DAQ_LIST_INTF_ID, &tempContainer); - daqList_getItemAt(tempContainer, key, &temp); - daqReleaseRef(tempContainer); - } - else - { - daqDict* tempContainer = NULL; - daqQueryInterface(container, DAQ_DICT_INTF_ID, &tempContainer); - daqDict_get(tempContainer, keyValue, &temp); - daqReleaseRef(tempContainer); } - + daqReleaseRef(visibleProperties); } int main() @@ -520,7 +58,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - printPropertyObject((daqPropertyObject*) simulator); + recursive((daqPropertyObject*) simulator); daqReleaseRef(simulator); daqReleaseRef(instance); diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 9d9efe5..7962e57 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -7,7 +7,7 @@ enum DAQ_PropType integer, floatObject, string, - boolean, + propBoolean, ratio, enumeration, structObject, @@ -52,6 +52,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge daqQueryInterface(selectedValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); printf("%f\n", daq_fromDaqFloat(value)); daqReleaseRef(value); + return; } case daqCtBool: { @@ -59,6 +60,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge daqQueryInterface(selectedValueObj, DAQ_BOOLEAN_INTF_ID, &value); printf("%u\n", daq_fromDaqBoolean(value)); daqReleaseRef(value); + return; } case daqCtString: { @@ -66,6 +68,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge daqQueryInterface(selectedValueObj, DAQ_STRING_INTF_ID, &value); printDaqFormattedString("%s\n", value); daqReleaseRef(value); + return; } case daqCtRatio: { @@ -73,6 +76,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge daqQueryInterface(selectedValueObj, DAQ_RATIO_INTF_ID, &value); printRatio(daq_fromDaqRatio(value)); daqReleaseRef(value); + return; } case daqCtEnumeration: printf("Enumeration\n"); @@ -94,6 +98,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge daqConstCharPtr* value = NULL; daqBaseObject_toString(selectedValueObj, value); printf("%s\n", *value); + return; } } } @@ -168,7 +173,7 @@ enum DAQ_PropType daq_getPropType(daqProperty* property) return string; case daqCtBool: - return boolean; + return propBoolean; case daqCtFloat: return floatObject; @@ -208,6 +213,7 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) { case integer: case string: + case propBoolean: case floatObject: case ratio: { @@ -309,14 +315,15 @@ void printPropertyMetadata(daqProperty* property) // Value Type daqCoreType coreType = daqCtUndefined; daqProperty_getValueType(property, &coreType); - printf("Value type: %s\n", daqCoreTypeToString(coreType)); + printf("- Value type: %s\n", daqCoreTypeToString(coreType)); // Default Value daqBaseObject* defaultValue = NULL; daqProperty_getDefaultValue(property, &defaultValue); - printf("Default value: "); + printf("- Default value: "); printPropertyValue(defaultValue, property); - daqReleaseRef(defaultValue); + if (defaultValue != NULL) + daqReleaseRef(defaultValue); if (type == dictionary) { @@ -370,13 +377,13 @@ void printPropertyMetadata(daqProperty* property) if (type == integer || type == string || type == floatObject) { - daqBaseObject* temp = NULL; + daqList* temp = NULL; daqProperty_getSuggestedValues(property, &temp); if (temp != NULL) { daqProperty_getValueType(property, &coreType); printf("- Suggested values:\n"); - printDaqList(temp, coreType); + printDaqList((daqBaseObject*)temp, coreType); daqReleaseRef(temp); } } @@ -455,7 +462,7 @@ void printCallableInfo(daqCallableInfo* callableInfo) daqReleaseRef(temp); daqArgumentInfo_getName(value, &name); - printDaqFormattedString(" -- Argument name: %s\n", name); + printDaqFormattedString(" -- Argument name: %s\n", name); daqReleaseRef(value); daqReleaseRef(name); } @@ -521,9 +528,9 @@ void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemTyp daqList_getItemAt(keys, i, &key); daqDict_get(valueDict, key, &val); - printf(" -- Key: "); + printf(" -- Key: "); printSimpleCoreTypeValue(key, keyType); - printf(" -- Value: "); + printf(" -- Value: "); printSimpleCoreTypeValue(val, itemType); daqReleaseRef(key); daqReleaseRef(val); From 66630b2c826d3a67867dbfba7c46a5147d7c7fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 11 Feb 2026 11:35:47 +0100 Subject: [PATCH 097/103] Adjusted printing and naming style --- examples/advanced_conversions_example.c | 34 ++-- examples/basic_conversions_example.c | 28 +-- examples/simple_properties_display_handling.c | 52 ++--- examples/util_headers/daq_c_conversions.h | 72 +++---- examples/util_headers/daq_property_utils.h | 185 ++++++++++-------- examples/util_headers/daq_utils.h | 12 ++ 6 files changed, 206 insertions(+), 177 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index d1522cf..8ac7fff 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -23,27 +23,27 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) daqBaseObject* tempObj = NULL; daqBaseObject* tempMid = NULL; - daqString* temp = daq_toDaqString("x"); + daqString* temp = daqExample_toDaqString("x"); daqStruct_get(daq, temp, &tempObj); daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.x = daq_fromDaqInteger((daqInteger*) tempMid); + native.x = daqExample_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); daqReleaseRef(temp); - temp = daq_toDaqString("y"); + temp = daqExample_toDaqString("y"); daqStruct_get(daq, temp, &tempObj); daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.y = daq_fromDaqInteger((daqInteger*) tempMid); + native.y = daqExample_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); daqReleaseRef(temp); - temp = daq_toDaqString("z"); + temp = daqExample_toDaqString("z"); daqStruct_get(daq, temp, & tempObj); daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.z = daq_fromDaqInteger((daqInteger*) tempMid); + native.z = daqExample_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); daqReleaseRef(tempObj); daqReleaseRef(temp); @@ -54,25 +54,25 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeManager) { daqStructBuilder* builder = NULL; - daqStructBuilder_createStructBuilder(&builder, daq_toDaqString("DAQ_Coordinates"), typeManager); + daqStructBuilder_createStructBuilder(&builder, daqExample_toDaqString("DAQ_Coordinates"), typeManager); daqString* temp = NULL; daqInteger* tempInt = NULL; - temp = daq_toDaqString("x"); - tempInt = daq_toDaqInteger(native.x); + temp = daqExample_toDaqString("x"); + tempInt = daqExample_toDaqInteger(native.x); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); - temp = daq_toDaqString("y"); - tempInt = daq_toDaqInteger(native.y); + temp = daqExample_toDaqString("y"); + tempInt = daqExample_toDaqInteger(native.y); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); - temp = daq_toDaqString("z"); - tempInt = daq_toDaqInteger(native.z); + temp = daqExample_toDaqString("z"); + tempInt = daqExample_toDaqInteger(native.z); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); @@ -109,8 +109,8 @@ enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) { daqEnumeration* daq = NULL; - daqInteger* tempInt = daq_toDaqInteger(native); - daqString* temp = daq_toDaqString("ComponentStatusType"); + daqInteger* tempInt = daqExample_toDaqInteger(native); + daqString* temp = daqExample_toDaqString("ComponentStatusType"); daqEnumeration_createEnumerationWithIntValue(&daq, temp, tempInt, typeManager); @@ -132,7 +132,7 @@ int main() daqComponentStatusContainer* statusContainer = NULL; daqComponent_getStatusContainer((daqComponent*)simulator, &statusContainer); - daqString* tempStr = daq_toDaqString("ConnectionStatus"); + daqString* tempStr = daqExample_toDaqString("ConnectionStatus"); daqEnumeration* temp = NULL; daqComponentStatusContainer_getStatus(statusContainer, tempStr, &temp); daqReleaseRef(tempStr); @@ -150,7 +150,7 @@ int main() daqTypeManager* typeMan = NULL; daqContext_getTypeManager(context, &typeMan); - tempStr = daq_toDaqString("DAQ_CurrentPosition"); + tempStr = daqExample_toDaqString("DAQ_CurrentPosition"); daqPropertyObject_getProperty((daqPropertyObject*) simulator,tempStr, ¤tPosition); daqReleaseRef(tempStr); daqBaseObject* tempObj = NULL; diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c index b4dd9f9..fbb8169 100644 --- a/examples/basic_conversions_example.c +++ b/examples/basic_conversions_example.c @@ -7,43 +7,43 @@ int main() { // Integer example int64_t i = 10; - daqInteger* daqInt = daq_toDaqInteger(i); - int64_t i2 = daq_fromDaqInteger(daqInt); + daqInteger* daqInt = daqExample_toDaqInteger(i); + int64_t i2 = daqExample_fromDaqInteger(daqInt); printf("Integer is equal: %s\n", i == i2 ? "True": "False"); daqReleaseRef(daqInt); // Float example double j = 1.0; - daqFloatObject* daqFloat = daq_toDaqFloat(j); - double j2 = daq_fromDaqFloat(daqFloat); + daqFloatObject* daqFloat = daqExample_toDaqFloat(j); + double j2 = daqExample_fromDaqFloat(daqFloat); printf("Float is equal: %s\n", j == j2 ? "True" : "False"); daqReleaseRef(daqFloat); // String example char* k = "check"; - daqString* daqStr = daq_toDaqString(k); - char* k2 = daq_fromDaqString(daqStr); + daqString* daqStr = daqExample_toDaqString(k); + char* k2 = daqExample_fromDaqString(daqStr); printf("String is equal: %s\n", strcmp(k, k2) == 0 ? "True" : "False"); daqReleaseRef(daqStr); // Bool example uint8_t l = True; - daqBoolean* daqBl = daq_toDaqBoolean(l); - uint8_t l2 = daq_fromDaqBoolean(daqBl); + daqBoolean* daqBl = daqExample_toDaqBoolean(l); + uint8_t l2 = daqExample_fromDaqBoolean(daqBl); printf("Boolean is equal: %s\n", l == l2 ? "True" : "False"); daqReleaseRef(daqBl); // Complex Number example - struct ComplexNumber m = { 1,5 }; - daqComplexNumber* daqComplex = daq_toDaqComplex(&m); - struct ComplexNumber m2 = daq_fromDaqComplex(daqComplex); + struct daqExample_ComplexNumber m = { 1,5 }; + daqComplexNumber* daqComplex = daqExample_toDaqComplex(&m); + struct daqExample_ComplexNumber m2 = daqExample_fromDaqComplex(daqComplex); printf("Complex Number is equal: %s\n", ((m.imaginary == m2.imaginary) && (m.real == m2.real)) ? "True" : "False"); daqReleaseRef(daqComplex); // Range example - struct Range n = { 1,10 }; - daqRange* daqRng = daq_toDaqRange(n); - struct Range n2 = daq_fromDaqRange(daqRng); + struct daqExample_Range n = { 1,10 }; + daqRange* daqRng = daqExample_toDaqRange(n); + struct daqExample_Range n2 = daqExample_fromDaqRange(daqRng); printf("Range is equal: %s\n", ((n.max == n2.max) && (n.min == n2.min)) ? "True" : "False"); daqReleaseRef(daqRng); } \ No newline at end of file diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index 42b5362..abdc24a 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -4,48 +4,54 @@ */ #include -void recursive(daqPropertyObject* property) +void recursive(daqPropertyObject* propertyObject) { daqList* visibleProperties = NULL; - daqPropertyObject_getVisibleProperties(property, &visibleProperties); + daqPropertyObject_getVisibleProperties(propertyObject, &visibleProperties); daqSizeT count = 0; daqList_getCount(visibleProperties, &count); - daqBaseObject* temp = NULL; - daqProperty* value = NULL; - daqCoreType check = daqCtUndefined; - - for(daqSizeT i = 0; i< count; i++) + for (daqSizeT i = 0; i < count; i++) { - daqList_getItemAt(visibleProperties, i, &temp); - daqQueryInterface(temp, DAQ_PROPERTY_INTF_ID, &value); - daqReleaseRef(temp); - daqProperty_getValueType(value, &check); - daqProperty_getValue(value, &temp); - if (check == daqCtObject) + daqBaseObject* listItem = NULL; + daqProperty* property = NULL; + + daqList_getItemAt(visibleProperties, i, &listItem); + daqQueryInterface(listItem, DAQ_PROPERTY_INTF_ID, &property); + daqReleaseRef(listItem); + + daqCoreType valueType = daqCtUndefined; + daqProperty_getValueType(property, &valueType); + + daqBaseObject* propertyValue; + daqProperty_getValue(property, &propertyValue); + + if (valueType == daqCtObject) { daqString* name = NULL; - daqProperty_getName(value, &name); + daqProperty_getName(property, &name); printDaqFormattedString("- Property name: %s -\n", name); daqReleaseRef(name); - daqPropertyObject* propObj = NULL; - daqQueryInterface(temp, DAQ_PROPERTY_OBJECT_INTF_ID, &propObj); - daqReleaseRef(temp); - recursive(propObj); - daqReleaseRef(propObj); + + daqPropertyObject* childPropertyObject = NULL; + daqQueryInterface(propertyValue, DAQ_PROPERTY_OBJECT_INTF_ID, &childPropertyObject); + recursive(childPropertyObject); printf("---\n\n"); + daqReleaseRef(childPropertyObject); } else { - printPropertyMetadata(value); + printPropertyMetadata(property); printf("- Value: "); - printPropertyValue(temp, value); - daqReleaseRef(temp); + printPropertyValue(propertyValue, property); printf("\n"); } - daqReleaseRef(value); + + daqReleaseRef(propertyValue); + daqReleaseRef(property); } + daqReleaseRef(visibleProperties); } diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 8685705..573802d 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -1,21 +1,21 @@ #include // Core struct type -struct ComplexNumber +struct daqExample_ComplexNumber { double real; double imaginary; }; // Core struct type -struct Range +struct daqExample_Range { double min; double max; }; // Core struct type -struct Ratio +struct daqExample_Ratio { int64_t denominator; int64_t numerator; @@ -26,8 +26,8 @@ struct Ratio * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. */ -daqInt daq_fromDaqInteger(daqInteger* daq); -daqInteger* daq_toDaqInteger(daqInt native); +daqInt daqExample_fromDaqInteger(daqInteger* daq); +daqInteger* daqExample_toDaqInteger(daqInt native); // String conversion /* @@ -35,106 +35,106 @@ daqInteger* daq_toDaqInteger(daqInt native); * from C language (const char*). The function that converts to native C return a non-owning pointer. * Precautions should be taken, when using the received pointer. */ -char* daq_fromDaqString(daqString* daq); -daqString* daq_toDaqString(const char* native); +char* daqExample_fromDaqString(daqString* daq); +daqString* daqExample_toDaqString(const char* native); // Bool conversion /* * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). */ -uint8_t daq_fromDaqBoolean(daqBoolean* daq); -daqBoolean* daq_toDaqBoolean(uint8_t native); +uint8_t daqExample_fromDaqBoolean(daqBoolean* daq); +daqBoolean* daqExample_toDaqBoolean(uint8_t native); // Float conversion /* *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ -daqFloat daq_fromDaqFloat(daqFloatObject* daq); -daqFloatObject* daq_toDaqFloat(daqFloat native); +daqFloat daqExample_fromDaqFloat(daqFloatObject* daq); +daqFloatObject* daqExample_toDaqFloat(daqFloat native); // Complex number conversion /* * Conversion from and to openDAQ Complex (daqComplex) core type * from C language (struct ComplexNumber). */ -struct ComplexNumber daq_fromDaqComplex(daqComplexNumber* daq); -daqComplexNumber* daq_toDaqComplex(struct ComplexNumber* native); +struct daqExample_ComplexNumber daqExample_fromDaqComplex(daqComplexNumber* daq); +daqComplexNumber* daqExample_toDaqComplex(struct daqExample_ComplexNumber* native); // Range conversion /* * Conversion from and to openDAQ Struct (daqRange) core type * from C language (struct Range). */ -struct Range daq_fromDaqRange(daqRange* daq); -daqRange* daq_toDaqRange(struct Range native); +struct daqExample_Range daqExample_fromDaqRange(daqRange* daq); +daqRange* daqExample_toDaqRange(struct daqExample_Range native); // Ratio conversion /* * Conversion from and to openDAQ Ratio Struct (daqRatio) * from C language (struct Ratio). */ -struct Ratio daq_fromDaqRatio(daqRatio* daq); -daqRatio* daq_toDaqRatio(struct Ratio native); +struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq); +daqRatio* daqExample_toDaqRatio(struct daqExample_Ratio native); -daqInt daq_fromDaqInteger(daqInteger* daq) +daqInt daqExample_fromDaqInteger(daqInteger* daq) { daqInt native = 0; daqInteger_getValue(daq, &native); return native; } -daqInteger* daq_toDaqInteger(daqInt native) +daqInteger* daqExample_toDaqInteger(daqInt native) { daqInteger* daq = NULL; daqInteger_createInteger(&daq, native); return daq; } -char* daq_fromDaqString(daqString* daq) +char* daqExample_fromDaqString(daqString* daq) { char* native = NULL; daqString_getCharPtr(daq, &native); return native; } -daqString* daq_toDaqString(const char* native) +daqString* daqExample_toDaqString(const char* native) { daqString* daq = NULL; daqString_createString(&daq, native); return daq; } -uint8_t daq_fromDaqBoolean(daqBoolean* daq) +uint8_t daqExample_fromDaqBoolean(daqBoolean* daq) { uint8_t native = 0; daqBoolean_getValue(daq, &native); return native; } -daqBoolean* daq_toDaqBoolean(uint8_t native) +daqBoolean* daqExample_toDaqBoolean(uint8_t native) { daqBoolean* daq = NULL; daqBoolean_createBoolean(&daq, native); return daq; } -daqFloat daq_fromDaqFloat(daqFloatObject* daq) +daqFloat daqExample_fromDaqFloat(daqFloatObject* daq) { daqFloat native = 0; daqFloatObject_getValue(daq, &native); return native; } -daqFloatObject* daq_toDaqFloat(daqFloat native) +daqFloatObject* daqExample_toDaqFloat(daqFloat native) { daqFloatObject* daq = 0; daqFloatObject_createFloatObject(&daq, native); return daq; } -struct ComplexNumber daq_fromDaqComplex(daqComplexNumber* daq) +struct daqExample_ComplexNumber daqExample_fromDaqComplex(daqComplexNumber* daq) { - struct ComplexNumber native = { 0, 0 }; + struct daqExample_ComplexNumber native = { 0, 0 }; double tempDouble = 0; daqComplexNumber_getReal(daq, &tempDouble); native.real = tempDouble; @@ -143,16 +143,16 @@ struct ComplexNumber daq_fromDaqComplex(daqComplexNumber* daq) return native; } -daqComplexNumber* daq_toDaqComplex(struct ComplexNumber* native) +daqComplexNumber* daqExample_toDaqComplex(struct daqExample_ComplexNumber* native) { daqComplexNumber* daq = NULL; daqComplexNumber_createComplexNumber(&daq, native->real, native->imaginary); return daq; } -struct Range daq_fromDaqRange(daqRange* daq) +struct daqExample_Range daqExample_fromDaqRange(daqRange* daq) { - struct Range native = { 0, 0 }; + struct daqExample_Range native = { 0, 0 }; daqNumber* temp; daqRange_getLowValue(daq, &temp); double intermmidiate = 0; @@ -167,14 +167,14 @@ struct Range daq_fromDaqRange(daqRange* daq) return native; } -daqRange* daq_toDaqRange(struct Range native) +daqRange* daqExample_toDaqRange(struct daqExample_Range native) { daqRange* daq = NULL; daqNumber* lowValue = NULL; daqNumber* highValue = NULL; - daqFloatObject* lowFloat = daq_toDaqFloat(native.min); - daqFloatObject* highFloat = daq_toDaqFloat(native.max); + daqFloatObject* lowFloat = daqExample_toDaqFloat(native.min); + daqFloatObject* highFloat = daqExample_toDaqFloat(native.max); daqQueryInterface(lowFloat, DAQ_NUMBER_INTF_ID, &lowValue); daqQueryInterface(highFloat, DAQ_NUMBER_INTF_ID, &highValue); @@ -190,9 +190,9 @@ daqRange* daq_toDaqRange(struct Range native) return daq; } -struct Ratio daq_fromDaqRatio(daqRatio* daq) +struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq) { - struct Ratio native = { 0,0 }; + struct daqExample_Ratio native = { 0,0 }; int64_t temp = 0; daqRatio_getDenominator(daq, &temp); native.denominator = temp; @@ -201,7 +201,7 @@ struct Ratio daq_fromDaqRatio(daqRatio* daq) return native; } -daqRatio* daq_toDaqRatio(struct Ratio native) +daqRatio* daqExample_toDaqRatio(struct daqExample_Ratio native) { daqRatio** daq = NULL; daqRatio_createRatio(daq, native.numerator, native.denominator); diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 7962e57..0d4e3c4 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -1,38 +1,38 @@ #include -enum DAQ_PropType +enum daqExample_propertyType { - selection, - sparseSelection, - integer, - floatObject, - string, - propBoolean, - ratio, - enumeration, - structObject, - function, - list, - dictionary, - objectObject, - complexNo, - oh_no + daqExample_propertyType_selection, + daqExample_propertyType_sparseSelection, + daqExample_propertyType_integer, + daqExample_propertyType_floatObject, + daqExample_propertyType_string, + daqExample_propertyType_boolean, + daqExample_propertyType_ratio, + daqExample_propertyType_enumeration, + daqExample_propertyType_structObject, + daqExample_propertyType_function, + daqExample_propertyType_list, + daqExample_propertyType_dictionary, + daqExample_propertyType_object, + daqExample_porpertyType_complexNumber, + daqExample_propertyType_oh_no }; void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); char* daqCoreTypeToString(daqCoreType type); -enum DAQ_PropType daq_getPropType(daqProperty* property); +enum daqExample_propertyType daq_getPropType(daqProperty* property); void printPropertyValue(daqBaseObject* value, daqProperty* property); void printPropertyMetadata(daqProperty* property); -void printUnit(daqUnit* unit); -void printCallableInfo(daqCallableInfo* callableInfo); -void printName(daqProperty* property); -void printVisible(daqProperty* property); -void printReadOnly(daqProperty* property); -void printNumber(daqNumber* number, enum DAQ_PropType type); +void printDaqUnit(daqUnit* unit); +void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo); +void printDapPropertyName(daqProperty* property); +void printDaqPropertyVisible(daqProperty* property); +void printDaqPropertyReadOnly(daqProperty* property); +void printNumber(daqNumber* number, enum daqExample_propertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); void printDaqList(daqBaseObject* value, daqCoreType itemType); -void printRatio(struct Ratio native); +void printDaqRatio(struct daqExample_Ratio native); void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType) { @@ -42,7 +42,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqInteger* value = NULL; daqQueryInterface(selectedValueObj, DAQ_INTEGER_INTF_ID, &value); - printf("%lld\n", daq_fromDaqInteger(value)); + printf("%lld\n", daqExample_fromDaqInteger(value)); daqReleaseRef(value); return; } @@ -50,7 +50,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqFloatObject* value = NULL; daqQueryInterface(selectedValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); - printf("%f\n", daq_fromDaqFloat(value)); + printf("%f\n", daqExample_fromDaqFloat(value)); daqReleaseRef(value); return; } @@ -58,7 +58,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqBoolean* value = NULL; daqQueryInterface(selectedValueObj, DAQ_BOOLEAN_INTF_ID, &value); - printf("%u\n", daq_fromDaqBoolean(value)); + printf("%s\n", daqExample_fromDaqBoolean(value) == True ? "True" : "False"); daqReleaseRef(value); return; } @@ -74,7 +74,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqRatio* value = NULL; daqQueryInterface(selectedValueObj, DAQ_RATIO_INTF_ID, &value); - printRatio(daq_fromDaqRatio(value)); + printDaqRatio(daqExample_fromDaqRatio(value)); daqReleaseRef(value); return; } @@ -140,7 +140,7 @@ char* daqCoreTypeToString(daqCoreType type) } } -enum DAQ_PropType daq_getPropType(daqProperty* property) +enum daqExample_propertyType daq_getPropType(daqProperty* property) { daqCoreType type = daqCtUndefined; daqProperty_getValueType(property, &type); @@ -157,77 +157,77 @@ enum DAQ_PropType daq_getPropType(daqProperty* property) if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_DICT_INTF_ID)) { daqReleaseRef(temp); - return sparseSelection; + return daqExample_propertyType_sparseSelection; } else if (DAQ_SUPPORTS_INTERFACE(temp, DAQ_LIST_INTF_ID)) { daqReleaseRef(temp); - return selection; + return daqExample_propertyType_selection; } daqReleaseRef(temp); } - return integer; + return daqExample_propertyType_integer; } case daqCtString: - return string; + return daqExample_propertyType_string; case daqCtBool: - return propBoolean; + return daqExample_propertyType_boolean; case daqCtFloat: - return floatObject; + return daqExample_propertyType_floatObject; case daqCtProc: case daqCtFunc: - return function; + return daqExample_propertyType_function; case daqCtObject: - return objectObject; + return daqExample_propertyType_object; case daqCtStruct: - return structObject; + return daqExample_propertyType_structObject; case daqCtRatio: - return ratio; + return daqExample_propertyType_ratio; case daqCtComplexNumber: - return complexNo; + return daqExample_porpertyType_complexNumber; case daqCtList: - return list; + return daqExample_propertyType_list; case daqCtDict: - return dictionary; + return daqExample_propertyType_dictionary; default: - return oh_no; + return daqExample_propertyType_oh_no; } } void printPropertyValue(daqBaseObject* value, daqProperty* property) { - enum DAQ_PropType propType = daq_getPropType(property); + enum daqExample_propertyType propType = daq_getPropType(property); switch (propType) { - case integer: - case string: - case propBoolean: - case floatObject: - case ratio: + case daqExample_propertyType_integer: + case daqExample_propertyType_string: + case daqExample_propertyType_boolean: + case daqExample_propertyType_floatObject: + case daqExample_propertyType_ratio: { daqCoreType valueType; daqProperty_getValueType(property, &valueType); printSimpleCoreTypeValue(value, valueType); break; } - case function: + case daqExample_propertyType_function: { printf("Function\n"); break; } - case selection: + case daqExample_propertyType_selection: { daqInteger* val = NULL; daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &val); @@ -238,7 +238,7 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) daqQueryInterface(temp, DAQ_LIST_INTF_ID, &selectionValues); daqReleaseRef(temp); - daqList_getItemAt(selectionValues, daq_fromDaqInteger(val), &temp); + daqList_getItemAt(selectionValues, daqExample_fromDaqInteger(val), &temp); daqReleaseRef(val); daqReleaseRef(selectionValues); @@ -248,7 +248,7 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) daqReleaseRef(temp); break; } - case sparseSelection: + case daqExample_propertyType_sparseSelection: { daqBaseObject* temp = NULL; daqDict* selectionValues = NULL; @@ -266,7 +266,7 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) daqReleaseRef(temp); break; } - case dictionary: + case daqExample_propertyType_dictionary: { daqCoreType itemType = daqCtUndefined; daqCoreType keyType = daqCtUndefined; @@ -275,14 +275,14 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) printDaqDict(value, keyType, itemType); break; } - case list: + case daqExample_propertyType_list: { daqCoreType itemType = daqCtUndefined; daqProperty_getItemType(property, &itemType); printDaqList(value, itemType); break; } - case objectObject: + case daqExample_propertyType_object: printf("Object\n"); break; default: @@ -295,10 +295,10 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) void printPropertyMetadata(daqProperty* property) { - enum DAQ_PropType type = daq_getPropType(property); + enum daqExample_propertyType propertyType = daq_getPropType(property); // Strings - printName(property); + printDapPropertyName(property); daqString* description = NULL; daqProperty_getDescription(property, &description); @@ -309,8 +309,8 @@ void printPropertyMetadata(daqProperty* property) } // Booleans - printVisible(property); - printReadOnly(property); + printDaqPropertyVisible(property); + printDaqPropertyReadOnly(property); // Value Type daqCoreType coreType = daqCtUndefined; @@ -325,19 +325,19 @@ void printPropertyMetadata(daqProperty* property) if (defaultValue != NULL) daqReleaseRef(defaultValue); - if (type == dictionary) + if (propertyType == daqExample_propertyType_dictionary) { daqProperty_getKeyType(property, &coreType); printf("- Key type: %s\n", daqCoreTypeToString(coreType)); } - if (type == dictionary || type == list) + if (propertyType == daqExample_propertyType_dictionary || propertyType == daqExample_propertyType_list) { daqProperty_getItemType(property, &coreType); printf("- Item type: %s\n", daqCoreTypeToString(coreType)); } - if (type == integer || type == floatObject) + if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_floatObject) { daqNumber* min = NULL; daqNumber* max = NULL; @@ -346,16 +346,16 @@ void printPropertyMetadata(daqProperty* property) if (min != NULL) { printf("- Min value:"); - printNumber(min, type); + printNumber(min, propertyType); } if (max != NULL) { printf("- Max value:"); - printNumber(max, type); + printNumber(max, propertyType); } } - if (type == selection) + if (propertyType == daqExample_propertyType_selection) { daqBaseObject* temp = NULL; daqProperty_getSelectionValues(property, &temp); @@ -365,7 +365,7 @@ void printPropertyMetadata(daqProperty* property) daqReleaseRef(temp); } - if (type == sparseSelection) + if (propertyType == daqExample_propertyType_sparseSelection) { daqBaseObject* temp = NULL; daqProperty_getSelectionValues(property, &temp); @@ -375,7 +375,7 @@ void printPropertyMetadata(daqProperty* property) daqReleaseRef(temp); } - if (type == integer || type == string || type == floatObject) + if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_string || propertyType == daqExample_propertyType_floatObject) { daqList* temp = NULL; daqProperty_getSuggestedValues(property, &temp); @@ -388,60 +388,60 @@ void printPropertyMetadata(daqProperty* property) } } - if (type == integer || type == floatObject) + if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_floatObject) { daqUnit* unit = NULL; daqProperty_getUnit(property, &unit); if (unit != NULL) { - printUnit(unit); + printDaqUnit(unit); daqReleaseRef(unit); } } - if (type == function) + if (propertyType == daqExample_propertyType_function) { daqCallableInfo* callableInfo = NULL; daqProperty_getCallableInfo(property, &callableInfo); - printCallableInfo(callableInfo); + printDaqPropertyCallableInfo(callableInfo); daqReleaseRef(callableInfo); } } -void printUnit(daqUnit* unit) +void printDaqUnit(daqUnit* unit) { printf("- Unit:\n"); int64_t id = 0; daqUnit_getId(unit, &id); - if (id >-1) + if (id > -1) { printf(" -- Id: %lld\n", id); } daqString* value = NULL; daqUnit_getName(unit, &value); - if (value != NULL) + if (value != NULL && !isDaqStringEmpty(value)) { printDaqFormattedString(" -- Unit name: %s\n", value); daqReleaseRef(value); } daqUnit_getQuantity(unit, &value); - if (value != NULL) + if (value != NULL && !isDaqStringEmpty(value)) { printDaqFormattedString(" -- Quantity: %s\n", value); daqReleaseRef(value); } daqUnit_getSymbol(unit, &value); - if (value != NULL) + if (value != NULL && !isDaqStringEmpty(value)) { printDaqFormattedString(" -- Symbol: %s\n", value); daqReleaseRef(value); } } -void printCallableInfo(daqCallableInfo* callableInfo) +void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo) { daqList* arguments = NULL; daqCallableInfo_getArguments(callableInfo, &arguments); @@ -462,14 +462,25 @@ void printCallableInfo(daqCallableInfo* callableInfo) daqReleaseRef(temp); daqArgumentInfo_getName(value, &name); - printDaqFormattedString(" -- Argument name: %s\n", name); - daqReleaseRef(value); + printDaqFormattedString(" -- Argument: %s\n", name); daqReleaseRef(name); + + daqCoreType argumentType = daqCtUndefined; + daqArgumentInfo_getType(value, &argumentType); + printf(" -- Type: %s\n", daqCoreTypeToString(argumentType)); + + daqReleaseRef(value); } + daqReleaseRef(arguments); + + daqCoreType returnType = daqCtUndefined; + daqCallableInfo_getReturnType(callableInfo, &returnType); + if (returnType != daqCtUndefined) + printf(" -- Return type: %s\n", daqCoreTypeToString(returnType)); } -void printName(daqProperty* property) +void printDapPropertyName(daqProperty* property) { daqString* name = NULL; daqProperty_getName(property, &name); @@ -477,29 +488,29 @@ void printName(daqProperty* property) daqReleaseRef(name); } -void printVisible(daqProperty* property) +void printDaqPropertyVisible(daqProperty* property) { uint8_t visible = False; daqProperty_getVisible(property, &visible); printf("- Visible: %s\n", visible == True ? "True" : "False"); } -void printReadOnly(daqProperty* property) +void printDaqPropertyReadOnly(daqProperty* property) { uint8_t readOnly = False; daqProperty_getReadOnly(property, &readOnly); printf("- Read only: %s\n", readOnly == True ? "True" : "False"); } -void printNumber(daqNumber* number, enum DAQ_PropType type) +void printNumber(daqNumber* number, enum daqExample_propertyType type) { - if (type == integer) + if (type == daqExample_propertyType_integer) { int64_t value = 0; daqNumber_getIntValue(number, &value); printf("%lld\n", value); } - else if(type == floatObject) + else if(type == daqExample_propertyType_floatObject) { double value = 0.0; daqNumber_getFloatValue(number, &value); @@ -562,7 +573,7 @@ void printDaqList(daqBaseObject* value, daqCoreType itemType) daqReleaseRef(valueList); } -void printRatio(struct Ratio native) +void printDaqRatio(struct daqExample_Ratio native) { printf("Ratio:\n"); printf(" - Denominator: %lld\n", native.denominator); diff --git a/examples/util_headers/daq_utils.h b/examples/util_headers/daq_utils.h index ea1be61..daecd52 100644 --- a/examples/util_headers/daq_utils.h +++ b/examples/util_headers/daq_utils.h @@ -58,6 +58,11 @@ static inline daqErrCode calculateSampleRate(daqSizeT* sampleRate, daqRatio* tic */ static inline int checkIsLinearRule(daqDataRule* dataRule); +/* + * Function checks if the daqString object contains an empty string ("") + */ +static inline uint8_t isDaqStringEmpty(daqString* string); + void daqSleepMs(int milliseconds) { #ifdef _WIN32 @@ -378,3 +383,10 @@ static inline int checkIsLinearRule(daqDataRule* dataRule) return dataRuleType == daqDataRuleTypeLinear; } + +static inline uint8_t isDaqStringEmpty(daqString* string) +{ + daqConstCharPtr stringConstChar; + daqString_getCharPtr(string, &stringConstChar); + return (strcmp(stringConstChar, "") == 0); +} From dba5b555ac4fbad9852267532fe2440705a6d853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 11 Feb 2026 11:50:03 +0100 Subject: [PATCH 098/103] Updated naming schemes in examples and removed redundant file --- examples/CMakeLists.txt | 3 +-- examples/advanced_conversions_example.c | 7 ++++--- examples/basic_conversions_example.c | 12 ++++++------ examples/metadata_read_example.c | 23 ----------------------- 4 files changed, 11 insertions(+), 34 deletions(-) delete mode 100644 examples/metadata_read_example.c diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 13d1f15..36dd9b4 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,8 +13,7 @@ set(EXAMPLE_SOURCES create_and_read_sample_rate_buffers.c simple_properties_display_handling.c basic_conversions_example.c - advanced_conversions_example.c - metadata_read_example.c) + advanced_conversions_example.c) foreach(src ${EXAMPLE_SOURCES}) get_filename_component(exec_name ${src} NAME_WLE) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index 8ac7fff..33e7696 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -1,5 +1,7 @@ /* - * + * Example that shows how to create conversion functions for custom defined in openDAQ. + * Functions demonstrate conversions to and from openDAQ structure to its + * equivalent in native C. */ #include @@ -40,8 +42,7 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) daqReleaseRef(temp); temp = daqExample_toDaqString("z"); - daqStruct_get(daq, temp, & - tempObj); + daqStruct_get(daq, temp, &tempObj); daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); native.z = daqExample_fromDaqInteger((daqInteger*) tempMid); daqReleaseRef(tempMid); diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c index fbb8169..7629503 100644 --- a/examples/basic_conversions_example.c +++ b/examples/basic_conversions_example.c @@ -7,17 +7,17 @@ int main() { // Integer example int64_t i = 10; - daqInteger* daqInt = daqExample_toDaqInteger(i); - int64_t i2 = daqExample_fromDaqInteger(daqInt); + daqInteger* daqIn = daqExample_toDaqInteger(i); + int64_t i2 = daqExample_fromDaqInteger(daqIn); printf("Integer is equal: %s\n", i == i2 ? "True": "False"); - daqReleaseRef(daqInt); + daqReleaseRef(daqIn); // Float example double j = 1.0; - daqFloatObject* daqFloat = daqExample_toDaqFloat(j); - double j2 = daqExample_fromDaqFloat(daqFloat); + daqFloatObject* daqFl = daqExample_toDaqFloat(j); + double j2 = daqExample_fromDaqFloat(daqFl); printf("Float is equal: %s\n", j == j2 ? "True" : "False"); - daqReleaseRef(daqFloat); + daqReleaseRef(daqFl); // String example char* k = "check"; diff --git a/examples/metadata_read_example.c b/examples/metadata_read_example.c deleted file mode 100644 index 86a865d..0000000 --- a/examples/metadata_read_example.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - */ -#include - -// - -int main() -{ - daqInstance* simulatorInstance = NULL; - setupSimulator(&simulatorInstance); - - daqInstance* instance = NULL; - daqDevice* simulator = NULL; - addSimulator(&simulator, &instance); - - - - daqReleaseRef(simulator); - daqReleaseRef(instance); - daqReleaseRef(simulatorInstance); - return 0; -} \ No newline at end of file From 404d520b8d61fc7b5a19dea4119855bdf203f713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 11 Feb 2026 13:22:36 +0100 Subject: [PATCH 099/103] Updated structure of the advanced converisons example --- examples/advanced_conversions_example.c | 90 +++++++++------------- examples/util_headers/daq_c_conversions.h | 6 +- examples/util_headers/daq_example_utils.h | 44 +++++------ examples/util_headers/daq_property_utils.h | 8 +- 4 files changed, 64 insertions(+), 84 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index 33e7696..83344ee 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -6,9 +6,9 @@ #include -struct Coordinates; +struct daqExample_Coordinates; -enum ComponentStatusTypeEnum; +enum daqExample_ComponentStatusTypeEnum; // Struct conversion /* @@ -18,9 +18,9 @@ enum ComponentStatusTypeEnum; * from C to openDAQ a pointer to the TypeManager is needed because * of the way openDAQ structs are implemented. */ -struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) +struct daqExample_Coordinates daqExample_fromDaqCoordinates(daqStruct* daq) { - struct Coordinates native = { 0,0,0 }; + struct daqExample_Coordinates native = { 0,0,0 }; daqBaseObject* tempObj = NULL; daqBaseObject* tempMid = NULL; @@ -52,7 +52,7 @@ struct Coordinates daq_fromDaqCoordinates(daqStruct* daq) return native; } -daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeManager) +daqStruct* daqExample_toDaqCoordinates(struct daqExample_Coordinates native, daqTypeManager* typeManager) { daqStructBuilder* builder = NULL; daqStructBuilder_createStructBuilder(&builder, daqExample_toDaqString("DAQ_Coordinates"), typeManager); @@ -94,20 +94,18 @@ daqStruct* daq_toDaqCoordinates(struct Coordinates native, daqTypeManager* typeM * from C to openDAQ a pointer to the TypeManager is needed because * of the way openDAQ enumeration is implemented. */ -enum ComponentStatusTypeEnum daq_fromDaqCompStatusTypeEnum(daqEnumeration* daq) +enum daqExample_ComponentStatusTypeEnum daqExample_fromDaqCompStatusTypeEnum(daqEnumeration* daq) { - enum ComponentStatusTypeEnum native = Error; + enum daqExample_ComponentStatusTypeEnum native = daqExample_ComponentStatusType_Error; int64_t temp = -1; daqEnumeration_getIntValue(daq, &temp); - // Sanity check - if (temp < 2 && temp >= 0) - native = temp; + native = temp; return native; } -daqEnumeration* daq_toCompStatusTypeEnum(enum ComponentStatusTypeEnum native, daqTypeManager* typeManager) +daqEnumeration* daqExample_toCompStatusTypeEnum(enum daqExample_ComponentStatusTypeEnum native, daqTypeManager* typeManager) { daqEnumeration* daq = NULL; daqInteger* tempInt = daqExample_toDaqInteger(native); @@ -124,60 +122,42 @@ int main() { daqInstance* simulatorInstance = NULL; setupSimulator(&simulatorInstance); - addCustomTypes(simulatorInstance); - addCustomStructAndEnumProp(simulatorInstance); + daqExmaple_addCustomTypes(simulatorInstance); + daqExample_addCustomStructAndEnumProp((daqDevice*)simulatorInstance); daqInstance* instance = NULL; daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - - daqComponentStatusContainer* statusContainer = NULL; - daqComponent_getStatusContainer((daqComponent*)simulator, &statusContainer); - daqString* tempStr = daqExample_toDaqString("ConnectionStatus"); - daqEnumeration* temp = NULL; - daqComponentStatusContainer_getStatus(statusContainer, tempStr, &temp); - daqReleaseRef(tempStr); - - enum ComponentStatusTypeEnum status = daq_fromDaqCompStatusTypeEnum(temp); - printf("Status is: %d\n", status); - daqReleaseRef(temp); - daqProperty* currentPosition = NULL; - daqStruct* tempStruct = NULL; - struct Coordinates nativeCoordinates = {4, 4, 4}; - daqContext* context = NULL; daqComponent_getContext((daqComponent*)simulator, &context); daqTypeManager* typeMan = NULL; daqContext_getTypeManager(context, &typeMan); - tempStr = daqExample_toDaqString("DAQ_CurrentPosition"); - daqPropertyObject_getProperty((daqPropertyObject*) simulator,tempStr, ¤tPosition); - daqReleaseRef(tempStr); - daqBaseObject* tempObj = NULL; - daqProperty_getValue(currentPosition, &tempObj); - daqReleaseRef(currentPosition); - if (tempObj != NULL) - { - daqQueryInterface(tempObj, DAQ_STRUCT_INTF_ID, &tempStruct); - daqReleaseRef(tempObj); - nativeCoordinates = daq_fromDaqCoordinates(tempStruct); - - printf("x: %lld,\ny: %lld,\nz: %lld\n", nativeCoordinates.x, nativeCoordinates.y, nativeCoordinates.z); - - daqStruct* tempStruct2 = daq_toDaqCoordinates(nativeCoordinates, typeMan); - uint8_t check = False; - daqBaseObject_equals(tempStruct, tempStruct2, &check); - - if (check) - printf("OpenDAQ structs are the same after being translated to C and back."); - else - printf("Structs are different!"); - - daqReleaseRef(typeMan); - daqReleaseRef(tempStruct); - daqReleaseRef(tempStruct2); - } + enum daqExample_ComponentStatusTypeEnum enumStatusType = daqExample_ComponentStatusType_Error; + daqEnumeration* daqEnum = daqExample_toCompStatusTypeEnum(enumStatusType, typeMan); + enum daqExample_ComponentStatusTypeEnum enumStatusType2 = daqExample_fromDaqCompStatusTypeEnum(daqEnum); + + uint8_t check = enumStatusType == enumStatusType2; + + if (check) + printf("Structs are the same after transforming them to and from openDAQ.\n"); + else + printf("Structs are different!\n"); + + struct daqExample_Coordinates nativeCoordinates = {4, 4, 4}; + daqStruct* tempStruct = daqExample_toDaqCoordinates(nativeCoordinates, typeMan); + struct daqExample_Coordinates nativeCoordinates2 = daqExample_fromDaqCoordinates(tempStruct); + + check = nativeCoordinates.x == nativeCoordinates2.x && nativeCoordinates.y == nativeCoordinates2.y && nativeCoordinates.z == nativeCoordinates2.z; + + if (check) + printf("Enums are the same after transforming them to and from openDAQ.\n"); + else + printf("Enums are different!\n"); + + daqReleaseRef(typeMan); + daqReleaseRef(tempStruct); daqReleaseRef(simulator); daqReleaseRef(instance); diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 573802d..72071b0 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -203,7 +203,7 @@ struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq) daqRatio* daqExample_toDaqRatio(struct daqExample_Ratio native) { - daqRatio** daq = NULL; - daqRatio_createRatio(daq, native.numerator, native.denominator); - return *daq; + daqRatio* daq = NULL; + daqRatio_createRatio(&daq, native.numerator, native.denominator); + return daq; } diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index 166aa43..578f79f 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -1,7 +1,7 @@ #include // Custom struct type -struct Coordinates +struct daqExample_Coordinates { int64_t x; int64_t y; @@ -9,15 +9,15 @@ struct Coordinates }; // Standard enum -enum ComponentStatusTypeEnum +enum daqExample_ComponentStatusTypeEnum { - Ok = 0, - Warning, - Error + daqExample_ComponentStatusType_Ok = 0, + daqExample_ComponentStatusType_Warning, + daqExample_ComponentStatusType_Error }; // Adds Coodinates struct and ComponentStatusTypeEnum to types in Type Manager -void addCoordinateStructToTypeManager(daqContext* context) +void daqExample_addCoordinateStructToTypeManager(daqContext* context) { daqTypeManager* typeManager = NULL; daqContext_getTypeManager(context, &typeManager); @@ -25,14 +25,14 @@ void addCoordinateStructToTypeManager(daqContext* context) daqList* names = NULL; daqList_createList(&names); - daqString* temp = daq_toDaqString("x"); + daqString* temp = daqExample_toDaqString("x"); daqList_pushBack(names, (daqBaseObject*)temp); daqReleaseRef(temp); - temp = daq_toDaqString("y"); + temp = daqExample_toDaqString("y"); daqList_pushBack(names, (daqBaseObject*) temp); daqReleaseRef(temp); - temp = daq_toDaqString("z"); + temp = daqExample_toDaqString("z"); daqList_pushBack(names, (daqBaseObject*)temp); daqReleaseRef(temp); @@ -47,7 +47,7 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(simpleType); daqStructType* newType = NULL; - daqString* typeName = daq_toDaqString("DAQ_Coordinates"); + daqString* typeName = daqExample_toDaqString("DAQ_Coordinates"); daqStructType_createStructTypeNoDefaults(&newType, typeName, names, types); daqReleaseRef(typeName); @@ -58,33 +58,33 @@ void addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(typeManager); } -void addCustomStructAndEnumProp(daqDevice* device) +void daqExample_addCustomStructAndEnumProp(daqDevice* device) { daqTypeManager* typeMan = NULL; daqContext* context = NULL; daqComponent_getContext((daqComponent*)device, &context); daqContext_getTypeManager(context, &typeMan); daqStructBuilder* builder = NULL; - daqString* nameTemp = daq_toDaqString("DAQ_Coordinates"); + daqString* nameTemp = daqExample_toDaqString("DAQ_Coordinates"); daqStructBuilder_createStructBuilder(&builder, nameTemp, typeMan); daqReleaseRef(nameTemp); daqInteger* tempInt = NULL; daqString* temp = NULL; - temp = daq_toDaqString("x"); - tempInt = daq_toDaqInteger(2); + temp = daqExample_toDaqString("x"); + tempInt = daqExample_toDaqInteger(2); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); - temp = daq_toDaqString("y"); - tempInt = daq_toDaqInteger(3); + temp = daqExample_toDaqString("y"); + tempInt = daqExample_toDaqInteger(3); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); - temp = daq_toDaqString("z"); - tempInt = daq_toDaqInteger(4); + temp = daqExample_toDaqString("z"); + tempInt = daqExample_toDaqInteger(4); daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); daqReleaseRef(temp); daqReleaseRef(tempInt); @@ -92,7 +92,7 @@ void addCustomStructAndEnumProp(daqDevice* device) daqStruct* coordinatesStruct = NULL; daqStructBuilder_build(builder, &coordinatesStruct); - nameTemp = daq_toDaqString("DAQ_CurrentPosition"); + nameTemp = daqExample_toDaqString("DAQ_CurrentPosition"); daqPropertyBuilder* structBuilder = NULL; daqPropertyBuilder_createStructPropertyBuilder(&structBuilder, nameTemp,coordinatesStruct); daqProperty* structProp = NULL; @@ -100,9 +100,9 @@ void addCustomStructAndEnumProp(daqDevice* device) daqPropertyObject_addProperty((daqPropertyObject*)device, structProp); } -void addCustomTypes(daqInstance* instance) +void daqExmaple_addCustomTypes(daqInstance* instance) { daqContext* context = NULL; - daqComponent_getContext(instance, &context); - addCoordinateStructToTypeManager(context); + daqComponent_getContext((daqComponent*)instance, &context); + daqExample_addCoordinateStructToTypeManager(context); } \ No newline at end of file diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 0d4e3c4..85d4fae 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -29,7 +29,7 @@ void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo); void printDapPropertyName(daqProperty* property); void printDaqPropertyVisible(daqProperty* property); void printDaqPropertyReadOnly(daqProperty* property); -void printNumber(daqNumber* number, enum daqExample_propertyType type); +void printDaqNumber(daqNumber* number, enum daqExample_propertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); void printDaqList(daqBaseObject* value, daqCoreType itemType); void printDaqRatio(struct daqExample_Ratio native); @@ -346,12 +346,12 @@ void printPropertyMetadata(daqProperty* property) if (min != NULL) { printf("- Min value:"); - printNumber(min, propertyType); + printDaqNumber(min, propertyType); } if (max != NULL) { printf("- Max value:"); - printNumber(max, propertyType); + printDaqNumber(max, propertyType); } } @@ -502,7 +502,7 @@ void printDaqPropertyReadOnly(daqProperty* property) printf("- Read only: %s\n", readOnly == True ? "True" : "False"); } -void printNumber(daqNumber* number, enum daqExample_propertyType type) +void printDaqNumber(daqNumber* number, enum daqExample_propertyType type) { if (type == daqExample_propertyType_integer) { From 823ec87df5bfdfaf9cd8d27a4fdf3a84dbd97a1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 12 Feb 2026 09:42:07 +0100 Subject: [PATCH 100/103] Addressing code review pt.1 --- examples/advanced_conversions_example.c | 1 - examples/basic_conversions_example.c | 3 +- examples/simple_properties_display_handling.c | 15 ++-- examples/util_headers/daq_c_conversions.h | 46 ++++++----- examples/util_headers/daq_example_utils.h | 78 +++++++++++-------- examples/util_headers/daq_property_utils.h | 30 +++---- 6 files changed, 89 insertions(+), 84 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index 83344ee..1498873 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -123,7 +123,6 @@ int main() daqInstance* simulatorInstance = NULL; setupSimulator(&simulatorInstance); daqExmaple_addCustomTypes(simulatorInstance); - daqExample_addCustomStructAndEnumProp((daqDevice*)simulatorInstance); daqInstance* instance = NULL; daqDevice* simulator = NULL; diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c index 7629503..6ce44f3 100644 --- a/examples/basic_conversions_example.c +++ b/examples/basic_conversions_example.c @@ -1,5 +1,6 @@ /* - * Example that displays Conversions between native C types and their openDAQ equvalents. + * Example that demonstrates conversions between native C types + * and their openDAQ equvalents. */ #include diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index abdc24a..5f6d6a7 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -4,7 +4,7 @@ */ #include -void recursive(daqPropertyObject* propertyObject) +void printPropertyTree(daqPropertyObject* propertyObject) { daqList* visibleProperties = NULL; daqPropertyObject_getVisibleProperties(propertyObject, &visibleProperties); @@ -26,23 +26,20 @@ void recursive(daqPropertyObject* propertyObject) daqBaseObject* propertyValue; daqProperty_getValue(property, &propertyValue); + + printPropertyMetadata(property); if (valueType == daqCtObject) { - daqString* name = NULL; - daqProperty_getName(property, &name); - printDaqFormattedString("- Property name: %s -\n", name); - daqReleaseRef(name); - + printf("---\n"); daqPropertyObject* childPropertyObject = NULL; daqQueryInterface(propertyValue, DAQ_PROPERTY_OBJECT_INTF_ID, &childPropertyObject); - recursive(childPropertyObject); + printPropertyTree(childPropertyObject); printf("---\n\n"); daqReleaseRef(childPropertyObject); } else { - printPropertyMetadata(property); printf("- Value: "); printPropertyValue(propertyValue, property); printf("\n"); @@ -64,7 +61,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - recursive((daqPropertyObject*) simulator); + printPropertyTree((daqPropertyObject*) simulator); daqReleaseRef(simulator); daqReleaseRef(instance); diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index 72071b0..c75d0f6 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -134,12 +134,11 @@ daqFloatObject* daqExample_toDaqFloat(daqFloat native) struct daqExample_ComplexNumber daqExample_fromDaqComplex(daqComplexNumber* daq) { - struct daqExample_ComplexNumber native = { 0, 0 }; - double tempDouble = 0; - daqComplexNumber_getReal(daq, &tempDouble); - native.real = tempDouble; - daqComplexNumber_getImaginary(daq, &tempDouble); - native.imaginary = tempDouble; + double real; + double complex; + daqComplexNumber_getReal(daq, &real); + daqComplexNumber_getImaginary(daq, &complex); + struct daqExample_ComplexNumber native = { real, complex }; return native; } @@ -152,18 +151,18 @@ daqComplexNumber* daqExample_toDaqComplex(struct daqExample_ComplexNumber* nativ struct daqExample_Range daqExample_fromDaqRange(daqRange* daq) { - struct daqExample_Range native = { 0, 0 }; - daqNumber* temp; - daqRange_getLowValue(daq, &temp); - double intermmidiate = 0; - daqNumber_getFloatValue(temp, &intermmidiate); - native.min = intermmidiate; - daqReleaseRef(temp); - - daqRange_getHighValue(daq, &temp); - daqNumber_getFloatValue(temp, &intermmidiate); - native.max = intermmidiate; - daqReleaseRef(temp); + daqNumber* number = NULL; + double min = 0; + double max = 0; + + daqRange_getLowValue(daq, &number); + daqNumber_getFloatValue(number, &min); + daqReleaseRef(number); + + daqRange_getHighValue(daq, &number); + daqNumber_getFloatValue(number, &max); + struct daqExample_Range native = { min, max }; + daqReleaseRef(number); return native; } @@ -192,12 +191,11 @@ daqRange* daqExample_toDaqRange(struct daqExample_Range native) struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq) { - struct daqExample_Ratio native = { 0,0 }; - int64_t temp = 0; - daqRatio_getDenominator(daq, &temp); - native.denominator = temp; - daqRatio_getNumerator(daq, &temp); - native.numerator = temp; + int64_t denominator = 0; + int64_t numerator = 0; + daqRatio_getDenominator(daq, &denominator); + daqRatio_getNumerator(daq, &numerator); + struct daqExample_Ratio native = { denominator, numerator }; return native; } diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index 578f79f..d578efd 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -1,3 +1,6 @@ +/* + * Disclamer: + */ #include // Custom struct type @@ -25,16 +28,17 @@ void daqExample_addCoordinateStructToTypeManager(daqContext* context) daqList* names = NULL; daqList_createList(&names); - daqString* temp = daqExample_toDaqString("x"); + daqString* name = daqExample_toDaqString("x"); + daqList_pushBack(names, (daqBaseObject*) name); + daqReleaseRef(name); - daqList_pushBack(names, (daqBaseObject*)temp); - daqReleaseRef(temp); - temp = daqExample_toDaqString("y"); - daqList_pushBack(names, (daqBaseObject*) temp); - daqReleaseRef(temp); - temp = daqExample_toDaqString("z"); - daqList_pushBack(names, (daqBaseObject*)temp); - daqReleaseRef(temp); + name = daqExample_toDaqString("y"); + daqList_pushBack(names, (daqBaseObject*) name); + daqReleaseRef(name); + + name = daqExample_toDaqString("z"); + daqList_pushBack(names, (daqBaseObject*) name); + daqReleaseRef(name); daqSimpleType* simpleType = NULL; daqSimpleType_createSimpleType(&simpleType, daqCtInt); @@ -64,40 +68,46 @@ void daqExample_addCustomStructAndEnumProp(daqDevice* device) daqContext* context = NULL; daqComponent_getContext((daqComponent*)device, &context); daqContext_getTypeManager(context, &typeMan); + daqStructBuilder* builder = NULL; - daqString* nameTemp = daqExample_toDaqString("DAQ_Coordinates"); - daqStructBuilder_createStructBuilder(&builder, nameTemp, typeMan); - daqReleaseRef(nameTemp); - daqInteger* tempInt = NULL; - daqString* temp = NULL; - - temp = daqExample_toDaqString("x"); - tempInt = daqExample_toDaqInteger(2); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daqExample_toDaqString("y"); - tempInt = daqExample_toDaqInteger(3); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); - - temp = daqExample_toDaqString("z"); - tempInt = daqExample_toDaqInteger(4); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); + daqString* name = daqExample_toDaqString("DAQ_Coordinates"); + daqStructBuilder_createStructBuilder(&builder, name, typeMan); + daqReleaseRef(name); + + daqInteger* value = NULL; + daqString* fieldName = NULL; + + fieldName = daqExample_toDaqString("x"); + value = daqExample_toDaqInteger(2); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); + daqReleaseRef(fieldName); + daqReleaseRef(value); + + fieldName = daqExample_toDaqString("y"); + value = daqExample_toDaqInteger(3); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); + daqReleaseRef(fieldName); + daqReleaseRef(value); + + fieldName = daqExample_toDaqString("z"); + value = daqExample_toDaqInteger(4); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); + daqReleaseRef(fieldName); + daqReleaseRef(value); daqStruct* coordinatesStruct = NULL; daqStructBuilder_build(builder, &coordinatesStruct); - nameTemp = daqExample_toDaqString("DAQ_CurrentPosition"); + name = daqExample_toDaqString("DAQ_CurrentPosition"); daqPropertyBuilder* structBuilder = NULL; - daqPropertyBuilder_createStructPropertyBuilder(&structBuilder, nameTemp,coordinatesStruct); + daqPropertyBuilder_createStructPropertyBuilder(&structBuilder, name, coordinatesStruct); daqProperty* structProp = NULL; daqPropertyBuilder_build(structBuilder, &structProp); daqPropertyObject_addProperty((daqPropertyObject*)device, structProp); + + daqReleaseRef(structProp); + daqReleaseRef(structBuilder); + daqReleaseRef(builder); } void daqExmaple_addCustomTypes(daqInstance* instance) diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 85d4fae..b0231cc 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -1,6 +1,6 @@ #include -enum daqExample_propertyType +enum daqExample_PropertyType { daqExample_propertyType_selection, daqExample_propertyType_sparseSelection, @@ -16,20 +16,20 @@ enum daqExample_propertyType daqExample_propertyType_dictionary, daqExample_propertyType_object, daqExample_porpertyType_complexNumber, - daqExample_propertyType_oh_no + daqExample_propertyType_unknown }; void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); char* daqCoreTypeToString(daqCoreType type); -enum daqExample_propertyType daq_getPropType(daqProperty* property); +enum daqExample_PropertyType daq_getPropType(daqProperty* property); void printPropertyValue(daqBaseObject* value, daqProperty* property); void printPropertyMetadata(daqProperty* property); void printDaqUnit(daqUnit* unit); void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo); -void printDapPropertyName(daqProperty* property); +void printDaqPropertyName(daqProperty* property); void printDaqPropertyVisible(daqProperty* property); void printDaqPropertyReadOnly(daqProperty* property); -void printDaqNumber(daqNumber* number, enum daqExample_propertyType type); +void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); void printDaqList(daqBaseObject* value, daqCoreType itemType); void printDaqRatio(struct daqExample_Ratio native); @@ -140,7 +140,7 @@ char* daqCoreTypeToString(daqCoreType type) } } -enum daqExample_propertyType daq_getPropType(daqProperty* property) +enum daqExample_PropertyType daq_getPropType(daqProperty* property) { daqCoreType type = daqCtUndefined; daqProperty_getValueType(property, &type); @@ -201,13 +201,13 @@ enum daqExample_propertyType daq_getPropType(daqProperty* property) return daqExample_propertyType_dictionary; default: - return daqExample_propertyType_oh_no; + return daqExample_propertyType_unknown; } } void printPropertyValue(daqBaseObject* value, daqProperty* property) { - enum daqExample_propertyType propType = daq_getPropType(property); + enum daqExample_PropertyType propType = daq_getPropType(property); switch (propType) { @@ -295,10 +295,10 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) void printPropertyMetadata(daqProperty* property) { - enum daqExample_propertyType propertyType = daq_getPropType(property); + enum daqExample_PropertyType propertyType = daq_getPropType(property); // Strings - printDapPropertyName(property); + printDaqPropertyName(property); daqString* description = NULL; daqProperty_getDescription(property, &description); @@ -480,7 +480,7 @@ void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo) printf(" -- Return type: %s\n", daqCoreTypeToString(returnType)); } -void printDapPropertyName(daqProperty* property) +void printDaqPropertyName(daqProperty* property) { daqString* name = NULL; daqProperty_getName(property, &name); @@ -502,7 +502,7 @@ void printDaqPropertyReadOnly(daqProperty* property) printf("- Read only: %s\n", readOnly == True ? "True" : "False"); } -void printDaqNumber(daqNumber* number, enum daqExample_propertyType type) +void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type) { if (type == daqExample_propertyType_integer) { @@ -573,9 +573,9 @@ void printDaqList(daqBaseObject* value, daqCoreType itemType) daqReleaseRef(valueList); } -void printDaqRatio(struct daqExample_Ratio native) +void printDaqRatio(struct daqExample_Ratio ratio) { printf("Ratio:\n"); - printf(" - Denominator: %lld\n", native.denominator); - printf(" - Numerator: %lld\n", native.numerator); + printf(" - Denominator: %lld\n", ratio.denominator); + printf(" - Numerator: %lld\n", ratio.numerator); } From cf1ab7458b43858594deb097862486bad382ddaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Thu, 12 Feb 2026 16:26:13 +0100 Subject: [PATCH 101/103] Addressed core review --- examples/simple_properties_display_handling.c | 2 +- examples/util_headers/daq_property_utils.h | 630 +++++++++++------- 2 files changed, 403 insertions(+), 229 deletions(-) diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index 5f6d6a7..625e38d 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -41,7 +41,7 @@ void printPropertyTree(daqPropertyObject* propertyObject) else { printf("- Value: "); - printPropertyValue(propertyValue, property); + printPropertyValue(property, False); printf("\n"); } diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index b0231cc..5293b80 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -22,17 +22,28 @@ enum daqExample_PropertyType void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); char* daqCoreTypeToString(daqCoreType type); enum daqExample_PropertyType daq_getPropType(daqProperty* property); -void printPropertyValue(daqBaseObject* value, daqProperty* property); +void printPropertyValue(daqProperty* property, daqBool defaultValue); void printPropertyMetadata(daqProperty* property); -void printDaqUnit(daqUnit* unit); -void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo); -void printDaqPropertyName(daqProperty* property); -void printDaqPropertyVisible(daqProperty* property); -void printDaqPropertyReadOnly(daqProperty* property); void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); void printDaqList(daqBaseObject* value, daqCoreType itemType); void printDaqRatio(struct daqExample_Ratio native); +void printSelectedListValue(daqProperty* property, daqBool defaultValue); +void printSelectedDictValue(daqProperty* property, daqBool defaultValue); +void printDaqPropertyName(daqProperty* property); +void printDaqPropertyDescription(daqProperty* property); +void printDaqPropertyVisible(daqProperty* property); +void printDaqPropertyReadOnly(daqProperty* property); +void printDaqPropertyValueType(daqProperty* property); +void printDaqPropertyDefaultValue(daqProperty* property); +void printDaqPropertyKeyType(daqProperty* property); +void printDaqPropertyItemType(daqProperty* property); +void printDaqPropertyMinMaxValue(daqProperty* property, enum daqExample_PropertyType propertyType); +void printDaqPropertySelectionValues(daqProperty* property); +void printDaqPropertySparseSelectionValues(daqProperty* property); +void printDaqPropertySuggestedValues(daqProperty* property); +void printDaqPropertyUnit(daqProperty* property); +void printDaqPropertyCallableInfo(daqProperty* property); void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType) { @@ -95,9 +106,9 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge case daqCtDict: default: { - daqConstCharPtr* value = NULL; - daqBaseObject_toString(selectedValueObj, value); - printf("%s\n", *value); + daqConstCharPtr value = NULL; + daqBaseObject_toString(selectedValueObj, &value); + printf("%s\n", value); return; } } @@ -205,65 +216,59 @@ enum daqExample_PropertyType daq_getPropType(daqProperty* property) } } -void printPropertyValue(daqBaseObject* value, daqProperty* property) +void printPropertyValue(daqProperty* property, daqBool defaultValue) { + daqBaseObject* value = NULL; + + if (defaultValue) + daqProperty_getDefaultValue(property, &value); + else + daqProperty_getValue(property, &value); + enum daqExample_PropertyType propType = daq_getPropType(property); switch (propType) { case daqExample_propertyType_integer: + { + printSimpleCoreTypeValue(value, daqCtInt); + break; + } case daqExample_propertyType_string: + { + printSimpleCoreTypeValue(value, daqCtString); + break; + } case daqExample_propertyType_boolean: + { + printSimpleCoreTypeValue(value, daqCtBool); + break; + } case daqExample_propertyType_floatObject: + { + printSimpleCoreTypeValue(value, daqCtFloat); + break; + } case daqExample_propertyType_ratio: { - daqCoreType valueType; - daqProperty_getValueType(property, &valueType); - printSimpleCoreTypeValue(value, valueType); + printSimpleCoreTypeValue(value, daqCtRatio); break; } case daqExample_propertyType_function: { printf("Function\n"); - break; + if (value != NULL) + daqReleaseRef(value); + return; } case daqExample_propertyType_selection: { - daqInteger* val = NULL; - daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &val); - - daqBaseObject* temp = NULL; - daqProperty_getSelectionValues(property, &temp); - daqList* selectionValues = NULL; - daqQueryInterface(temp, DAQ_LIST_INTF_ID, &selectionValues); - daqReleaseRef(temp); - - daqList_getItemAt(selectionValues, daqExample_fromDaqInteger(val), &temp); - daqReleaseRef(val); - daqReleaseRef(selectionValues); - - daqCoreType itemType = daqCtUndefined; - daqProperty_getItemType(property, &itemType); - printSimpleCoreTypeValue(temp, itemType); - daqReleaseRef(temp); + printSelectedListValue(property, defaultValue); break; } case daqExample_propertyType_sparseSelection: { - daqBaseObject* temp = NULL; - daqDict* selectionValues = NULL; - - daqProperty_getSelectionValues(property, &temp); - daqQueryInterface(temp, DAQ_DICT_INTF_ID, &selectionValues); - daqReleaseRef(temp); - - daqDict_get(selectionValues, value, &temp); - daqReleaseRef(selectionValues); - - daqCoreType type = daqCtUndefined; - daqProperty_getItemType(property, &type); - printSimpleCoreTypeValue(temp, type); - daqReleaseRef(temp); + printSelectedDictValue(property, defaultValue); break; } case daqExample_propertyType_dictionary: @@ -284,222 +289,134 @@ void printPropertyValue(daqBaseObject* value, daqProperty* property) } case daqExample_propertyType_object: printf("Object\n"); - break; + if (value != NULL) + daqReleaseRef(value); + return; default: { printf("Property Value\n"); - break; + if (value != NULL) + daqReleaseRef(value); + return; } } + daqReleaseRef(value); } void printPropertyMetadata(daqProperty* property) { enum daqExample_PropertyType propertyType = daq_getPropType(property); - // Strings + // Name + /* + * Mandatory field for all types of properties. + * Never empty. + */ printDaqPropertyName(property); - daqString* description = NULL; - daqProperty_getDescription(property, &description); - if (description != NULL) - { - printDaqFormattedString("- Description: %s\n", description); - daqReleaseRef(description); - } - - // Booleans + // Description + /* + * Optional field for all types of properties. + * Can be empty. + */ + printDaqPropertyDescription(property); + + // Visible + /* + * Mandatory field for all types of properties. + * When calling getAllVisibleProperties will always be True. + * Never empty. + */ printDaqPropertyVisible(property); + + // Read-only + /* + * Mandatory field for all types of properties. + * Never empty. + */ printDaqPropertyReadOnly(property); // Value Type - daqCoreType coreType = daqCtUndefined; - daqProperty_getValueType(property, &coreType); - printf("- Value type: %s\n", daqCoreTypeToString(coreType)); + /* + * Mandatory field for all types of properties. + * Never empty. + */ + printDaqPropertyValueType(property); // Default Value - daqBaseObject* defaultValue = NULL; - daqProperty_getDefaultValue(property, &defaultValue); - printf("- Default value: "); - printPropertyValue(defaultValue, property); - if (defaultValue != NULL) - daqReleaseRef(defaultValue); - + /* + * Mandatory field for all aside from + * Function and Procedure Properties. + * Will never be empty, aside from + * Function/Procedure Property where it is empty. + */ + printDaqPropertyDefaultValue(property); + + // Key type + /* + * Mandatory field for a Dictionary property. + * Will never be empty when required. + */ if (propertyType == daqExample_propertyType_dictionary) - { - daqProperty_getKeyType(property, &coreType); - printf("- Key type: %s\n", daqCoreTypeToString(coreType)); - } + printDaqPropertyKeyType(property); + // Item type + /* + * Mandatory field for Dictionary and List property. + * Will never be empty when required. + */ if (propertyType == daqExample_propertyType_dictionary || propertyType == daqExample_propertyType_list) - { - daqProperty_getItemType(property, &coreType); - printf("- Item type: %s\n", daqCoreTypeToString(coreType)); - } + printDaqPropertyItemType(property); + // Min/Max value + /* + * Optional field for Integer and Float Property. + * May be empty even in Integer or Float Property. + */ if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_floatObject) - { - daqNumber* min = NULL; - daqNumber* max = NULL; - daqProperty_getMinValue(property, &min); - daqProperty_getMaxValue(property, &max); - if (min != NULL) - { - printf("- Min value:"); - printDaqNumber(min, propertyType); - } - if (max != NULL) - { - printf("- Max value:"); - printDaqNumber(max, propertyType); - } - } + printDaqPropertyMinMaxValue(property, propertyType); + // Selection values (list) + /* + * Mandatory field for Selection Property. + * Will never be empty when it is required. + */ if (propertyType == daqExample_propertyType_selection) - { - daqBaseObject* temp = NULL; - daqProperty_getSelectionValues(property, &temp); - daqProperty_getItemType(property, &coreType); - printf("- Selection values:\n"); - printDaqList(temp, coreType); - daqReleaseRef(temp); - } + printDaqPropertySelectionValues(property); + // Selection values (dictionary) + /* + * Mandatory field for Sparse Selection Property. + * Will never be empty when it is required. + */ if (propertyType == daqExample_propertyType_sparseSelection) - { - daqBaseObject* temp = NULL; - daqProperty_getSelectionValues(property, &temp); - daqProperty_getItemType(property, &coreType); - printf("- Selection values: \n"); - printDaqDict(temp, daqCtInt, coreType); - daqReleaseRef(temp); - } + printDaqPropertySparseSelectionValues(property); + // Suggested values + /* + * Optional field for Integer, Float and String Property. + * Can be empty even in Integer, Float and String Property. + */ if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_string || propertyType == daqExample_propertyType_floatObject) - { - daqList* temp = NULL; - daqProperty_getSuggestedValues(property, &temp); - if (temp != NULL) - { - daqProperty_getValueType(property, &coreType); - printf("- Suggested values:\n"); - printDaqList((daqBaseObject*)temp, coreType); - daqReleaseRef(temp); - } - } + printDaqPropertySuggestedValues(property); + // Unit + /* + * Optional field for Integer and Float Property. + * Can be even in Integer and Float Property. + */ if (propertyType == daqExample_propertyType_integer || propertyType == daqExample_propertyType_floatObject) - { - daqUnit* unit = NULL; - daqProperty_getUnit(property, &unit); - if (unit != NULL) - { - printDaqUnit(unit); - daqReleaseRef(unit); - } - } - + printDaqPropertyUnit(property); + + // Callable info + /* + * Mandatoty field for Function and Procedure Property. + * Will never be empty when required. + * The return field within Callable Info will be defined + * only when the Property type is Function. + */ if (propertyType == daqExample_propertyType_function) - { - daqCallableInfo* callableInfo = NULL; - daqProperty_getCallableInfo(property, &callableInfo); - printDaqPropertyCallableInfo(callableInfo); - daqReleaseRef(callableInfo); - } -} - -void printDaqUnit(daqUnit* unit) -{ - printf("- Unit:\n"); - int64_t id = 0; - daqUnit_getId(unit, &id); - if (id > -1) - { - printf(" -- Id: %lld\n", id); - } - - daqString* value = NULL; - daqUnit_getName(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) - { - printDaqFormattedString(" -- Unit name: %s\n", value); - daqReleaseRef(value); - } - - daqUnit_getQuantity(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) - { - printDaqFormattedString(" -- Quantity: %s\n", value); - daqReleaseRef(value); - } - - daqUnit_getSymbol(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) - { - printDaqFormattedString(" -- Symbol: %s\n", value); - daqReleaseRef(value); - } -} - -void printDaqPropertyCallableInfo(daqCallableInfo* callableInfo) -{ - daqList* arguments = NULL; - daqCallableInfo_getArguments(callableInfo, &arguments); - - printf("- Callable info:\n"); - - daqSizeT count = 0; - daqList_getCount(arguments, &count); - - daqBaseObject* temp = NULL; - daqArgumentInfo* value = NULL; - daqString* name = NULL; - for (daqSizeT i = 0; i< count; i++) - { - // Arguments are a list of Argument Info Objects - daqList_getItemAt(arguments, i, &temp); - daqQueryInterface(temp, DAQ_ARGUMENT_INFO_INTF_ID, &value); - daqReleaseRef(temp); - - daqArgumentInfo_getName(value, &name); - printDaqFormattedString(" -- Argument: %s\n", name); - daqReleaseRef(name); - - daqCoreType argumentType = daqCtUndefined; - daqArgumentInfo_getType(value, &argumentType); - printf(" -- Type: %s\n", daqCoreTypeToString(argumentType)); - - daqReleaseRef(value); - } - - daqReleaseRef(arguments); - - daqCoreType returnType = daqCtUndefined; - daqCallableInfo_getReturnType(callableInfo, &returnType); - if (returnType != daqCtUndefined) - printf(" -- Return type: %s\n", daqCoreTypeToString(returnType)); -} - -void printDaqPropertyName(daqProperty* property) -{ - daqString* name = NULL; - daqProperty_getName(property, &name); - printDaqFormattedString("Name: %s\n", name); - daqReleaseRef(name); -} - -void printDaqPropertyVisible(daqProperty* property) -{ - uint8_t visible = False; - daqProperty_getVisible(property, &visible); - printf("- Visible: %s\n", visible == True ? "True" : "False"); -} - -void printDaqPropertyReadOnly(daqProperty* property) -{ - uint8_t readOnly = False; - daqProperty_getReadOnly(property, &readOnly); - printf("- Read only: %s\n", readOnly == True ? "True" : "False"); + printDaqPropertyCallableInfo(property); } void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type) @@ -579,3 +496,260 @@ void printDaqRatio(struct daqExample_Ratio ratio) printf(" - Denominator: %lld\n", ratio.denominator); printf(" - Numerator: %lld\n", ratio.numerator); } + +void printSelectedListValue(daqProperty* property, daqBool defaultValue) +{ + daqBaseObject* value = NULL; + + if (defaultValue) + daqProperty_getDefaultValue(property, &value); + else + daqProperty_getValue(property, &value); + + daqInteger* val = NULL; + daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &val); + + daqBaseObject* temp = NULL; + daqProperty_getSelectionValues(property, &temp); + daqList* selectionValues = NULL; + daqQueryInterface(temp, DAQ_LIST_INTF_ID, &selectionValues); + daqReleaseRef(temp); + + daqList_getItemAt(selectionValues, daqExample_fromDaqInteger(val), &temp); + daqReleaseRef(val); + daqReleaseRef(selectionValues); + + daqCoreType itemType = daqCtUndefined; + daqProperty_getItemType(property, &itemType); + printSimpleCoreTypeValue(temp, itemType); + daqReleaseRef(temp); + + daqReleaseRef(value); +} + +void printSelectedDictValue(daqProperty* property, daqBool defaultValue) +{ + daqBaseObject* value = NULL; + + if (defaultValue) + daqProperty_getDefaultValue(property, &value); + else + daqProperty_getValue(property, &value); + + daqBaseObject* temp = NULL; + daqDict* selectionValues = NULL; + + daqProperty_getSelectionValues(property, &temp); + daqQueryInterface(temp, DAQ_DICT_INTF_ID, &selectionValues); + daqReleaseRef(temp); + + daqDict_get(selectionValues, value, &temp); + daqReleaseRef(selectionValues); + + daqCoreType type = daqCtUndefined; + daqProperty_getItemType(property, &type); + printSimpleCoreTypeValue(temp, type); + daqReleaseRef(temp); + + daqReleaseRef(value); +} + +void printDaqPropertyName(daqProperty* property) +{ + daqString* name = NULL; + daqProperty_getName(property, &name); + printDaqFormattedString("Name: %s\n", name); + daqReleaseRef(name); +} + +void printDaqPropertyDescription(daqProperty* property) +{ + daqString* description = NULL; + daqProperty_getDescription(property, &description); + + if (description == NULL) + return; + + printDaqFormattedString("- Descriprion: %s\n", description); + daqReleaseRef(description); + +} + +void printDaqPropertyVisible(daqProperty* property) +{ + uint8_t visible = False; + daqProperty_getVisible(property, &visible); + printf("- Visible: %s\n", visible == True ? "True" : "False"); +} + +void printDaqPropertyReadOnly(daqProperty* property) +{ + uint8_t readOnly = False; + daqProperty_getReadOnly(property, &readOnly); + printf("- Read only: %s\n", readOnly == True ? "True" : "False"); +} + +void printDaqPropertyValueType(daqProperty* property) +{ + daqCoreType coreType = daqCtUndefined; + daqProperty_getValueType(property, &coreType); + printf("- Value type: %s\n", daqCoreTypeToString(coreType)); +} + +void printDaqPropertyDefaultValue(daqProperty* property) +{ + printf("- Default value:"); + printPropertyValue(property, True); +} + +void printDaqPropertyKeyType(daqProperty* property) +{ + daqCoreType coreType = daqCtUndefined; + daqProperty_getKeyType(property, &coreType); + printf("- Key type: %s\n", daqCoreTypeToString(coreType)); +} + +void printDaqPropertyItemType(daqProperty* property) +{ + daqCoreType coreType = daqCtUndefined; + daqProperty_getItemType(property, &coreType); + printf("- Item type: %s\n", daqCoreTypeToString(coreType)); +} + +void printDaqPropertyMinMaxValue(daqProperty* property, enum daqExample_PropertyType propertyType) +{ + daqNumber* min = NULL; + daqNumber* max = NULL; + daqProperty_getMinValue(property, &min); + daqProperty_getMaxValue(property, &max); + if (min != NULL) + { + printf("- Min value:"); + printDaqNumber(min, propertyType); + } + if (max != NULL) + { + printf("- Max value:"); + printDaqNumber(max, propertyType); + } +} + +void printDaqPropertySelectionValues(daqProperty* property) +{ + daqCoreType coreType = daqCtUndefined; + daqBaseObject* selectionValues = NULL; + daqProperty_getSelectionValues(property, &selectionValues); + daqProperty_getItemType(property, &coreType); + printf("- Selection values:\n"); + printDaqList(selectionValues, coreType); + daqReleaseRef(selectionValues); +} + +void printDaqPropertySparseSelectionValues(daqProperty* property) +{ + daqCoreType coreType = daqCtUndefined; + daqBaseObject* selectionValues = NULL; + daqProperty_getSelectionValues(property, &selectionValues); + daqProperty_getItemType(property, &coreType); + printf("- Selection values: \n"); + printDaqDict(selectionValues, daqCtInt, coreType); + daqReleaseRef(selectionValues); +} + +void printDaqPropertySuggestedValues(daqProperty* property) +{ + daqList* suggestedValues = NULL; + daqProperty_getSuggestedValues(property, &suggestedValues); + + if (suggestedValues == NULL) + return; + + daqCoreType coreType = daqCtUndefined; + daqProperty_getValueType(property, &coreType); + printf("- Suggested values:\n"); + printDaqList((daqBaseObject*) suggestedValues, coreType); + daqReleaseRef(suggestedValues); +} + +void printDaqPropertyUnit(daqProperty* property) +{ + daqUnit* unit = NULL; + daqProperty_getUnit(property, &unit); + + if (unit == NULL) + return; + + printf("- Unit:\n"); + int64_t id = 0; + daqUnit_getId(unit, &id); + if (id > -1) + { + printf(" -- Id: %lld\n", id); + } + + daqString* value = NULL; + daqUnit_getName(unit, &value); + if (value != NULL && !isDaqStringEmpty(value)) + { + printDaqFormattedString(" -- Unit name: %s\n", value); + daqReleaseRef(value); + } + + daqUnit_getQuantity(unit, &value); + if (value != NULL && !isDaqStringEmpty(value)) + { + printDaqFormattedString(" -- Quantity: %s\n", value); + daqReleaseRef(value); + } + + daqUnit_getSymbol(unit, &value); + if (value != NULL && !isDaqStringEmpty(value)) + { + printDaqFormattedString(" -- Symbol: %s\n", value); + daqReleaseRef(value); + } + daqReleaseRef(unit); +} + +void printDaqPropertyCallableInfo(daqProperty* property) +{ + daqCallableInfo* callableInfo = NULL; + daqProperty_getCallableInfo(property, &callableInfo); + daqList* arguments = NULL; + daqCallableInfo_getArguments(callableInfo, &arguments); + + printf("- Callable info:\n"); + + daqSizeT count = 0; + daqList_getCount(arguments, &count); + + daqBaseObject* temp = NULL; + daqArgumentInfo* value = NULL; + daqString* name = NULL; + for (daqSizeT i = 0; i< count; i++) + { + // Arguments are a list of Argument Info Objects + daqList_getItemAt(arguments, i, &temp); + daqQueryInterface(temp, DAQ_ARGUMENT_INFO_INTF_ID, &value); + daqReleaseRef(temp); + + daqArgumentInfo_getName(value, &name); + printDaqFormattedString(" -- Argument: %s\n", name); + daqReleaseRef(name); + + daqCoreType argumentType = daqCtUndefined; + daqArgumentInfo_getType(value, &argumentType); + printf(" -- Type: %s\n", daqCoreTypeToString(argumentType)); + + daqReleaseRef(value); + } + + daqReleaseRef(arguments); + + daqCoreType returnType = daqCtUndefined; + daqCallableInfo_getReturnType(callableInfo, &returnType); + if (returnType != daqCtUndefined) + printf(" -- Return type: %s\n", daqCoreTypeToString(returnType)); + + daqReleaseRef(callableInfo); +} From c5ffbb8096e4c9e401e1d87572baaa41fd037659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 13 Feb 2026 12:00:05 +0100 Subject: [PATCH 102/103] Code review addressed --- examples/advanced_conversions_example.c | 111 ++++++++---------- examples/simple_properties_display_handling.c | 2 +- examples/util_headers/daq_example_utils.h | 6 +- examples/util_headers/daq_property_utils.h | 26 ++-- 4 files changed, 70 insertions(+), 75 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index 1498873..092475a 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -5,11 +5,6 @@ */ #include - -struct daqExample_Coordinates; - -enum daqExample_ComponentStatusTypeEnum; - // Struct conversion /* * Conversion from and to daqStruct objects to C style structs. @@ -22,32 +17,32 @@ struct daqExample_Coordinates daqExample_fromDaqCoordinates(daqStruct* daq) { struct daqExample_Coordinates native = { 0,0,0 }; - daqBaseObject* tempObj = NULL; - daqBaseObject* tempMid = NULL; - - daqString* temp = daqExample_toDaqString("x"); - daqStruct_get(daq, temp, &tempObj); - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.x = daqExample_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); - - temp = daqExample_toDaqString("y"); - daqStruct_get(daq, temp, &tempObj); - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.y = daqExample_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); - - temp = daqExample_toDaqString("z"); - daqStruct_get(daq, temp, &tempObj); - daqQueryInterface(tempObj, DAQ_INTEGER_INTF_ID, &tempMid); - native.z = daqExample_fromDaqInteger((daqInteger*) tempMid); - daqReleaseRef(tempMid); - daqReleaseRef(tempObj); - daqReleaseRef(temp); + daqBaseObject* value = NULL; + daqBaseObject* integerValue = NULL; + + daqString* fieldName = daqExample_toDaqString("x"); + daqStruct_get(daq, fieldName, &value); + daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); + native.x = daqExample_fromDaqInteger((daqInteger*) integerValue); + daqReleaseRef(integerValue); + daqReleaseRef(value); + daqReleaseRef(fieldName); + + fieldName = daqExample_toDaqString("y"); + daqStruct_get(daq, fieldName, &value); + daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); + native.y = daqExample_fromDaqInteger((daqInteger*) integerValue); + daqReleaseRef(integerValue); + daqReleaseRef(value); + daqReleaseRef(fieldName); + + fieldName = daqExample_toDaqString("z"); + daqStruct_get(daq, fieldName, &value); + daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); + native.z = daqExample_fromDaqInteger((daqInteger*) integerValue); + daqReleaseRef(integerValue); + daqReleaseRef(value); + daqReleaseRef(fieldName); return native; } @@ -57,26 +52,26 @@ daqStruct* daqExample_toDaqCoordinates(struct daqExample_Coordinates native, daq daqStructBuilder* builder = NULL; daqStructBuilder_createStructBuilder(&builder, daqExample_toDaqString("DAQ_Coordinates"), typeManager); - daqString* temp = NULL; - daqInteger* tempInt = NULL; + daqString* fieldName = NULL; + daqInteger* fieldValue = NULL; - temp = daqExample_toDaqString("x"); - tempInt = daqExample_toDaqInteger(native.x); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); + fieldName = daqExample_toDaqString("x"); + fieldValue = daqExample_toDaqInteger(native.x); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); + daqReleaseRef(fieldName); + daqReleaseRef(fieldValue); - temp = daqExample_toDaqString("y"); - tempInt = daqExample_toDaqInteger(native.y); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); + fieldName = daqExample_toDaqString("y"); + fieldValue = daqExample_toDaqInteger(native.y); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); + daqReleaseRef(fieldName); + daqReleaseRef(fieldValue); - temp = daqExample_toDaqString("z"); - tempInt = daqExample_toDaqInteger(native.z); - daqStructBuilder_set(builder, temp, (daqBaseObject*) tempInt); - daqReleaseRef(temp); - daqReleaseRef(tempInt); + fieldName = daqExample_toDaqString("z"); + fieldValue = daqExample_toDaqInteger(native.z); + daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); + daqReleaseRef(fieldName); + daqReleaseRef(fieldValue); daqStruct* daq = NULL; daqStructBuilder_build(builder, &daq); @@ -130,32 +125,30 @@ int main() daqContext* context = NULL; daqComponent_getContext((daqComponent*)simulator, &context); - daqTypeManager* typeMan = NULL; - daqContext_getTypeManager(context, &typeMan); + daqTypeManager* typeManager = NULL; + daqContext_getTypeManager(context, &typeManager); enum daqExample_ComponentStatusTypeEnum enumStatusType = daqExample_ComponentStatusType_Error; - daqEnumeration* daqEnum = daqExample_toCompStatusTypeEnum(enumStatusType, typeMan); + daqEnumeration* daqEnum = daqExample_toCompStatusTypeEnum(enumStatusType, typeManager); enum daqExample_ComponentStatusTypeEnum enumStatusType2 = daqExample_fromDaqCompStatusTypeEnum(daqEnum); - - uint8_t check = enumStatusType == enumStatusType2; - if (check) + if (enumStatusType == enumStatusType2) printf("Structs are the same after transforming them to and from openDAQ.\n"); else printf("Structs are different!\n"); struct daqExample_Coordinates nativeCoordinates = {4, 4, 4}; - daqStruct* tempStruct = daqExample_toDaqCoordinates(nativeCoordinates, typeMan); + daqStruct* tempStruct = daqExample_toDaqCoordinates(nativeCoordinates, typeManager); struct daqExample_Coordinates nativeCoordinates2 = daqExample_fromDaqCoordinates(tempStruct); - - check = nativeCoordinates.x == nativeCoordinates2.x && nativeCoordinates.y == nativeCoordinates2.y && nativeCoordinates.z == nativeCoordinates2.z; - if (check) + if (nativeCoordinates.x == nativeCoordinates2.x && + nativeCoordinates.y == nativeCoordinates2.y && + nativeCoordinates.z == nativeCoordinates2.z) printf("Enums are the same after transforming them to and from openDAQ.\n"); else printf("Enums are different!\n"); - daqReleaseRef(typeMan); + daqReleaseRef(typeManager); daqReleaseRef(tempStruct); daqReleaseRef(simulator); diff --git a/examples/simple_properties_display_handling.c b/examples/simple_properties_display_handling.c index 625e38d..cc0cdfe 100644 --- a/examples/simple_properties_display_handling.c +++ b/examples/simple_properties_display_handling.c @@ -41,7 +41,7 @@ void printPropertyTree(daqPropertyObject* propertyObject) else { printf("- Value: "); - printPropertyValue(property, False); + printPropertyValueOrDefault(property, False); printf("\n"); } diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index d578efd..c4d412e 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -64,14 +64,14 @@ void daqExample_addCoordinateStructToTypeManager(daqContext* context) void daqExample_addCustomStructAndEnumProp(daqDevice* device) { - daqTypeManager* typeMan = NULL; + daqTypeManager* typeManager = NULL; daqContext* context = NULL; daqComponent_getContext((daqComponent*)device, &context); - daqContext_getTypeManager(context, &typeMan); + daqContext_getTypeManager(context, &typeManager); daqStructBuilder* builder = NULL; daqString* name = daqExample_toDaqString("DAQ_Coordinates"); - daqStructBuilder_createStructBuilder(&builder, name, typeMan); + daqStructBuilder_createStructBuilder(&builder, name, typeManager); daqReleaseRef(name); daqInteger* value = NULL; diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index 5293b80..f4cd5d6 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -22,7 +22,7 @@ enum daqExample_PropertyType void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); char* daqCoreTypeToString(daqCoreType type); enum daqExample_PropertyType daq_getPropType(daqProperty* property); -void printPropertyValue(daqProperty* property, daqBool defaultValue); +void printPropertyValueOrDefault(daqProperty* property, daqBool defaultValue); void printPropertyMetadata(daqProperty* property); void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); @@ -216,7 +216,7 @@ enum daqExample_PropertyType daq_getPropType(daqProperty* property) } } -void printPropertyValue(daqProperty* property, daqBool defaultValue) +void printPropertyValueOrDefault(daqProperty* property, daqBool defaultValue) { daqBaseObject* value = NULL; @@ -577,14 +577,14 @@ void printDaqPropertyDescription(daqProperty* property) void printDaqPropertyVisible(daqProperty* property) { - uint8_t visible = False; + daqBool visible = False; daqProperty_getVisible(property, &visible); printf("- Visible: %s\n", visible == True ? "True" : "False"); } void printDaqPropertyReadOnly(daqProperty* property) { - uint8_t readOnly = False; + daqBool readOnly = False; daqProperty_getReadOnly(property, &readOnly); printf("- Read only: %s\n", readOnly == True ? "True" : "False"); } @@ -599,7 +599,7 @@ void printDaqPropertyValueType(daqProperty* property) void printDaqPropertyDefaultValue(daqProperty* property) { printf("- Default value:"); - printPropertyValue(property, True); + printPropertyValueOrDefault(property, True); } void printDaqPropertyKeyType(daqProperty* property) @@ -626,11 +626,13 @@ void printDaqPropertyMinMaxValue(daqProperty* property, enum daqExample_Property { printf("- Min value:"); printDaqNumber(min, propertyType); + daqReleaseRef(min); } if (max != NULL) { printf("- Max value:"); printDaqNumber(max, propertyType); + daqReleaseRef(max); } } @@ -684,28 +686,28 @@ void printDaqPropertyUnit(daqProperty* property) daqUnit_getId(unit, &id); if (id > -1) { - printf(" -- Id: %lld\n", id); + printf(" -- Id: '%lld'\n", id); } daqString* value = NULL; daqUnit_getName(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) + if (value != NULL) { - printDaqFormattedString(" -- Unit name: %s\n", value); + printDaqFormattedString(" -- Unit name: '%s'\n", value); daqReleaseRef(value); } daqUnit_getQuantity(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) + if (value != NULL) { - printDaqFormattedString(" -- Quantity: %s\n", value); + printDaqFormattedString(" -- Quantity: '%s'\n", value); daqReleaseRef(value); } daqUnit_getSymbol(unit, &value); - if (value != NULL && !isDaqStringEmpty(value)) + if (value != NULL) { - printDaqFormattedString(" -- Symbol: %s\n", value); + printDaqFormattedString(" -- Symbol: '%s'\n", value); daqReleaseRef(value); } daqReleaseRef(unit); From 628ed9b6f9a75741a5c1b1e167192de4b729956b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 13 Feb 2026 15:37:13 +0100 Subject: [PATCH 103/103] Renaming in progress --- examples/advanced_conversions_example.c | 45 +++++++------- examples/basic_conversions_example.c | 24 ++++---- examples/util_headers/daq_c_conversions.h | 72 +++++++++++----------- examples/util_headers/daq_example_utils.h | 26 ++++---- examples/util_headers/daq_property_utils.h | 28 ++++----- 5 files changed, 96 insertions(+), 99 deletions(-) diff --git a/examples/advanced_conversions_example.c b/examples/advanced_conversions_example.c index 092475a..7543747 100644 --- a/examples/advanced_conversions_example.c +++ b/examples/advanced_conversions_example.c @@ -20,26 +20,26 @@ struct daqExample_Coordinates daqExample_fromDaqCoordinates(daqStruct* daq) daqBaseObject* value = NULL; daqBaseObject* integerValue = NULL; - daqString* fieldName = daqExample_toDaqString("x"); + daqString* fieldName = exdaq_toDaqString("x"); daqStruct_get(daq, fieldName, &value); daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); - native.x = daqExample_fromDaqInteger((daqInteger*) integerValue); + native.x = exdaq_fromDaqInteger((daqInteger*) integerValue); daqReleaseRef(integerValue); daqReleaseRef(value); daqReleaseRef(fieldName); - fieldName = daqExample_toDaqString("y"); + fieldName = exdaq_toDaqString("y"); daqStruct_get(daq, fieldName, &value); daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); - native.y = daqExample_fromDaqInteger((daqInteger*) integerValue); + native.y = exdaq_fromDaqInteger((daqInteger*) integerValue); daqReleaseRef(integerValue); daqReleaseRef(value); daqReleaseRef(fieldName); - fieldName = daqExample_toDaqString("z"); + fieldName = exdaq_toDaqString("z"); daqStruct_get(daq, fieldName, &value); daqQueryInterface(value, DAQ_INTEGER_INTF_ID, &integerValue); - native.z = daqExample_fromDaqInteger((daqInteger*) integerValue); + native.z = exdaq_fromDaqInteger((daqInteger*) integerValue); daqReleaseRef(integerValue); daqReleaseRef(value); daqReleaseRef(fieldName); @@ -50,25 +50,25 @@ struct daqExample_Coordinates daqExample_fromDaqCoordinates(daqStruct* daq) daqStruct* daqExample_toDaqCoordinates(struct daqExample_Coordinates native, daqTypeManager* typeManager) { daqStructBuilder* builder = NULL; - daqStructBuilder_createStructBuilder(&builder, daqExample_toDaqString("DAQ_Coordinates"), typeManager); + daqStructBuilder_createStructBuilder(&builder, exdaq_toDaqString("DAQ_Coordinates"), typeManager); daqString* fieldName = NULL; daqInteger* fieldValue = NULL; - fieldName = daqExample_toDaqString("x"); - fieldValue = daqExample_toDaqInteger(native.x); + fieldName = exdaq_toDaqString("x"); + fieldValue = exdaq_toDaqInteger(native.x); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); daqReleaseRef(fieldName); daqReleaseRef(fieldValue); - fieldName = daqExample_toDaqString("y"); - fieldValue = daqExample_toDaqInteger(native.y); + fieldName = exdaq_toDaqString("y"); + fieldValue = exdaq_toDaqInteger(native.y); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); daqReleaseRef(fieldName); daqReleaseRef(fieldValue); - fieldName = daqExample_toDaqString("z"); - fieldValue = daqExample_toDaqInteger(native.z); + fieldName = exdaq_toDaqString("z"); + fieldValue = exdaq_toDaqInteger(native.z); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) fieldValue); daqReleaseRef(fieldName); daqReleaseRef(fieldValue); @@ -91,25 +91,22 @@ daqStruct* daqExample_toDaqCoordinates(struct daqExample_Coordinates native, daq */ enum daqExample_ComponentStatusTypeEnum daqExample_fromDaqCompStatusTypeEnum(daqEnumeration* daq) { - enum daqExample_ComponentStatusTypeEnum native = daqExample_ComponentStatusType_Error; - int64_t temp = -1; - daqEnumeration_getIntValue(daq, &temp); + int64_t intValue = -1; + daqEnumeration_getIntValue(daq, &intValue); - native = temp; - - return native; + return intValue; } daqEnumeration* daqExample_toCompStatusTypeEnum(enum daqExample_ComponentStatusTypeEnum native, daqTypeManager* typeManager) { daqEnumeration* daq = NULL; - daqInteger* tempInt = daqExample_toDaqInteger(native); - daqString* temp = daqExample_toDaqString("ComponentStatusType"); + daqInteger* valueInt = exdaq_toDaqInteger(native); + daqString* valueName = exdaq_toDaqString("ComponentStatusType"); - daqEnumeration_createEnumerationWithIntValue(&daq, temp, tempInt, typeManager); + daqEnumeration_createEnumerationWithIntValue(&daq, valueName, valueInt, typeManager); - daqReleaseRef(temp); - daqReleaseRef(tempInt); + daqReleaseRef(valueName); + daqReleaseRef(valueInt); return daq; } diff --git a/examples/basic_conversions_example.c b/examples/basic_conversions_example.c index 6ce44f3..2f09588 100644 --- a/examples/basic_conversions_example.c +++ b/examples/basic_conversions_example.c @@ -8,43 +8,43 @@ int main() { // Integer example int64_t i = 10; - daqInteger* daqIn = daqExample_toDaqInteger(i); + daqInteger* daqIn = exdaq_toDaqInteger(i); int64_t i2 = daqExample_fromDaqInteger(daqIn); printf("Integer is equal: %s\n", i == i2 ? "True": "False"); daqReleaseRef(daqIn); // Float example double j = 1.0; - daqFloatObject* daqFl = daqExample_toDaqFloat(j); - double j2 = daqExample_fromDaqFloat(daqFl); + daqFloatObject* daqFl = exdaq_toDaqFloat(j); + double j2 = exdaq_fromDaqFloat(daqFl); printf("Float is equal: %s\n", j == j2 ? "True" : "False"); daqReleaseRef(daqFl); // String example char* k = "check"; - daqString* daqStr = daqExample_toDaqString(k); - char* k2 = daqExample_fromDaqString(daqStr); + daqString* daqStr = exdaq_toDaqString(k); + char* k2 = exdaq_fromDaqString(daqStr); printf("String is equal: %s\n", strcmp(k, k2) == 0 ? "True" : "False"); daqReleaseRef(daqStr); // Bool example uint8_t l = True; - daqBoolean* daqBl = daqExample_toDaqBoolean(l); - uint8_t l2 = daqExample_fromDaqBoolean(daqBl); + daqBoolean* daqBl = exdaq_toDaqBoolean(l); + uint8_t l2 = exdaq_fromDaqBoolean(daqBl); printf("Boolean is equal: %s\n", l == l2 ? "True" : "False"); daqReleaseRef(daqBl); // Complex Number example - struct daqExample_ComplexNumber m = { 1,5 }; - daqComplexNumber* daqComplex = daqExample_toDaqComplex(&m); - struct daqExample_ComplexNumber m2 = daqExample_fromDaqComplex(daqComplex); + struct exdaq_ComplexNumber m = { 1,5 }; + daqComplexNumber* daqComplex = exdaq_toDaqComplex(&m); + struct exdaq_ComplexNumber m2 = exdaq_fromDaqComplex(daqComplex); printf("Complex Number is equal: %s\n", ((m.imaginary == m2.imaginary) && (m.real == m2.real)) ? "True" : "False"); daqReleaseRef(daqComplex); // Range example struct daqExample_Range n = { 1,10 }; - daqRange* daqRng = daqExample_toDaqRange(n); - struct daqExample_Range n2 = daqExample_fromDaqRange(daqRng); + daqRange* daqRng = exdaq_toDaqRange(n); + struct daqExample_Range n2 = exdaq_fromDaqRange(daqRng); printf("Range is equal: %s\n", ((n.max == n2.max) && (n.min == n2.min)) ? "True" : "False"); daqReleaseRef(daqRng); } \ No newline at end of file diff --git a/examples/util_headers/daq_c_conversions.h b/examples/util_headers/daq_c_conversions.h index c75d0f6..cbaa40f 100644 --- a/examples/util_headers/daq_c_conversions.h +++ b/examples/util_headers/daq_c_conversions.h @@ -1,21 +1,21 @@ #include // Core struct type -struct daqExample_ComplexNumber +struct exdaq_ComplexNumber { double real; double imaginary; }; // Core struct type -struct daqExample_Range +struct exdaq_Range { double min; double max; }; // Core struct type -struct daqExample_Ratio +struct exdaq_Ratio { int64_t denominator; int64_t numerator; @@ -26,8 +26,8 @@ struct daqExample_Ratio * The following two funtions represent the conversion between the openDAQ native * daqInt type and its coresponding C integer type. */ -daqInt daqExample_fromDaqInteger(daqInteger* daq); -daqInteger* daqExample_toDaqInteger(daqInt native); +daqInt exdaq_fromDaqInteger(daqInteger* daq); +daqInteger* exdaq_toDaqInteger(daqInt native); // String conversion /* @@ -35,121 +35,121 @@ daqInteger* daqExample_toDaqInteger(daqInt native); * from C language (const char*). The function that converts to native C return a non-owning pointer. * Precautions should be taken, when using the received pointer. */ -char* daqExample_fromDaqString(daqString* daq); -daqString* daqExample_toDaqString(const char* native); +char* exdaq_fromDaqString(daqString* daq); +daqString* exdaq_toDaqString(const char* native); // Bool conversion /* * Conversion from and to openDAQ Boolean (daqString) core type from C language (uint8_t). */ -uint8_t daqExample_fromDaqBoolean(daqBoolean* daq); -daqBoolean* daqExample_toDaqBoolean(uint8_t native); +uint8_t exdaq_fromDaqBoolean(daqBoolean* daq); +daqBoolean* exdaq_toDaqBoolean(uint8_t native); // Float conversion /* *Conversion from and to openDAQ String (daqFloat) core type from C language (double). */ -daqFloat daqExample_fromDaqFloat(daqFloatObject* daq); -daqFloatObject* daqExample_toDaqFloat(daqFloat native); +daqFloat exdaq_fromDaqFloat(daqFloatObject* daq); +daqFloatObject* exdaq_toDaqFloat(daqFloat native); // Complex number conversion /* * Conversion from and to openDAQ Complex (daqComplex) core type * from C language (struct ComplexNumber). */ -struct daqExample_ComplexNumber daqExample_fromDaqComplex(daqComplexNumber* daq); -daqComplexNumber* daqExample_toDaqComplex(struct daqExample_ComplexNumber* native); +struct exdaq_ComplexNumber exdaq_fromDaqComplex(daqComplexNumber* daq); +daqComplexNumber* exdaq_toDaqComplex(struct exdaq_ComplexNumber* native); // Range conversion /* * Conversion from and to openDAQ Struct (daqRange) core type * from C language (struct Range). */ -struct daqExample_Range daqExample_fromDaqRange(daqRange* daq); -daqRange* daqExample_toDaqRange(struct daqExample_Range native); +struct exdaq_Range exdaq_fromDaqRange(daqRange* daq); +daqRange* exdaq_toDaqRange(struct exdaq_Range native); // Ratio conversion /* * Conversion from and to openDAQ Ratio Struct (daqRatio) * from C language (struct Ratio). */ -struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq); -daqRatio* daqExample_toDaqRatio(struct daqExample_Ratio native); +struct exdaq_Ratio exdaq_fromDaqRatio(daqRatio* daq); +daqRatio* exdaq_toDaqRatio(struct exdaq_Ratio native); -daqInt daqExample_fromDaqInteger(daqInteger* daq) +daqInt exdaq_fromDaqInteger(daqInteger* daq) { daqInt native = 0; daqInteger_getValue(daq, &native); return native; } -daqInteger* daqExample_toDaqInteger(daqInt native) +daqInteger* exdaq_toDaqInteger(daqInt native) { daqInteger* daq = NULL; daqInteger_createInteger(&daq, native); return daq; } -char* daqExample_fromDaqString(daqString* daq) +char* exdaq_fromDaqString(daqString* daq) { char* native = NULL; daqString_getCharPtr(daq, &native); return native; } -daqString* daqExample_toDaqString(const char* native) +daqString* exdaq_toDaqString(const char* native) { daqString* daq = NULL; daqString_createString(&daq, native); return daq; } -uint8_t daqExample_fromDaqBoolean(daqBoolean* daq) +uint8_t exdaq_fromDaqBoolean(daqBoolean* daq) { uint8_t native = 0; daqBoolean_getValue(daq, &native); return native; } -daqBoolean* daqExample_toDaqBoolean(uint8_t native) +daqBoolean* exdaq_toDaqBoolean(uint8_t native) { daqBoolean* daq = NULL; daqBoolean_createBoolean(&daq, native); return daq; } -daqFloat daqExample_fromDaqFloat(daqFloatObject* daq) +daqFloat exdaq_fromDaqFloat(daqFloatObject* daq) { daqFloat native = 0; daqFloatObject_getValue(daq, &native); return native; } -daqFloatObject* daqExample_toDaqFloat(daqFloat native) +daqFloatObject* exdaq_toDaqFloat(daqFloat native) { daqFloatObject* daq = 0; daqFloatObject_createFloatObject(&daq, native); return daq; } -struct daqExample_ComplexNumber daqExample_fromDaqComplex(daqComplexNumber* daq) +struct exdaq_ComplexNumber exdaq_fromDaqComplex(daqComplexNumber* daq) { double real; double complex; daqComplexNumber_getReal(daq, &real); daqComplexNumber_getImaginary(daq, &complex); - struct daqExample_ComplexNumber native = { real, complex }; + struct exdaq_ComplexNumber native = { real, complex }; return native; } -daqComplexNumber* daqExample_toDaqComplex(struct daqExample_ComplexNumber* native) +daqComplexNumber* exdaq_toDaqComplex(struct exdaq_ComplexNumber* native) { daqComplexNumber* daq = NULL; daqComplexNumber_createComplexNumber(&daq, native->real, native->imaginary); return daq; } -struct daqExample_Range daqExample_fromDaqRange(daqRange* daq) +struct exdaq_Range exdaq_fromDaqRange(daqRange* daq) { daqNumber* number = NULL; double min = 0; @@ -161,19 +161,19 @@ struct daqExample_Range daqExample_fromDaqRange(daqRange* daq) daqRange_getHighValue(daq, &number); daqNumber_getFloatValue(number, &max); - struct daqExample_Range native = { min, max }; + struct exdaq_Range native = { min, max }; daqReleaseRef(number); return native; } -daqRange* daqExample_toDaqRange(struct daqExample_Range native) +daqRange* exdaq_toDaqRange(struct exdaq_Range native) { daqRange* daq = NULL; daqNumber* lowValue = NULL; daqNumber* highValue = NULL; - daqFloatObject* lowFloat = daqExample_toDaqFloat(native.min); - daqFloatObject* highFloat = daqExample_toDaqFloat(native.max); + daqFloatObject* lowFloat = exdaq_toDaqFloat(native.min); + daqFloatObject* highFloat = exdaq_toDaqFloat(native.max); daqQueryInterface(lowFloat, DAQ_NUMBER_INTF_ID, &lowValue); daqQueryInterface(highFloat, DAQ_NUMBER_INTF_ID, &highValue); @@ -189,17 +189,17 @@ daqRange* daqExample_toDaqRange(struct daqExample_Range native) return daq; } -struct daqExample_Ratio daqExample_fromDaqRatio(daqRatio* daq) +struct exdaq_Ratio exdaq_fromDaqRatio(daqRatio* daq) { int64_t denominator = 0; int64_t numerator = 0; daqRatio_getDenominator(daq, &denominator); daqRatio_getNumerator(daq, &numerator); - struct daqExample_Ratio native = { denominator, numerator }; + struct exdaq_Ratio native = { denominator, numerator }; return native; } -daqRatio* daqExample_toDaqRatio(struct daqExample_Ratio native) +daqRatio* exdaq_toDaqRatio(struct exdaq_Ratio native) { daqRatio* daq = NULL; daqRatio_createRatio(&daq, native.numerator, native.denominator); diff --git a/examples/util_headers/daq_example_utils.h b/examples/util_headers/daq_example_utils.h index c4d412e..5f677fb 100644 --- a/examples/util_headers/daq_example_utils.h +++ b/examples/util_headers/daq_example_utils.h @@ -1,5 +1,5 @@ /* - * Disclamer: + * Disclamer: The following functions are */ #include @@ -28,15 +28,15 @@ void daqExample_addCoordinateStructToTypeManager(daqContext* context) daqList* names = NULL; daqList_createList(&names); - daqString* name = daqExample_toDaqString("x"); + daqString* name = exdaq_toDaqString("x"); daqList_pushBack(names, (daqBaseObject*) name); daqReleaseRef(name); - name = daqExample_toDaqString("y"); + name = exdaq_toDaqString("y"); daqList_pushBack(names, (daqBaseObject*) name); daqReleaseRef(name); - name = daqExample_toDaqString("z"); + name = exdaq_toDaqString("z"); daqList_pushBack(names, (daqBaseObject*) name); daqReleaseRef(name); @@ -51,7 +51,7 @@ void daqExample_addCoordinateStructToTypeManager(daqContext* context) daqReleaseRef(simpleType); daqStructType* newType = NULL; - daqString* typeName = daqExample_toDaqString("DAQ_Coordinates"); + daqString* typeName = exdaq_toDaqString("DAQ_Coordinates"); daqStructType_createStructTypeNoDefaults(&newType, typeName, names, types); daqReleaseRef(typeName); @@ -70,27 +70,27 @@ void daqExample_addCustomStructAndEnumProp(daqDevice* device) daqContext_getTypeManager(context, &typeManager); daqStructBuilder* builder = NULL; - daqString* name = daqExample_toDaqString("DAQ_Coordinates"); + daqString* name = exdaq_toDaqString("DAQ_Coordinates"); daqStructBuilder_createStructBuilder(&builder, name, typeManager); daqReleaseRef(name); daqInteger* value = NULL; daqString* fieldName = NULL; - fieldName = daqExample_toDaqString("x"); - value = daqExample_toDaqInteger(2); + fieldName = exdaq_toDaqString("x"); + value = exdaq_toDaqInteger(2); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); daqReleaseRef(fieldName); daqReleaseRef(value); - fieldName = daqExample_toDaqString("y"); - value = daqExample_toDaqInteger(3); + fieldName = exdaq_toDaqString("y"); + value = exdaq_toDaqInteger(3); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); daqReleaseRef(fieldName); daqReleaseRef(value); - fieldName = daqExample_toDaqString("z"); - value = daqExample_toDaqInteger(4); + fieldName = exdaq_toDaqString("z"); + value = exdaq_toDaqInteger(4); daqStructBuilder_set(builder, fieldName, (daqBaseObject*) value); daqReleaseRef(fieldName); daqReleaseRef(value); @@ -98,7 +98,7 @@ void daqExample_addCustomStructAndEnumProp(daqDevice* device) daqStruct* coordinatesStruct = NULL; daqStructBuilder_build(builder, &coordinatesStruct); - name = daqExample_toDaqString("DAQ_CurrentPosition"); + name = exdaq_toDaqString("DAQ_CurrentPosition"); daqPropertyBuilder* structBuilder = NULL; daqPropertyBuilder_createStructPropertyBuilder(&structBuilder, name, coordinatesStruct); daqProperty* structProp = NULL; diff --git a/examples/util_headers/daq_property_utils.h b/examples/util_headers/daq_property_utils.h index f4cd5d6..886cc2b 100644 --- a/examples/util_headers/daq_property_utils.h +++ b/examples/util_headers/daq_property_utils.h @@ -1,6 +1,6 @@ #include -enum daqExample_PropertyType +enum exdaq_PropertyType { daqExample_propertyType_selection, daqExample_propertyType_sparseSelection, @@ -21,13 +21,13 @@ enum daqExample_PropertyType void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType suggestedValuesItemType); char* daqCoreTypeToString(daqCoreType type); -enum daqExample_PropertyType daq_getPropType(daqProperty* property); +enum exdaq_PropertyType daq_getPropType(daqProperty* property); void printPropertyValueOrDefault(daqProperty* property, daqBool defaultValue); void printPropertyMetadata(daqProperty* property); -void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type); +void printDaqNumber(daqNumber* number, enum exdaq_PropertyType type); void printDaqDict(daqBaseObject* value, daqCoreType keyType, daqCoreType itemType); void printDaqList(daqBaseObject* value, daqCoreType itemType); -void printDaqRatio(struct daqExample_Ratio native); +void printDaqRatio(struct exdaq_Ratio native); void printSelectedListValue(daqProperty* property, daqBool defaultValue); void printSelectedDictValue(daqProperty* property, daqBool defaultValue); void printDaqPropertyName(daqProperty* property); @@ -38,7 +38,7 @@ void printDaqPropertyValueType(daqProperty* property); void printDaqPropertyDefaultValue(daqProperty* property); void printDaqPropertyKeyType(daqProperty* property); void printDaqPropertyItemType(daqProperty* property); -void printDaqPropertyMinMaxValue(daqProperty* property, enum daqExample_PropertyType propertyType); +void printDaqPropertyMinMaxValue(daqProperty* property, enum exdaq_PropertyType propertyType); void printDaqPropertySelectionValues(daqProperty* property); void printDaqPropertySparseSelectionValues(daqProperty* property); void printDaqPropertySuggestedValues(daqProperty* property); @@ -61,7 +61,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqFloatObject* value = NULL; daqQueryInterface(selectedValueObj, DAQ_FLOAT_OBJECT_INTF_ID, &value); - printf("%f\n", daqExample_fromDaqFloat(value)); + printf("%f\n", exdaq_fromDaqFloat(value)); daqReleaseRef(value); return; } @@ -69,7 +69,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqBoolean* value = NULL; daqQueryInterface(selectedValueObj, DAQ_BOOLEAN_INTF_ID, &value); - printf("%s\n", daqExample_fromDaqBoolean(value) == True ? "True" : "False"); + printf("%s\n", exdaq_fromDaqBoolean(value) == True ? "True" : "False"); daqReleaseRef(value); return; } @@ -85,7 +85,7 @@ void printSimpleCoreTypeValue(daqBaseObject* selectedValueObj, daqCoreType sugge { daqRatio* value = NULL; daqQueryInterface(selectedValueObj, DAQ_RATIO_INTF_ID, &value); - printDaqRatio(daqExample_fromDaqRatio(value)); + printDaqRatio(exdaq_fromDaqRatio(value)); daqReleaseRef(value); return; } @@ -151,7 +151,7 @@ char* daqCoreTypeToString(daqCoreType type) } } -enum daqExample_PropertyType daq_getPropType(daqProperty* property) +enum exdaq_PropertyType daq_getPropType(daqProperty* property) { daqCoreType type = daqCtUndefined; daqProperty_getValueType(property, &type); @@ -225,7 +225,7 @@ void printPropertyValueOrDefault(daqProperty* property, daqBool defaultValue) else daqProperty_getValue(property, &value); - enum daqExample_PropertyType propType = daq_getPropType(property); + enum exdaq_PropertyType propType = daq_getPropType(property); switch (propType) { @@ -305,7 +305,7 @@ void printPropertyValueOrDefault(daqProperty* property, daqBool defaultValue) void printPropertyMetadata(daqProperty* property) { - enum daqExample_PropertyType propertyType = daq_getPropType(property); + enum exdaq_PropertyType propertyType = daq_getPropType(property); // Name /* @@ -419,7 +419,7 @@ void printPropertyMetadata(daqProperty* property) printDaqPropertyCallableInfo(property); } -void printDaqNumber(daqNumber* number, enum daqExample_PropertyType type) +void printDaqNumber(daqNumber* number, enum exdaq_PropertyType type) { if (type == daqExample_propertyType_integer) { @@ -490,7 +490,7 @@ void printDaqList(daqBaseObject* value, daqCoreType itemType) daqReleaseRef(valueList); } -void printDaqRatio(struct daqExample_Ratio ratio) +void printDaqRatio(struct exdaq_Ratio ratio) { printf("Ratio:\n"); printf(" - Denominator: %lld\n", ratio.denominator); @@ -616,7 +616,7 @@ void printDaqPropertyItemType(daqProperty* property) printf("- Item type: %s\n", daqCoreTypeToString(coreType)); } -void printDaqPropertyMinMaxValue(daqProperty* property, enum daqExample_PropertyType propertyType) +void printDaqPropertyMinMaxValue(daqProperty* property, enum exdaq_PropertyType propertyType) { daqNumber* min = NULL; daqNumber* max = NULL;