END_TEST /* * Check whether three nested sr_init() and sr_exit() calls work. * The three functions have three different contexts. * If any function returns != SR_OK (or segfaults) this test will fail. */ START_TEST(test_init_exit_3) { int ret; struct sr_context *sr_ctx1, *sr_ctx2, *sr_ctx3; ret = sr_init(&sr_ctx1); fail_unless(ret == SR_OK, "sr_init() 1 failed: %d.", ret); ret = sr_init(&sr_ctx2); fail_unless(ret == SR_OK, "sr_init() 2 failed: %d.", ret); ret = sr_init(&sr_ctx3); fail_unless(ret == SR_OK, "sr_init() 3 failed: %d.", ret); ret = sr_exit(sr_ctx3); fail_unless(ret == SR_OK, "sr_exit() 3 failed: %d.", ret); ret = sr_exit(sr_ctx2); fail_unless(ret == SR_OK, "sr_exit() 2 failed: %d.", ret); ret = sr_exit(sr_ctx1); fail_unless(ret == SR_OK, "sr_exit() 1 failed: %d.", ret); }
void srtest_teardown(void) { int ret; ret = sr_exit(srtest_ctx); fail_unless(ret == SR_OK, "sr_exit() failed: %d.", ret); }
MainWindow::~MainWindow() { srd_exit(); sr_exit(); delete ui; }
END_TEST /* * Same as above, but sr_exit() in the "wrong" order. * This should work fine, it's not a bug to do this. */ START_TEST(test_init_exit_2_reverse) { int ret; struct sr_context *sr_ctx1, *sr_ctx2; ret = sr_init(&sr_ctx1); fail_unless(ret == SR_OK, "sr_init() 1 failed: %d.", ret); ret = sr_init(&sr_ctx2); fail_unless(ret == SR_OK, "sr_init() 2 failed: %d.", ret); ret = sr_exit(sr_ctx1); fail_unless(ret == SR_OK, "sr_exit() 1 failed: %d.", ret); ret = sr_exit(sr_ctx2); fail_unless(ret == SR_OK, "sr_exit() 2 failed: %d.", ret); }
END_TEST /* Check whether sr_exit(NULL) fails as it should. */ START_TEST(test_exit_null) { int ret; ret = sr_log_loglevel_set(SR_LOG_NONE); fail_unless(ret == SR_OK, "sr_log_loglevel_set() failed: %d.", ret); ret = sr_exit(NULL); fail_unless(ret != SR_OK, "sr_exit(NULL) should have failed."); }
int main(int argc, char **argv) { g_log_set_default_handler(logger, NULL); if (parse_options(argc, argv)) { return 1; } /* Set the loglevel (amount of messages to output) for libsigrok. */ if (sr_log_loglevel_set(opt_loglevel) != SR_OK) goto done; if (sr_init(&sr_ctx) != SR_OK) goto done; #ifdef HAVE_SRD /* Set the loglevel (amount of messages to output) for libsigrokdecode. */ if (srd_log_loglevel_set(opt_loglevel) != SRD_OK) goto done; if (opt_pds) { if (srd_init(NULL) != SRD_OK) goto done; if (srd_session_new(&srd_sess) != SRD_OK) { g_critical("Failed to create new decode session."); goto done; } if (register_pds(opt_pds, opt_pd_annotations) != 0) goto done; if (setup_pd_stack(opt_pds, opt_pd_stack, opt_pd_annotations) != 0) goto done; /* Only one output type is ever shown. */ if (opt_pd_binary) { if (setup_pd_binary(opt_pd_binary) != 0) goto done; if (srd_pd_output_callback_add(srd_sess, SRD_OUTPUT_BINARY, show_pd_binary, NULL) != SRD_OK) goto done; } else if (opt_pd_meta) { if (setup_pd_meta(opt_pd_meta) != 0) goto done; if (srd_pd_output_callback_add(srd_sess, SRD_OUTPUT_META, show_pd_meta, NULL) != SRD_OK) goto done; } else { if (opt_pd_annotations) if (setup_pd_annotations(opt_pd_annotations) != 0) goto done; if (srd_pd_output_callback_add(srd_sess, SRD_OUTPUT_ANN, show_pd_annotations, NULL) != SRD_OK) goto done; } } #endif if (opt_version) show_version(); else if (opt_input_format && opt_show) show_input(); else if (opt_output_format && opt_show) show_output(); else if (opt_transform_module && opt_show) show_transform(); else if (opt_scan_devs) show_dev_list(); #ifdef HAVE_SRD else if (opt_pds && opt_show) show_pd_detail(); #endif else if (opt_show) show_dev_detail(); else if (opt_input_file) load_input_file(); else if (opt_get) get_option(); else if (opt_set) set_options(); else if (opt_samples || opt_time || opt_frames || opt_continuous) run_session(); else show_help(); #ifdef HAVE_SRD if (opt_pds) srd_exit(); #endif done: if (sr_ctx) sr_exit(sr_ctx); return 0; }
int main(int argc, char *argv[]) { int ret = 0; struct sr_context *sr_ctx = NULL; const char *open_file = NULL; QApplication a(argc, argv); // Set some application metadata QApplication::setApplicationVersion(DS_VERSION_STRING); QApplication::setApplicationName("DSLogic(Beta)"); QApplication::setOrganizationDomain("http://www.DreamSourceLab.com"); // Parse arguments while (1) { static const struct option long_options[] = { {"loglevel", required_argument, 0, 'l'}, {"version", no_argument, 0, 'V'}, {"help", no_argument, 0, 'h'}, {0, 0, 0, 0} }; const int c = getopt_long(argc, argv, "l:Vh?", long_options, NULL); if (c == -1) break; switch (c) { case 'l': { const int loglevel = atoi(optarg); sr_log_loglevel_set(loglevel); #ifdef ENABLE_DECODE srd_log_loglevel_set(loglevel); #endif break; } case 'V': // Print version info fprintf(stdout, "%s %s\n", DS_TITLE, DS_VERSION_STRING); return 0; case 'h': case '?': usage(); return 0; } } if (argc - optind > 1) { fprintf(stderr, "Only one file can be openened.\n"); return 1; } else if (argc - optind == 1) open_file = argv[argc - 1]; // Initialise libsigrok if (sr_init(&sr_ctx) != SR_OK) { qDebug() << "ERROR: libsigrok init failed."; return 1; } do { #ifdef ENABLE_DECODE QDir dir(QCoreApplication::applicationDirPath()); assert(dir.cd("decoders")); std::string str = dir.absolutePath().toStdString() + "/"; strcpy(decoders_path, str.c_str()); // Initialise libsigrokdecode if (srd_init(NULL) != SRD_OK) { qDebug() << "ERROR: libsigrokdecode init failed."; break; } // Load the protocol decoders srd_decoder_load_all(); #endif try { // Create the device manager, initialise the drivers pv::DeviceManager device_manager(sr_ctx); // Initialise the main window pv::MainWindow w(device_manager, open_file); QFile qss(":/stylesheet.qss"); qss.open(QFile::ReadOnly); a.setStyleSheet(qss.readAll()); qss.close(); w.show(); // Run the application ret = a.exec(); } catch(std::exception e) { qDebug() << e.what(); } #ifdef ENABLE_DECODE // Destroy libsigrokdecode srd_exit(); #endif } while (0); // Destroy libsigrok if (sr_ctx) sr_exit(sr_ctx); return ret; }
int main(int argc, char **argv) { GOptionContext *context; GError *error; g_log_set_default_handler(logger, NULL); error = NULL; context = g_option_context_new(NULL); g_option_context_add_main_entries(context, optargs, NULL); if (!g_option_context_parse(context, &argc, &argv, &error)) { g_critical("%s", error->message); return 1; } /* Set the loglevel (amount of messages to output) for libsigrok. */ if (sr_log_loglevel_set(opt_loglevel) != SR_OK) return 1; /* Set the loglevel (amount of messages to output) for libsigrokdecode. */ if (srd_log_loglevel_set(opt_loglevel) != SRD_OK) return 1; if (sr_init() != SR_OK) return 1; if (opt_pds) { if (srd_init(NULL) != SRD_OK) return 1; if (register_pds(NULL, opt_pds) != 0) return 1; if (srd_pd_output_callback_add(SRD_OUTPUT_ANN, show_pd_annotations, NULL) != SRD_OK) return 1; if (setup_pd_stack() != 0) return 1; if (setup_pd_annotations() != 0) return 1; } if (setup_output_format() != 0) return 1; if (opt_version) show_version(); else if (opt_list_devs) show_dev_list(); else if (opt_input_file) load_input_file(); else if (opt_samples || opt_time || opt_frames || opt_continuous) run_session(); else if (opt_dev) show_dev_detail(); else if (opt_pds) show_pd_detail(); else printf("%s", g_option_context_get_help(context, TRUE, NULL)); if (opt_pds) srd_exit(); g_option_context_free(context); sr_exit(); return 0; }