コード例 #1
7
ファイル: devicemanager.cpp プロジェクト: jboucquey/DSLogic
void DeviceManager::release_devices()
{
	// Release all the used devices
	for (map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin();
        i != _used_devices.end();)
        release_device((*i++).first);

	_used_devices.clear();

	// Clear all the drivers
	sr_dev_driver **const drivers = sr_driver_list();
	for (sr_dev_driver **driver = drivers; *driver; driver++)
		sr_dev_clear(*driver);
}
コード例 #2
0
ファイル: std.c プロジェクト: vpalatin/libsigrok
/**
 * Standard driver cleanup() callback API helper
 *
 * @param di The driver instance to use.
 *
 * Frees all device instances by calling sr_dev_clear() and then releases any
 * resources allocated by std_init().
 *
 * @retval SR_OK Success
 * @retval SR_ERR_ARG Invalid driver
 *
*/
SR_PRIV int std_cleanup(const struct sr_dev_driver *di)
{
	int ret;

	ret = sr_dev_clear(di);
	g_free(di->context);

	return ret;
}
コード例 #3
0
ファイル: sessionfile.cpp プロジェクト: plaes/pulseview
void SessionFile::release()
{
	if (!_owner)
		return;

	assert(_sdi);
	File::release();
	sr_dev_close(_sdi);
	sr_dev_clear(_sdi->driver);
	sr_session_destroy();
	_sdi = NULL;
}
コード例 #4
0
ファイル: file.cpp プロジェクト: ScMarxX/DSView
File* File::create(QString name)
{
    if (sr_session_load(name.toLocal8Bit().data()) == SR_OK) {
		GSList *devlist = NULL;
		sr_session_dev_list(&devlist);
		sr_session_destroy();

		if (devlist) {
			sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data;
			g_slist_free(devlist);
			if (sdi) {
				sr_dev_close(sdi);
				sr_dev_clear(sdi->driver);
				return new SessionFile(name);
			}
		}
	}

	return new InputFile(name);
}
コード例 #5
0
ファイル: file.cpp プロジェクト: ticapix/pulseview
File* File::create(const string &name)
{
	struct sr_session *temp_session;
	if (sr_session_load(name.c_str(), &temp_session) == SR_OK) {
		GSList *devlist = NULL;
		sr_session_dev_list(temp_session, &devlist);
		sr_session_destroy(temp_session);

		if (devlist) {
			sr_dev_inst *const sdi = (sr_dev_inst*)devlist->data;
			g_slist_free(devlist);
			if (sdi) {
				sr_dev_close(sdi);
				sr_dev_clear(sdi->driver);
				return new SessionFile(name);
			}
		}
	}

	return NULL;
}
コード例 #6
0
ファイル: devicemanager.cpp プロジェクト: jboucquey/DSLogic
void DeviceManager::release_driver(struct sr_dev_driver *const driver)
{
	assert(driver);
//    map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin();
//    while(i != _used_devices.end()) {
//        if((*i).first->driver == driver)
//        {
//            // Notify the current owner of the device
//            (*i).second->release_device((*i).first);

//            // Close the device instance
//            sr_dev_close((*i).first);

//            // Remove it from the used device list
//            i = _used_devices.erase(i);
//        } else {
//            i++;
//        }
//    }
    for (map<sr_dev_inst*, SigSession*>::iterator i = _used_devices.begin();
        i != _used_devices.end();)
        if((*i).first->driver == driver)
        {
            // Notify the current owner of the device
            (*i).second->release_device((*i).first);

            // Close the device instance
            sr_dev_close((*i).first);

            // Remove it from the used device list
            _used_devices.erase(i++);
        } else {
            i++;
        }

	// Clear all the old device instances from this driver
	sr_dev_clear(driver);
}