Esempio n. 1
0
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);
}
Esempio n. 2
0
void srtest_teardown(void)
{
	int ret;

	ret = sr_exit(srtest_ctx);
	fail_unless(ret == SR_OK, "sr_exit() failed: %d.", ret);
}
Esempio n. 3
0
MainWindow::~MainWindow()
{
	srd_exit();
	sr_exit();

	delete ui;
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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.");
}
Esempio n. 6
0
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;
}
Esempio n. 7
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;
}
Esempio n. 8
0
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;
}