Exemple #1
0
dc_status_t
dc_parser_new2 (dc_parser_t **out, dc_context_t *context, dc_descriptor_t *descriptor, unsigned int devtime, dc_ticks_t systime)
{
	return dc_parser_new_internal (out, context,
		dc_descriptor_get_type (descriptor), dc_descriptor_get_model (descriptor),
		devtime, systime);
}
static dc_descriptor_t *ostc_get_data_descriptor(int data_model, dc_family_t data_fam)
{
	dc_descriptor_t *descriptor = NULL, *current = NULL;;
	dc_iterator_t *iterator = NULL;
	dc_status_t rc;

	rc = dc_descriptor_iterator(&iterator);
	if (rc != DC_STATUS_SUCCESS) {
		fprintf(stderr,"Error creating the device descriptor iterator.\n");
		return current;
	}
	while ((dc_iterator_next(iterator, &descriptor)) == DC_STATUS_SUCCESS) {
		int desc_model = dc_descriptor_get_model(descriptor);
		dc_family_t desc_fam = dc_descriptor_get_type(descriptor);
		if (data_model == desc_model && data_fam == desc_fam) {
			current = descriptor;
			break;
		}
		dc_descriptor_free(descriptor);
	}
	dc_iterator_free(iterator);
	return current;
}
Exemple #3
0
dc_status_t
dc_device_open (dc_device_t **out, dc_context_t *context, dc_descriptor_t *descriptor, const char *name)
{
	dc_status_t rc = DC_STATUS_SUCCESS;
	dc_device_t *device = NULL;

	if (out == NULL || descriptor == NULL)
		return DC_STATUS_INVALIDARGS;

	switch (dc_descriptor_get_type (descriptor)) {
	case DC_FAMILY_SUUNTO_SOLUTION:
		rc = suunto_solution_device_open (&device, context, name);
		break;
	case DC_FAMILY_SUUNTO_EON:
		rc = suunto_eon_device_open (&device, context, name);
		break;
	case DC_FAMILY_SUUNTO_VYPER:
		rc = suunto_vyper_device_open (&device, context, name);
		break;
	case DC_FAMILY_SUUNTO_VYPER2:
		rc = suunto_vyper2_device_open (&device, context, name);
		break;
	case DC_FAMILY_SUUNTO_D9:
		rc = suunto_d9_device_open (&device, context, name, dc_descriptor_get_model (descriptor));
		break;
	case DC_FAMILY_UWATEC_ALADIN:
		rc = uwatec_aladin_device_open (&device, context, name);
		break;
	case DC_FAMILY_UWATEC_MEMOMOUSE:
		rc = uwatec_memomouse_device_open (&device, context, name);
		break;
	case DC_FAMILY_UWATEC_SMART:
		rc = uwatec_smart_device_open (&device, context);
		break;
	case DC_FAMILY_REEFNET_SENSUS:
		rc = reefnet_sensus_device_open (&device, context, name);
		break;
	case DC_FAMILY_REEFNET_SENSUSPRO:
		rc = reefnet_sensuspro_device_open (&device, context, name);
		break;
	case DC_FAMILY_REEFNET_SENSUSULTRA:
		rc = reefnet_sensusultra_device_open (&device, context, name);
		break;
	case DC_FAMILY_OCEANIC_VTPRO:
		rc = oceanic_vtpro_device_open (&device, context, name);
		break;
	case DC_FAMILY_OCEANIC_VEO250:
		rc = oceanic_veo250_device_open (&device, context, name);
		break;
	case DC_FAMILY_OCEANIC_ATOM2:
		rc = oceanic_atom2_device_open (&device, context, name);
		break;
	case DC_FAMILY_MARES_NEMO:
		rc = mares_nemo_device_open (&device, context, name);
		break;
	case DC_FAMILY_MARES_PUCK:
		rc = mares_puck_device_open (&device, context, name);
		break;
	case DC_FAMILY_MARES_DARWIN:
		rc = mares_darwin_device_open (&device, context, name, dc_descriptor_get_model (descriptor));
		break;
	case DC_FAMILY_MARES_ICONHD:
		rc = mares_iconhd_device_open (&device, context, name, dc_descriptor_get_model (descriptor));
		break;
	case DC_FAMILY_HW_OSTC:
		rc = hw_ostc_device_open (&device, context, name);
		break;
	case DC_FAMILY_HW_FROG:
		rc = hw_frog_device_open (&device, context, name);
		break;
	case DC_FAMILY_HW_OSTC3:
		rc = hw_ostc3_device_open (&device, context, name);
		break;
	case DC_FAMILY_CRESSI_EDY:
		rc = cressi_edy_device_open (&device, context, name);
		break;
	case DC_FAMILY_CRESSI_LEONARDO:
		rc = cressi_leonardo_device_open (&device, context, name);
		break;
	case DC_FAMILY_ZEAGLE_N2ITION3:
		rc = zeagle_n2ition3_device_open (&device, context, name);
		break;
	case DC_FAMILY_ATOMICS_COBALT:
		rc = atomics_cobalt_device_open (&device, context);
		break;
	case DC_FAMILY_SHEARWATER_PREDATOR:
		rc = shearwater_predator_device_open (&device, context, name);
		break;
	case DC_FAMILY_SHEARWATER_PETREL:
		rc = shearwater_petrel_device_open (&device, context, name);
		break;
	default:
		return DC_STATUS_INVALIDARGS;
	}

	*out = device;

	return rc;
}
Exemple #4
0
int libdc_driver_open(dev_handle_t abstract, const char * devpath, const char * args)
{
	libdc_device_t dev = (libdc_device_t)(abstract);
	if (dev == NULL)
	{
		errno = EINVAL;
		return -1;
	}

	// Parse the Argument List
	arglist_t arglist;
	int rc = arglist_parse(& arglist, args);
	if (rc != 0)
	{
		dev->errcode = DRIVER_ERR_INVALID;
		dev->errmsg = "Invalid Argument String";
		return -1;
	}

	// Load a Device Descriptor based on the Model argument
	rc = arglist_read_uint(arglist, "model", & dev->modelid);
	if (rc != 0)
	{
		dev->errcode = DRIVER_ERR_INVALID;
		dev->errmsg = "Missing 'model' Argument";
		return -1;
	}

	int i, found = 0;
	for (i = 0; g_libdc_plugin_devtable[i].id != -1; ++i)
	{
		if (g_libdc_plugin_devtable[i].id == dev->modelid)
		{
			found = 1;
			dev->family = g_libdc_plugin_devtable[i].family;
			dev->model = g_libdc_plugin_devtable[i].model;
		}
	}

	if (! found)
	{
		dev->errcode = DRIVER_ERR_UNSUPPORTED;
		dev->errmsg = "Unsupported 'model' Argument";
		return -1;
	}

	dc_iterator_t * iterator = NULL;
	dc_descriptor_t * descriptor = NULL;
	dc_descriptor_iterator(& iterator);

	while (dc_iterator_next(iterator, &descriptor) == DC_STATUS_SUCCESS)
	{
		if ((dc_descriptor_get_type(descriptor) == dev->family) &&
			(dc_descriptor_get_model(descriptor) == dev->model))
		{
			dev->descriptor = descriptor;
		}
	}

	dc_iterator_free(iterator);

	if (dev->descriptor == NULL)
	{
		dev->errcode = DRIVER_ERR_UNSUPPORTED;
		dev->errmsg = "Could not load descriptor for model";
		return -1;
	}

	// Open the Device
	dc_status_t ret = dc_device_open(& dev->device, dev->context, dev->descriptor, devpath);
	if (ret != DC_STATUS_SUCCESS)
	{
		dev->errcode = DRIVER_ERR_NO_DEVICE;
		dev->errmsg = "Failed to connect to device";
		return -1;
	}

	// Register the Event and Cancel Handlers
	int events = DC_EVENT_PROGRESS | DC_EVENT_DEVINFO | DC_EVENT_CLOCK;

	dc_device_set_events (dev->device, events, libdc_event_cb, dev);
	dc_device_set_cancel (dev->device, libdc_cancel_cb, dev);

	return DRIVER_ERR_SUCCESS;
}
Exemple #5
0
static dc_status_t
search(dc_descriptor_t **out, const char *name, dc_family_t backend, unsigned int model) {
    dc_status_t rc = DC_STATUS_SUCCESS;

    dc_iterator_t *iterator = NULL;
    rc = dc_descriptor_iterator(&iterator);
    if (rc != DC_STATUS_SUCCESS) {
        WARNING("Error creating the device descriptor iterator.");
        return rc;
    }

    dc_descriptor_t *descriptor = NULL, *current = NULL;
    while ((rc = dc_iterator_next(iterator, &descriptor)) == DC_STATUS_SUCCESS) {
        if (name) {
            const char *vendor = dc_descriptor_get_vendor(descriptor);
            const char *product = dc_descriptor_get_product(descriptor);

            size_t n = strlen(vendor);
            if (strncasecmp(name, vendor, n) == 0 && name[n] == ' ' &&
                    strcasecmp(name + n + 1, product) == 0) {
                current = descriptor;
                break;
            } else if (strcasecmp(name, product) == 0) {
                current = descriptor;
                break;
            }
        } else {
            if (backend == dc_descriptor_get_type(descriptor)) {
                if (model == dc_descriptor_get_model(descriptor)) {
                    /* Exact match found. Return immediately */
                    dc_descriptor_free(current);
                    current = descriptor;
                    break;
                } else {
                    /* Possible match found. Keep searching for an exact match.
                     * If no exact match is found, return the first match found.
                     */
                    if (current == NULL) {
                        current = descriptor;
                        descriptor = NULL;
                    }
                }
            }
        }

        dc_descriptor_free(descriptor);
    }

    if (rc != DC_STATUS_SUCCESS && rc != DC_STATUS_DONE) {
        dc_descriptor_free(current);
        dc_iterator_free(iterator);
        WARNING("Error iterating the device descriptor.");
        return rc;
    }

    dc_iterator_free(iterator);

    *out = current;

    return DC_STATUS_SUCCESS;
}