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 01/51] 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 02/51] 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 03/51] 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 04/51] 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 05/51] 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 06/51] 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 07/51] 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 08/51] 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 09/51] 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 10/51] 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 11/51] 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 12/51] 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 13/51] 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 14/51] 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 15/51] 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 16/51] 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 17/51] 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 18/51] 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 19/51] 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 20/51] 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 21/51] 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 22/51] 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 23/51] 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 24/51] 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 25/51] 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 26/51] 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 27/51] 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 28/51] 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 29/51] 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 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 30/51] 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 31/51] 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 32/51] 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 33/51] 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 34/51] 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 35/51] 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 36/51] 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 37/51] 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 38/51] 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 39/51] 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 40/51] 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 41/51] 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 42/51] 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 43/51] 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 44/51] 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 e48d4c04cf47d111224d26443b4f85f2fd5c3b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Mon, 26 Jan 2026 16:37:15 +0100 Subject: [PATCH 45/51] Code review pt.1 --- examples/tree_traversal.c | 231 +++++++++++++++++++++----------------- 1 file changed, 126 insertions(+), 105 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index f54f401..6d80c93 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -8,81 +8,94 @@ enum ComponentType { - Unk = 0, - Device, - FunctionBlock, - IOFolder, - Channel, - Server, - Signal, - Folder, - Component, - SyncComponent, - InputPort + DaqUnknown = 0, + DaqDevice, + DaqFunctionBlock, + DaqIOFolder, + DaqChannel, + DaqServer, + DaqSignal, + DaqFolder, + DaqComponent, + DaqSyncComponent, + DaqInputPort }; -void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout); +void addDaqComponentToDict(daqDict* listOfAvailableComponents, daqComponent* component); -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 printComponentTree(daqDevice* headDevice, daqDict** listOfAvailableComponents, daqBool printout); -void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component); +void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); -void addDaqComponentToDict(daqDict* listOfAvailableDevices, daqComponent* component) +void printDaqFolder(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); + +void printDaqServer(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); + +void printDaqSyncComponent(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); + +void printInputPort(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); + +void printDaqSignal(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); + +void addDaqComponentToDict(daqDict* listOfAvailableComponents, daqComponent* component) { daqString* globalId = NULL; daqString* description = NULL; daqComponent_getGlobalId(component, &globalId); daqComponent_getDescription(component, &description); - daqDict_set(listOfAvailableDevices, globalId, description); + daqDict_set(listOfAvailableComponents, globalId, description); daqReleaseRef(globalId); daqReleaseRef(description); } -void componentTreePrintOut(daqDevice* headDevice, daqDict** listOfAvailableDevices, daqBool printout) +void printComponentTree(daqDevice* headDevice, daqDict** listOfAvailableComponents, daqBool printout) { - daqDict_createDict(listOfAvailableDevices); - printDaqDevice(headDevice, *listOfAvailableDevices, printout); + daqDict_createDict(listOfAvailableComponents); + printDaqDevice(headDevice, *listOfAvailableComponents, printout); } -void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool printout) +enum ComponentType getComponentType(daqBaseObject* baseObject) { - daqBaseObject* listMember = NULL; - daqSizeT count = 0; - daqList_getCount(list, &count); - if (count <= 0) - return; - daqList_getItemAt(list, 0, &listMember); - enum ComponentType componentType = Unk; + enum ComponentType componentType = DaqUnknown; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_DEVICE_INTF_ID) && (componentType == Unk)) - componentType = Device; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_DEVICE_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqDevice; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SERVER_INTF_ID) && (componentType == Unk)) - componentType = Server; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SERVER_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqServer; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == Unk)) - componentType = SyncComponent; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqSyncComponent; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == Unk)) - componentType = FunctionBlock; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqFunctionBlock; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_FOLDER_INTF_ID) && (componentType == Unk)) - componentType = Folder; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FOLDER_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqFolder; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_INPUT_PORT_INTF_ID) && (componentType == Unk)) - componentType = InputPort; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_INPUT_PORT_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqInputPort; - if (DAQ_SUPPORTS_INTERFACE(listMember, DAQ_SIGNAL_INTF_ID) && (componentType == Unk)) - componentType = Signal; + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SIGNAL_INTF_ID) && (componentType == DaqUnknown)) + componentType = DaqSignal; + + return componentType; +} + +void printObjectList(daqList* list, daqDict* listOfAvailableComponents, daqBool printout) +{ + daqBaseObject* listMember = NULL; + daqSizeT count = 0; + daqList_getCount(list, &count); + if (count <= 0) + return; + daqList_getItemAt(list, 0, &listMember); + + enum ComponentType componentType = getComponentType(listMember); daqSizeT numberOfObjects = 0; daqList_getCount(list, &numberOfObjects); @@ -93,66 +106,45 @@ void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool pri switch (componentType) { - case Device: + case DaqDevice: { - daqDevice* device = NULL; - daqQueryInterface(listMember, DAQ_DEVICE_INTF_ID, &device); - printDaqDevice(device, listOfAvailableDevices, printout); - daqReleaseRef(device); + printDaqDevice(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case Server: + case DaqServer: { - daqServer* server = NULL; - daqQueryInterface(listMember, DAQ_SERVER_INTF_ID, &server); - printDaqServer(server, listOfAvailableDevices, printout); - daqReleaseRef(server); + printDaqServer(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case SyncComponent: + case DaqSyncComponent: { - daqSyncComponent* syncComponent = NULL; - daqQueryInterface(listMember, DAQ_SYNC_COMPONENT_INTF_ID, &syncComponent); - printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); - daqReleaseRef(syncComponent); + printDaqSyncComponent(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case FunctionBlock: + case DaqFunctionBlock: { - daqFunctionBlock* functionBlock = NULL; - daqQueryInterface(listMember, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); - printDaqFunctionBlock(functionBlock, listOfAvailableDevices, printout); - daqReleaseRef(functionBlock); + printDaqFunctionBlock(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case Folder: + case DaqFolder: { - daqFolder* folder = NULL; - daqQueryInterface(listMember, DAQ_FOLDER_INTF_ID, &folder); - printDaqFolder(folder, listOfAvailableDevices, printout); - daqReleaseRef(folder); + printDaqFolder(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case InputPort: + case DaqInputPort: { - daqInputPort* inputPort = NULL; - daqQueryInterface(listMember, DAQ_INPUT_PORT_INTF_ID, &inputPort); - printInputPort(inputPort, listOfAvailableDevices, printout); - daqReleaseRef(inputPort); + printInputPort(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } - case Signal: + case DaqSignal: { - daqSignal* signal = NULL; - daqQueryInterface(listMember, DAQ_SIGNAL_INTF_ID, &signal); - printDaqSignal(signal, listOfAvailableDevices, printout); - daqReleaseRef(signal); + printDaqSignal(listMember, listOfAvailableComponents, printout); daqReleaseRef(listMember); break; } @@ -165,8 +157,10 @@ void printObjectList(daqList* list, daqDict* listOfAvailableDevices, daqBool pri } } -void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool printout) +void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqDevice* device = NULL; + daqQueryInterface(baseObject, DAQ_DEVICE_INTF_ID, &device); daqString* name = NULL; daqComponent_getName((daqComponent*)device, &name); @@ -175,13 +169,13 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqReleaseRef(name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) device); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) device); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) { - printDaqFolder(ioFolder, listOfAvailableDevices, printout); + printDaqFolder(ioFolder, listOfAvailableComponents, printout); daqReleaseRef(ioFolder); } @@ -189,7 +183,7 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqDevice_getSyncComponent(device, &syncComponent); if (syncComponent != NULL) { - printDaqSyncComponent(syncComponent, listOfAvailableDevices, printout); + printDaqSyncComponent(syncComponent, listOfAvailableComponents, printout); daqReleaseRef(syncComponent); } @@ -197,7 +191,7 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) { - printObjectList(devices, listOfAvailableDevices, printout); + printObjectList(devices, listOfAvailableComponents, printout); daqReleaseRef(devices); } @@ -205,7 +199,7 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, listOfAvailableDevices, printout); + printObjectList(functionBlocks, listOfAvailableComponents, printout); daqReleaseRef(functionBlocks); } @@ -213,13 +207,17 @@ void printDaqDevice(daqDevice* device, daqDict* listOfAvailableDevices, daqBool daqDevice_getServers(device, &servers); if (servers != NULL) { - printObjectList(servers, listOfAvailableDevices, printout); + printObjectList(servers, listOfAvailableComponents, printout); daqReleaseRef(servers); } + + daqReleaseRef(device); } -void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvailableDevices, daqBool printout) +void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqFunctionBlock* functionBlock = NULL; + daqQueryInterface(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); daqString* name = NULL; daqComponent_getName((daqComponent*)functionBlock, &name); @@ -228,13 +226,13 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail daqReleaseRef(name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) functionBlock); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) functionBlock); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, listOfAvailableDevices, printout); + printObjectList(functionBlocks, listOfAvailableComponents, printout); daqReleaseRef(functionBlocks); } @@ -242,7 +240,7 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); if (inputPorts != NULL) { - printObjectList(inputPorts, listOfAvailableDevices, printout); + printObjectList(inputPorts, listOfAvailableComponents, printout); daqReleaseRef(inputPorts); } @@ -250,13 +248,17 @@ void printDaqFunctionBlock(daqFunctionBlock* functionBlock, daqDict* listOfAvail daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, listOfAvailableDevices, printout); + printObjectList(listOfSignals, listOfAvailableComponents, printout); daqReleaseRef(listOfSignals); } + + daqReleaseRef(functionBlock); } -void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printout) +void printDaqFolder(daqBaseObject* baseObject, daqDict* listOfAllDevices, daqBool printout) { + daqFolder* folder = NULL; + daqQueryInterface(baseObject, DAQ_FOLDER_INTF_ID, &folder); daqString* name = NULL; daqComponent_getName((daqComponent*)folder, &name); @@ -275,10 +277,15 @@ void printDaqFolder(daqFolder* folder, daqDict* listOfAllDevices, daqBool printo printObjectList(listOfItems, listOfAllDevices, printout); daqReleaseRef(listOfItems); } + + daqReleaseRef(folder); } -void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBool printout) +void printDaqServer(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqServer* server = NULL; + daqQueryInterface(baseObject, DAQ_SERVER_INTF_ID, &server); + daqString* name = NULL; daqComponent_getName((daqComponent*)server, &name); @@ -287,19 +294,23 @@ void printDaqServer(daqServer* server, daqDict* listOfAllAvailableDevices, daqBo daqReleaseRef(name); - addDaqComponentToDict(listOfAllAvailableDevices, (daqComponent*) server); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) server); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, listOfAllAvailableDevices, printout); + printObjectList(listOfSignals, listOfAvailableComponents, printout); daqReleaseRef(listOfSignals); } + + daqReleaseRef(server); } -void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableDevices, daqBool printout) +void printDaqSyncComponent(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqSyncComponent* syncComp = NULL; + daqQueryInterface(baseObject, DAQ_SYNC_COMPONENT_INTF_ID, &syncComp); daqString* name = NULL; daqComponent_getName((daqComponent*)syncComp, &name); @@ -308,11 +319,15 @@ void printDaqSyncComponent(daqSyncComponent* syncComp, daqDict* listOfAvailableD daqReleaseRef(name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) syncComp); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) syncComp); + + daqReleaseRef(syncComp); } -void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, daqBool printout) +void printInputPort(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqInputPort* inputPort = NULL; + daqQueryInterface(baseObject, DAQ_INPUT_PORT_INTF_ID, &inputPort); daqString* name = NULL; daqComponent_getName((daqComponent*)inputPort, &name); @@ -321,11 +336,15 @@ void printInputPort(daqInputPort* inputPort, daqDict* listOfAvailableDevices, da daqReleaseRef(name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) inputPort); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) inputPort); + + daqReleaseRef(inputPort); } -void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool printout) +void printDaqSignal(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) { + daqSignal* signal = NULL; + daqQueryInterface(baseObject, DAQ_SIGNAL_INTF_ID, &signal); daqString* name = NULL; daqComponent_getName((daqComponent*)signal, &name); @@ -334,7 +353,9 @@ void printDaqSignal(daqSignal* signal, daqDict* listOfAvailableDevices, daqBool daqReleaseRef(name); - addDaqComponentToDict(listOfAvailableDevices, (daqComponent*) signal); + addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) signal); + + daqReleaseRef(signal); } int main() @@ -348,7 +369,7 @@ int main() daqDict* listOfComponents = NULL; - componentTreePrintOut((daqDevice*)instance, &listOfComponents, True); + printComponentTree((daqDevice*)instance, &listOfComponents, True); daqSizeT count = 0; daqDict_getCount(listOfComponents, &count); From 8afe7606958dacb159a060a956fef6f762b4a98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 10:03:28 +0100 Subject: [PATCH 46/51] Addressed code review --- examples/tree_traversal.c | 227 +++++++++++++++----------------------- 1 file changed, 86 insertions(+), 141 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 6d80c93..0cf0b4c 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -21,72 +21,58 @@ enum ComponentType DaqInputPort }; -void addDaqComponentToDict(daqDict* listOfAvailableComponents, daqComponent* component); +void printComponentTree(daqDevice* headDevice, daqBool printout); -void printComponentTree(daqDevice* headDevice, daqDict** listOfAvailableComponents, daqBool printout); +enum ComponentType getComponentType(daqBaseObject* baseObject); -void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqDevice(daqBaseObject* baseObject, daqBool printout); -void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout); -void printDaqFolder(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqFolder(daqBaseObject* baseObject, daqBool printout); -void printDaqServer(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqServer(daqBaseObject* baseObject, daqBool printout); -void printDaqSyncComponent(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqSyncComponent(daqBaseObject* baseObject, daqBool printout); -void printInputPort(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printInputPort(daqBaseObject* baseObject, daqBool printout); -void printDaqSignal(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout); +void printDaqSignal(daqBaseObject* baseObject, daqBool printout); -void addDaqComponentToDict(daqDict* listOfAvailableComponents, daqComponent* component) +void printComponentTree(daqDevice* headDevice, daqBool printout) { - daqString* globalId = NULL; - daqString* description = NULL; - daqComponent_getGlobalId(component, &globalId); - daqComponent_getDescription(component, &description); - - daqDict_set(listOfAvailableComponents, globalId, description); - - daqReleaseRef(globalId); - daqReleaseRef(description); -} - -void printComponentTree(daqDevice* headDevice, daqDict** listOfAvailableComponents, daqBool printout) -{ - daqDict_createDict(listOfAvailableComponents); - printDaqDevice(headDevice, *listOfAvailableComponents, printout); + printDaqDevice(headDevice, printout); } enum ComponentType getComponentType(daqBaseObject* baseObject) { enum ComponentType componentType = DaqUnknown; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_DEVICE_INTF_ID) && (componentType == DaqUnknown)) + if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_DEVICE_INTF_ID)) componentType = DaqDevice; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SERVER_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SERVER_INTF_ID)) componentType = DaqServer; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SYNC_COMPONENT_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SYNC_COMPONENT_INTF_ID)) componentType = DaqSyncComponent; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID)) componentType = DaqFunctionBlock; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FOLDER_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FOLDER_INTF_ID)) componentType = DaqFolder; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_INPUT_PORT_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_INPUT_PORT_INTF_ID)) componentType = DaqInputPort; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SIGNAL_INTF_ID) && (componentType == DaqUnknown)) + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SIGNAL_INTF_ID)) componentType = DaqSignal; return componentType; } -void printObjectList(daqList* list, daqDict* listOfAvailableComponents, daqBool printout) +void printObjectList(daqList* list, enum ComponentType compType, daqBool printout) { daqBaseObject* listMember = NULL; daqSizeT count = 0; @@ -95,12 +81,15 @@ void printObjectList(daqList* list, daqDict* listOfAvailableComponents, daqBool return; daqList_getItemAt(list, 0, &listMember); - enum ComponentType componentType = getComponentType(listMember); + enum ComponentType componentType = compType; + + if (componentType == DaqUnknown) + componentType = getComponentType(listMember); - daqSizeT numberOfObjects = 0; - daqList_getCount(list, &numberOfObjects); + count = 0; + daqList_getCount(list, &count); - for (daqSizeT i = 0; i < numberOfObjects; i++) + for (daqSizeT i = 0; i < count; i++) { daqList_getItemAt(list, i, &listMember); @@ -108,43 +97,43 @@ void printObjectList(daqList* list, daqDict* listOfAvailableComponents, daqBool { case DaqDevice: { - printDaqDevice(listMember, listOfAvailableComponents, printout); + printDaqDevice(listMember, printout); daqReleaseRef(listMember); break; } case DaqServer: { - printDaqServer(listMember, listOfAvailableComponents, printout); + printDaqServer(listMember, printout); daqReleaseRef(listMember); break; } case DaqSyncComponent: { - printDaqSyncComponent(listMember, listOfAvailableComponents, printout); + printDaqSyncComponent(listMember, printout); daqReleaseRef(listMember); break; } case DaqFunctionBlock: { - printDaqFunctionBlock(listMember, listOfAvailableComponents, printout); + printDaqFunctionBlock(listMember, printout); daqReleaseRef(listMember); break; } case DaqFolder: { - printDaqFolder(listMember, listOfAvailableComponents, printout); + printDaqFolder(listMember, printout); daqReleaseRef(listMember); break; } case DaqInputPort: { - printInputPort(listMember, listOfAvailableComponents, printout); + printInputPort(listMember, printout); daqReleaseRef(listMember); break; } case DaqSignal: { - printDaqSignal(listMember, listOfAvailableComponents, printout); + printDaqSignal(listMember, printout); daqReleaseRef(listMember); break; } @@ -157,25 +146,23 @@ void printObjectList(daqList* list, daqDict* listOfAvailableComponents, daqBool } } -void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printDaqDevice(daqBaseObject* baseObject, daqBool printout) { daqDevice* device = NULL; daqQueryInterface(baseObject, DAQ_DEVICE_INTF_ID, &device); - daqString* name = NULL; - daqComponent_getName((daqComponent*)device, &name); - - if (printout && name != NULL) - printDaqFormattedString("Device: %s\n", name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)device, &localId); - daqReleaseRef(name); + if (printout && localId != NULL) + printDaqFormattedString("Device: %s\n", localId); - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) device); + daqReleaseRef(localId); daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) { - printDaqFolder(ioFolder, listOfAvailableComponents, printout); + printDaqFolder(ioFolder, printout); daqReleaseRef(ioFolder); } @@ -183,7 +170,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponent daqDevice_getSyncComponent(device, &syncComponent); if (syncComponent != NULL) { - printDaqSyncComponent(syncComponent, listOfAvailableComponents, printout); + printDaqSyncComponent(syncComponent, printout); daqReleaseRef(syncComponent); } @@ -191,7 +178,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponent daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) { - printObjectList(devices, listOfAvailableComponents, printout); + printObjectList(devices, DaqDevice, printout); daqReleaseRef(devices); } @@ -199,7 +186,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponent daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, listOfAvailableComponents, printout); + printObjectList(functionBlocks, DaqFunctionBlock, printout); daqReleaseRef(functionBlocks); } @@ -207,32 +194,30 @@ void printDaqDevice(daqBaseObject* baseObject, daqDict* listOfAvailableComponent daqDevice_getServers(device, &servers); if (servers != NULL) { - printObjectList(servers, listOfAvailableComponents, printout); + printObjectList(servers, DaqServer, printout); daqReleaseRef(servers); } daqReleaseRef(device); } -void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout) { daqFunctionBlock* functionBlock = NULL; daqQueryInterface(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); - daqString* name = NULL; - daqComponent_getName((daqComponent*)functionBlock, &name); - - if (printout && name != NULL) - printDaqFormattedString("Function block: %s\n", name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)functionBlock, &localId); - daqReleaseRef(name); + if (printout && localId != NULL) + printDaqFormattedString("Function block: %s\n", localId); - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) functionBlock); + daqReleaseRef(localId); daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, listOfAvailableComponents, printout); + printObjectList(functionBlocks, DaqFunctionBlock, printout); daqReleaseRef(functionBlocks); } @@ -240,7 +225,7 @@ void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableCo daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); if (inputPorts != NULL) { - printObjectList(inputPorts, listOfAvailableComponents, printout); + printObjectList(inputPorts, DaqInputPort, printout); daqReleaseRef(inputPorts); } @@ -248,112 +233,101 @@ void printDaqFunctionBlock(daqBaseObject* baseObject, daqDict* listOfAvailableCo daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, listOfAvailableComponents, printout); + printObjectList(listOfSignals, DaqSignal, printout); daqReleaseRef(listOfSignals); } daqReleaseRef(functionBlock); } -void printDaqFolder(daqBaseObject* baseObject, daqDict* listOfAllDevices, daqBool printout) +void printDaqFolder(daqBaseObject* baseObject, daqBool printout) { daqFolder* folder = NULL; daqQueryInterface(baseObject, DAQ_FOLDER_INTF_ID, &folder); - daqString* name = NULL; - daqComponent_getName((daqComponent*)folder, &name); + daqString* localId = NULL; + daqComponent_getName((daqComponent*)folder, &localId); + if (printout && localId!=NULL) + printDaqFormattedString("Folder: %s\n", localId); - if (printout&& name!=NULL) - printDaqFormattedString("Folder: %s\n", name); - - daqReleaseRef(name); - - addDaqComponentToDict(listOfAllDevices, (daqComponent*) folder); + daqReleaseRef(localId); daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); if (listOfItems != NULL) { - printObjectList(listOfItems, listOfAllDevices, printout); + printObjectList(listOfItems, DaqUnknown, printout); daqReleaseRef(listOfItems); } daqReleaseRef(folder); } -void printDaqServer(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printDaqServer(daqBaseObject* baseObject, daqBool printout) { daqServer* server = NULL; daqQueryInterface(baseObject, DAQ_SERVER_INTF_ID, &server); - daqString* name = NULL; - daqComponent_getName((daqComponent*)server, &name); - - if(printout && name != NULL) - printDaqFormattedString("Server: %s\n", name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)server, &localId); - daqReleaseRef(name); + if(printout && localId != NULL) + printDaqFormattedString("Server: %s\n", localId); - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) server); + daqReleaseRef(localId); daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, listOfAvailableComponents, printout); + printObjectList(listOfSignals, DaqSignal, printout); daqReleaseRef(listOfSignals); } daqReleaseRef(server); } -void printDaqSyncComponent(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printDaqSyncComponent(daqBaseObject* baseObject, daqBool printout) { daqSyncComponent* syncComp = NULL; daqQueryInterface(baseObject, DAQ_SYNC_COMPONENT_INTF_ID, &syncComp); - daqString* name = NULL; - daqComponent_getName((daqComponent*)syncComp, &name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)syncComp, &localId); - if(printout && name != NULL) - printDaqFormattedString("Sync component: %s\n", name); + if(printout && localId != NULL) + printDaqFormattedString("Sync component: %s\n", localId); - daqReleaseRef(name); - - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) syncComp); + daqReleaseRef(localId); daqReleaseRef(syncComp); } -void printInputPort(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printInputPort(daqBaseObject* baseObject, daqBool printout) { daqInputPort* inputPort = NULL; daqQueryInterface(baseObject, DAQ_INPUT_PORT_INTF_ID, &inputPort); - daqString* name = NULL; - daqComponent_getName((daqComponent*)inputPort, &name); - - if (printout && name != NULL) - printDaqFormattedString("Input port: %s\n", name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)inputPort, &localId); - daqReleaseRef(name); + if (printout && localId != NULL) + printDaqFormattedString("Input port: %s\n", localId); - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) inputPort); + daqReleaseRef(localId); daqReleaseRef(inputPort); } -void printDaqSignal(daqBaseObject* baseObject, daqDict* listOfAvailableComponents, daqBool printout) +void printDaqSignal(daqBaseObject* baseObject, daqBool printout) { daqSignal* signal = NULL; daqQueryInterface(baseObject, DAQ_SIGNAL_INTF_ID, &signal); - daqString* name = NULL; - daqComponent_getName((daqComponent*)signal, &name); - - if (printout && name != NULL) - printDaqFormattedString("Signal: %s\n", name); + daqString* localId = NULL; + daqComponent_getLocalId((daqComponent*)signal, &localId); - daqReleaseRef(name); + if (printout && localId != NULL) + printDaqFormattedString("Signal: %s\n", localId); - addDaqComponentToDict(listOfAvailableComponents, (daqComponent*) signal); + daqReleaseRef(localId); daqReleaseRef(signal); } @@ -367,37 +341,8 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - daqDict* listOfComponents = NULL; - - printComponentTree((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); - } + printDaqDevice((daqDevice*) instance, True); - daqReleaseRef(iterator); - daqReleaseRef(keys); - daqReleaseRef(listOfComponents); daqReleaseRef(simulator); daqReleaseRef(instance); daqReleaseRef(simulatorInstance); From 30f33258d01017b5bc5751eede10f2434a5e5331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 10:04:34 +0100 Subject: [PATCH 47/51] Removed redundant function --- examples/tree_traversal.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 0cf0b4c..cf5a377 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -21,8 +21,6 @@ enum ComponentType DaqInputPort }; -void printComponentTree(daqDevice* headDevice, daqBool printout); - enum ComponentType getComponentType(daqBaseObject* baseObject); void printDaqDevice(daqBaseObject* baseObject, daqBool printout); @@ -39,11 +37,6 @@ void printInputPort(daqBaseObject* baseObject, daqBool printout); void printDaqSignal(daqBaseObject* baseObject, daqBool printout); -void printComponentTree(daqDevice* headDevice, daqBool printout) -{ - printDaqDevice(headDevice, printout); -} - enum ComponentType getComponentType(daqBaseObject* baseObject) { enum ComponentType componentType = DaqUnknown; From 7423063d0a2b4ac633d271be9dcb1fc81e5a4361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Tue, 27 Jan 2026 15:16:10 +0100 Subject: [PATCH 48/51] Addessed the second code review --- examples/tree_traversal.c | 177 ++++++++++++++++++-------------------- 1 file changed, 86 insertions(+), 91 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index cf5a377..99a7ca6 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -23,49 +23,47 @@ enum ComponentType enum ComponentType getComponentType(daqBaseObject* baseObject); -void printDaqDevice(daqBaseObject* baseObject, daqBool printout); +void printDaqDevice(daqBaseObject* baseObject, uint8_t indent); -void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout); +void printDaqFunctionBlock(daqBaseObject* baseObject, uint8_t indent); -void printDaqFolder(daqBaseObject* baseObject, daqBool printout); +void printDaqFolder(daqBaseObject* baseObject, uint8_t indent); -void printDaqServer(daqBaseObject* baseObject, daqBool printout); +void printDaqServer(daqBaseObject* baseObject, uint8_t indent); -void printDaqSyncComponent(daqBaseObject* baseObject, daqBool printout); +void printDaqSyncComponent(daqBaseObject* baseObject, uint8_t indent); -void printInputPort(daqBaseObject* baseObject, daqBool printout); +void printInputPort(daqBaseObject* baseObject, uint8_t indent); -void printDaqSignal(daqBaseObject* baseObject, daqBool printout); +void printDaqSignal(daqBaseObject* baseObject, uint8_t indent); enum ComponentType getComponentType(daqBaseObject* baseObject) { - enum ComponentType componentType = DaqUnknown; - if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_DEVICE_INTF_ID)) - componentType = DaqDevice; + return DaqDevice; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SERVER_INTF_ID)) - componentType = DaqServer; + return DaqServer; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SYNC_COMPONENT_INTF_ID)) - componentType = DaqSyncComponent; + return DaqSyncComponent; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID)) - componentType = DaqFunctionBlock; + return DaqFunctionBlock; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FOLDER_INTF_ID)) - componentType = DaqFolder; + return DaqFolder; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_INPUT_PORT_INTF_ID)) - componentType = DaqInputPort; + return DaqInputPort; else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SIGNAL_INTF_ID)) - componentType = DaqSignal; + return DaqSignal; - return componentType; + return DaqUnknown; } -void printObjectList(daqList* list, enum ComponentType compType, daqBool printout) +void printObjectList(daqList* list, enum ComponentType compType, uint8_t indent) { daqBaseObject* listMember = NULL; daqSizeT count = 0; @@ -73,11 +71,9 @@ void printObjectList(daqList* list, enum ComponentType compType, daqBool printou if (count <= 0) return; daqList_getItemAt(list, 0, &listMember); - - enum ComponentType componentType = compType; - if (componentType == DaqUnknown) - componentType = getComponentType(listMember); + if (compType == DaqUnknown) + compType = getComponentType(listMember); count = 0; daqList_getCount(list, &count); @@ -86,76 +82,62 @@ void printObjectList(daqList* list, enum ComponentType compType, daqBool printou { daqList_getItemAt(list, i, &listMember); - switch (componentType) + switch (compType) { case DaqDevice: - { - printDaqDevice(listMember, printout); - daqReleaseRef(listMember); + printDaqDevice(listMember, indent+1); break; - } + case DaqServer: - { - printDaqServer(listMember, printout); - daqReleaseRef(listMember); + printDaqServer(listMember, indent+1); break; - } + case DaqSyncComponent: - { - printDaqSyncComponent(listMember, printout); - daqReleaseRef(listMember); + printDaqSyncComponent(listMember, indent+1); break; - } + case DaqFunctionBlock: - { - printDaqFunctionBlock(listMember, printout); - daqReleaseRef(listMember); + printDaqFunctionBlock(listMember, indent+1); break; - } + case DaqFolder: - { - printDaqFolder(listMember, printout); - daqReleaseRef(listMember); + printDaqFolder(listMember, indent+1); break; - } + case DaqInputPort: - { - printInputPort(listMember, printout); - daqReleaseRef(listMember); + printInputPort(listMember, indent+1); break; - } + case DaqSignal: - { - printDaqSignal(listMember, printout); - daqReleaseRef(listMember); + printDaqSignal(listMember, indent+1); break; - } + default: - { - daqReleaseRef(listMember); break; } - } + + daqReleaseRef(listMember); } } -void printDaqDevice(daqBaseObject* baseObject, daqBool printout) +void printDaqDevice(daqBaseObject* baseObject, uint8_t indent) { daqDevice* device = NULL; daqQueryInterface(baseObject, DAQ_DEVICE_INTF_ID, &device); daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)device, &localId); - if (printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Device: %s\n", localId); - - daqReleaseRef(localId); + } daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) { - printDaqFolder(ioFolder, printout); + printDaqFolder(ioFolder, indent+1); daqReleaseRef(ioFolder); } @@ -163,7 +145,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqBool printout) daqDevice_getSyncComponent(device, &syncComponent); if (syncComponent != NULL) { - printDaqSyncComponent(syncComponent, printout); + printDaqSyncComponent(syncComponent, indent+1); daqReleaseRef(syncComponent); } @@ -171,7 +153,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqBool printout) daqDevice_getDevices(device, &devices, NULL); if (devices != NULL) { - printObjectList(devices, DaqDevice, printout); + printObjectList(devices, DaqDevice, indent+1); daqReleaseRef(devices); } @@ -179,7 +161,7 @@ void printDaqDevice(daqBaseObject* baseObject, daqBool printout) daqDevice_getFunctionBlocks(device, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, DaqFunctionBlock, printout); + printObjectList(functionBlocks, DaqFunctionBlock, indent+1); daqReleaseRef(functionBlocks); } @@ -187,30 +169,32 @@ void printDaqDevice(daqBaseObject* baseObject, daqBool printout) daqDevice_getServers(device, &servers); if (servers != NULL) { - printObjectList(servers, DaqServer, printout); + printObjectList(servers, DaqServer, indent+1); daqReleaseRef(servers); } + daqReleaseRef(localId); daqReleaseRef(device); } -void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout) +void printDaqFunctionBlock(daqBaseObject* baseObject, uint8_t indent) { daqFunctionBlock* functionBlock = NULL; daqQueryInterface(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID, &functionBlock); daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)functionBlock, &localId); - if (printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Function block: %s\n", localId); - - daqReleaseRef(localId); + } daqList* functionBlocks = NULL; daqFunctionBlock_getFunctionBlocks(functionBlock, &functionBlocks, NULL); if (functionBlocks != NULL) { - printObjectList(functionBlocks, DaqFunctionBlock, printout); + printObjectList(functionBlocks, DaqFunctionBlock, indent+1); daqReleaseRef(functionBlocks); } @@ -218,7 +202,7 @@ void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout) daqFunctionBlock_getInputPorts(functionBlock, &inputPorts, NULL); if (inputPorts != NULL) { - printObjectList(inputPorts, DaqInputPort, printout); + printObjectList(inputPorts, DaqInputPort, indent+1); daqReleaseRef(inputPorts); } @@ -226,37 +210,40 @@ void printDaqFunctionBlock(daqBaseObject* baseObject, daqBool printout) daqFunctionBlock_getSignals(functionBlock, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, DaqSignal, printout); + printObjectList(listOfSignals, DaqSignal, indent+1); daqReleaseRef(listOfSignals); } + daqReleaseRef(localId); daqReleaseRef(functionBlock); } -void printDaqFolder(daqBaseObject* baseObject, daqBool printout) +void printDaqFolder(daqBaseObject* baseObject, uint8_t indent) { daqFolder* folder = NULL; daqQueryInterface(baseObject, DAQ_FOLDER_INTF_ID, &folder); daqString* localId = NULL; - daqComponent_getName((daqComponent*)folder, &localId); + daqComponent_getName((daqComponent*) folder, &localId); - if (printout && localId!=NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Folder: %s\n", localId); - - daqReleaseRef(localId); + } daqList* listOfItems = NULL; daqFolder_getItems(folder, &listOfItems, NULL); if (listOfItems != NULL) { - printObjectList(listOfItems, DaqUnknown, printout); + printObjectList(listOfItems, DaqUnknown, indent+1); daqReleaseRef(listOfItems); } + daqReleaseRef(localId); daqReleaseRef(folder); } -void printDaqServer(daqBaseObject* baseObject, daqBool printout) +void printDaqServer(daqBaseObject* baseObject, uint8_t indent) { daqServer* server = NULL; daqQueryInterface(baseObject, DAQ_SERVER_INTF_ID, &server); @@ -264,64 +251,72 @@ void printDaqServer(daqBaseObject* baseObject, daqBool printout) daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)server, &localId); - if(printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Server: %s\n", localId); - - daqReleaseRef(localId); + } daqList* listOfSignals = NULL; daqServer_getSignals(server, &listOfSignals, NULL); if (listOfSignals != NULL) { - printObjectList(listOfSignals, DaqSignal, printout); + printObjectList(listOfSignals, DaqSignal, indent+1); daqReleaseRef(listOfSignals); } + daqReleaseRef(localId); daqReleaseRef(server); } -void printDaqSyncComponent(daqBaseObject* baseObject, daqBool printout) +void printDaqSyncComponent(daqBaseObject* baseObject, uint8_t indent) { daqSyncComponent* syncComp = NULL; daqQueryInterface(baseObject, DAQ_SYNC_COMPONENT_INTF_ID, &syncComp); daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)syncComp, &localId); - if(printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Sync component: %s\n", localId); + } daqReleaseRef(localId); - daqReleaseRef(syncComp); } -void printInputPort(daqBaseObject* baseObject, daqBool printout) +void printInputPort(daqBaseObject* baseObject, uint8_t indent) { daqInputPort* inputPort = NULL; daqQueryInterface(baseObject, DAQ_INPUT_PORT_INTF_ID, &inputPort); daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)inputPort, &localId); - if (printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Input port: %s\n", localId); + } daqReleaseRef(localId); - daqReleaseRef(inputPort); } -void printDaqSignal(daqBaseObject* baseObject, daqBool printout) +void printDaqSignal(daqBaseObject* baseObject, uint8_t indent) { daqSignal* signal = NULL; daqQueryInterface(baseObject, DAQ_SIGNAL_INTF_ID, &signal); daqString* localId = NULL; daqComponent_getLocalId((daqComponent*)signal, &localId); - if (printout && localId != NULL) + if (localId != NULL) + { + printf("%*c", indent, ' '); printDaqFormattedString("Signal: %s\n", localId); + } daqReleaseRef(localId); - daqReleaseRef(signal); } @@ -334,7 +329,7 @@ int main() daqDevice* simulator = NULL; addSimulator(&simulator, &instance); - printDaqDevice((daqDevice*) instance, True); + printDaqDevice((daqDevice*) instance, 0); daqReleaseRef(simulator); daqReleaseRef(instance); From 9f2e79477d2bb0c8db3cc5b8b023a0b22ea8a7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 30 Jan 2026 08:39:18 +0100 Subject: [PATCH 49/51] Addressed the requested minor changes --- examples/tree_traversal.c | 91 +++++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 33 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 99a7ca6..2429cd5 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -21,10 +21,14 @@ enum ComponentType DaqInputPort }; +void printDaqObject(daqBaseObject* baseObject, enum ComponentType compType, uint8_t indent); + enum ComponentType getComponentType(daqBaseObject* baseObject); void printDaqDevice(daqBaseObject* baseObject, uint8_t indent); +void printDaqChannel(daqBaseObject* baseObject, uint8_t indent); + void printDaqFunctionBlock(daqBaseObject* baseObject, uint8_t indent); void printDaqFolder(daqBaseObject* baseObject, uint8_t indent); @@ -37,6 +41,47 @@ void printInputPort(daqBaseObject* baseObject, uint8_t indent); void printDaqSignal(daqBaseObject* baseObject, uint8_t indent); +void printDaqObject(daqBaseObject* baseObject, enum ComponentType compType, uint8_t indent) +{ + switch (compType) + { + case DaqDevice: + printDaqDevice(baseObject, indent + 1); + break; + + case DaqServer: + printDaqServer(baseObject, indent + 1); + break; + + case DaqSyncComponent: + printDaqSyncComponent(baseObject, indent + 1); + break; + + case DaqChannel: + printDaqChannel(baseObject, indent + 1); + break; + + case DaqFunctionBlock: + printDaqFunctionBlock(baseObject, indent + 1); + break; + + case DaqFolder: + printDaqFolder(baseObject, indent + 1); + break; + + case DaqInputPort: + printInputPort(baseObject, indent + 1); + break; + + case DaqSignal: + printDaqSignal(baseObject, indent + 1); + break; + + default: + break; + } +} + enum ComponentType getComponentType(daqBaseObject* baseObject) { if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_DEVICE_INTF_ID)) @@ -48,6 +93,9 @@ enum ComponentType getComponentType(daqBaseObject* baseObject) else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_SYNC_COMPONENT_INTF_ID)) return DaqSyncComponent; + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_CHANNEL_INTF_ID)) + return DaqChannel; + else if (DAQ_SUPPORTS_INTERFACE(baseObject, DAQ_FUNCTION_BLOCK_INTF_ID)) return DaqFunctionBlock; @@ -82,39 +130,7 @@ void printObjectList(daqList* list, enum ComponentType compType, uint8_t indent) { daqList_getItemAt(list, i, &listMember); - switch (compType) - { - case DaqDevice: - printDaqDevice(listMember, indent+1); - break; - - case DaqServer: - printDaqServer(listMember, indent+1); - break; - - case DaqSyncComponent: - printDaqSyncComponent(listMember, indent+1); - break; - - case DaqFunctionBlock: - printDaqFunctionBlock(listMember, indent+1); - break; - - case DaqFolder: - printDaqFolder(listMember, indent+1); - break; - - case DaqInputPort: - printInputPort(listMember, indent+1); - break; - - case DaqSignal: - printDaqSignal(listMember, indent+1); - break; - - default: - break; - } + printDaqObject(listMember, compType, indent); daqReleaseRef(listMember); } @@ -133,6 +149,8 @@ void printDaqDevice(daqBaseObject* baseObject, uint8_t indent) printDaqFormattedString("Device: %s\n", localId); } + // IOFolder is a SPECIAL TYPE of FOLDER that only accepts + // IChannel and IIoFolderConfig components. daqFolder* ioFolder = NULL; daqDevice_getInputsOutputsFolder(device, &ioFolder); if (ioFolder != NULL) @@ -177,6 +195,13 @@ void printDaqDevice(daqBaseObject* baseObject, uint8_t indent) daqReleaseRef(device); } +void printDaqChannel(daqBaseObject* baseObject, uint8_t indent) +{ + // Channels are standard function blocks that have + // an additional option of providing a list of tags. + printDaqFunctionBlock(baseObject, indent); +} + void printDaqFunctionBlock(daqBaseObject* baseObject, uint8_t indent) { daqFunctionBlock* functionBlock = NULL; From 724772a9ff382245e3653652a07383f73aa0a1e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Fri, 30 Jan 2026 08:57:15 +0100 Subject: [PATCH 50/51] Updated comment about channels --- examples/tree_traversal.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 2429cd5..04da0b6 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -197,8 +197,8 @@ void printDaqDevice(daqBaseObject* baseObject, uint8_t indent) void printDaqChannel(daqBaseObject* baseObject, uint8_t indent) { - // Channels are standard function blocks that have - // an additional option of providing a list of tags. + // Channels represent physical sensors in openDAQ. + // Their internal structure is the same as that of the function block. printDaqFunctionBlock(baseObject, indent); } From 1065cecd7046e14a0d52eecef73423620fe1e3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Zako=C5=A1ek?= Date: Wed, 4 Feb 2026 12:01:23 +0100 Subject: [PATCH 51/51] Removed unnecessary indents --- examples/tree_traversal.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/tree_traversal.c b/examples/tree_traversal.c index 04da0b6..2442621 100644 --- a/examples/tree_traversal.c +++ b/examples/tree_traversal.c @@ -46,35 +46,35 @@ void printDaqObject(daqBaseObject* baseObject, enum ComponentType compType, uint switch (compType) { case DaqDevice: - printDaqDevice(baseObject, indent + 1); + printDaqDevice(baseObject, indent); break; case DaqServer: - printDaqServer(baseObject, indent + 1); + printDaqServer(baseObject, indent); break; case DaqSyncComponent: - printDaqSyncComponent(baseObject, indent + 1); + printDaqSyncComponent(baseObject, indent); break; case DaqChannel: - printDaqChannel(baseObject, indent + 1); + printDaqChannel(baseObject, indent); break; case DaqFunctionBlock: - printDaqFunctionBlock(baseObject, indent + 1); + printDaqFunctionBlock(baseObject, indent); break; case DaqFolder: - printDaqFolder(baseObject, indent + 1); + printDaqFolder(baseObject, indent); break; case DaqInputPort: - printInputPort(baseObject, indent + 1); + printInputPort(baseObject, indent); break; case DaqSignal: - printDaqSignal(baseObject, indent + 1); + printDaqSignal(baseObject, indent); break; default: