DAQ_LINKAGE int daq_get_module_list(DAQ_Module_Info_t *list[]) { DAQ_Module_Info_t *info; DAQ_ListNode_t *node; int idx; if (!list) return DAQ_ERROR_INVAL; info = calloc(num_modules, sizeof(DAQ_Module_Info_t)); if (!info) return DAQ_ERROR_NOMEM; idx = 0; for (node = module_list; node; node = node->next) { info[idx].name = strdup(node->module->name); if (info[idx].name == NULL) { daq_free_module_list(info, idx); return DAQ_ERROR_NOMEM; } info[idx].version = node->module->module_version; info[idx].type = node->module->type; idx++; } *list = info; return num_modules; }
int DAQ_PrintTypes (FILE* f) { DAQ_Module_Info_t* list = NULL; int i, nMods = daq_get_module_list(&list); if ( nMods ) fprintf(f, "Available DAQ modules:\n"); else fprintf(f, "No available DAQ modules " "(try adding directories with --daq-dir).\n"); for ( i = 0; i < nMods; i++ ) { fprintf(f, "%s(v%u):", list[i].name, list[i].version); if ( list[i].type & DAQ_TYPE_FILE_CAPABLE ) fprintf(f, " %s", "readback"); if ( list[i].type & DAQ_TYPE_INTF_CAPABLE ) fprintf(f, " %s", "live"); if ( list[i].type & DAQ_TYPE_INLINE_CAPABLE ) fprintf(f, " %s", "inline"); if ( list[i].type & DAQ_TYPE_MULTI_INSTANCE ) fprintf(f, " %s", "multi"); if ( !(list[i].type & DAQ_TYPE_NO_UNPRIV) ) fprintf(f, " %s", "unpriv"); fprintf(f, "\n"); } daq_free_module_list(list, nMods); return 0; }