Example #1
0
/* properties which use tx_tune_power*/
static int si4713_write_econtrol_tune(struct si4713_device *sdev,
				struct v4l2_ext_control *control)
{
	s32 rval = 0;
	u8 power, antcap;

	rval = validate_range(&sdev->sd, control);
	if (rval < 0)
		goto exit;

	mutex_lock(&sdev->mutex);

	switch (control->id) {
	case V4L2_CID_TUNE_POWER_LEVEL:
		power = control->value;
		antcap = sdev->antenna_capacitor;
		break;
	case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
		power = sdev->power_level;
		antcap = control->value;
		break;
	default:
		rval = -EINVAL;
		goto unlock;
	};

	if (sdev->power_state)
		rval = si4713_tx_tune_power(sdev, power, antcap);

	if (rval == 0) {
		sdev->power_level = power;
		sdev->antenna_capacitor = antcap;
	}

unlock:
	mutex_unlock(&sdev->mutex);
exit:
	return rval;
}
Example #2
0
/* Validates any word sized object.  Called by next_arg to validate words
   it pulls off the stack. */
static void validate_word(void *ptr) {
  validate_range(ptr, ptr + sizeof(void *));
}
Example #3
0
/* Validates all pointers within the given buffer.  This is the validation
   function that should be called with a few exceptions as it uses the other
   functions as helper functions to assist with the validation. */
static void validate_buffer(void *ptr, size_t size) {
  validate_range(ptr, ptr + size);
}
static int si4713_write_econtrol_integers(struct si4713_device *sdev,
					struct v4l2_ext_control *control)
{
	s32 rval;
	u32 *shadow = NULL, val = 0;
	s32 bit = 0, mask = 0;
	u16 property = 0;
	int mul = 0;
	unsigned long *table = NULL;
	int size = 0;

	rval = validate_range(&sdev->sd, control);
	if (rval < 0)
		goto exit;

	rval = si4713_choose_econtrol_action(sdev, control->id, &shadow, &bit,
			&mask, &property, &mul, &table, &size);
	if (rval < 0)
		goto exit;

	val = control->value;
	if (mul) {
		val = control->value / mul;
	} else if (table) {
		rval = usecs_to_dev(control->value, table, size);
		if (rval < 0)
			goto exit;
		val = rval;
		rval = 0;
	}

	mutex_lock(&sdev->mutex);

	if (sdev->power_state) {
		if (mask) {
			rval = si4713_read_property(sdev, property, &val);
			if (rval < 0)
				goto unlock;
			val = set_bits(val, control->value, bit, mask);
		}

		rval = si4713_write_property(sdev, property, val);
		if (rval < 0)
			goto unlock;
		if (mask)
			val = control->value;
	}

	if (mul) {
		*shadow = val * mul;
	} else if (table) {
		rval = dev_to_usecs(val, table, size);
		if (rval < 0)
			goto unlock;
		*shadow = rval;
		rval = 0;
	} else {
		*shadow = val;
	}

unlock:
	mutex_unlock(&sdev->mutex);
exit:
	return rval;
}
Example #5
0
void get_files( CAMHandle hCam, CAMDeviceInfoPtr pDevInfo, OPTS *pOpts)
{
    int             ret;
    int             fName;
    char           *pName;
    uint32_t       *pHandle;
    uint32_t       *pEnd;
    CAMObjectHandlePtr pHandles = 0;
    CAMObjectInfoPtr   pObjInfo = 0;
    FNSTRUCT        fns;
    char            path[260];

    if (GetObjectHandles( hCam, 0xffffffff, 0, 0, &pHandles)) {
        camcli_error( "Could not get object handles");
        return;
    }

    fName = parse_filename( pOpts->value, &fns);
    if (fName)
        pName = path;
    else
        pName = 0;

    if (!validate_range( pHandles, pOpts, &pHandle, &pEnd)) {
        if (pHandles)
            free( pHandles);
        return;
    }

    if (pOpts->flags & OPT_THUMBNAIL) {
        printf ( "\n Save thumbnails  %s\n", pDevInfo->Model);
        printf (   " ===============  %s\n", underline( pDevInfo->Model));
    }
    else {
        printf ( "\n Save files  %s\n", pDevInfo->Model);
        printf (   " ==========  %s\n", underline( pDevInfo->Model));
    }

    for (; pHandle <= pEnd; pHandle++) {

        ret = GetObjectInfo( hCam, *pHandle, &pObjInfo);
        if (ret) {
            camcli_error( "Could not get info for handle %d", *pHandle);
            if (ret == CAMERR_USBFAILURE)
                ClearStall( hCam);
            continue;
        }

        if (pObjInfo->ObjectFormat == PTP_OFC_Association)
            printf( " Handle %d is not a file - skipping...\n", *pHandle);
        else {
            if (fName)
                make_filename( pName, pObjInfo->Filename, &fns);
            ret = os2_get_file( hCam, pObjInfo, *pHandle, pName,
                               (pOpts->flags & OPT_REPLACE),
                               (pOpts->flags & OPT_THUMBNAIL));

            if (ret == CAMERR_USBFAILURE)
                ClearStall( hCam);
        }

        free( pObjInfo);
        pObjInfo = 0;
    }

    if (pObjInfo)
        free( pObjInfo);
    if (pHandles)
        free( pHandles);

    return;
}
Example #6
0
void show_handle_info( CAMHandle hCam, CAMDeviceInfoPtr pDevInfo, OPTS *pOpts)
{
    uint32_t       *pHandle;
    uint32_t       *pEnd;
    struct tm       *ptm;
    CAMObjectHandlePtr pHandles = 0;
    CAMObjectInfoPtr   pObjInfo = 0;

    if (GetObjectHandles( hCam, 0xffffffff, 0, 0, &pHandles)) {
        camcli_error( "Could not get object handles");
        return;
    }

    if (!validate_range( pHandles, pOpts, &pHandle, &pEnd)) {
        if (pHandles)
            free( pHandles);
        return;
    }

    printf ( "\n     File information  %s\n", pDevInfo->Model);
    printf (   "     ================  %s\n", underline( pDevInfo->Model));

    for (; pHandle <= pEnd; pHandle++) {

        if (GetObjectInfo( hCam, *pHandle, &pObjInfo)) {
            camcli_error( "Could not get object info for handle %d", *pHandle);
            continue;
        }

        printf ( "              Handle:  %04d\n", *pHandle);
        printf ( "            Filename:  %s\n", (pObjInfo->Filename ? pObjInfo->Filename : "[none]"));

        if (pObjInfo->CaptureDate == 0)
            ptm = 0;
        else
            ptm = localtime( &pObjInfo->CaptureDate);
        if (!ptm)
            printf ( "         CaptureDate:  [unknown]\n");
        else
            printf ( "         CaptureDate:  %04d-%02d-%02d  %02d:%02d:%02d\n",
                     ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday,
                     ptm->tm_hour, ptm->tm_min, ptm->tm_sec);

        if (pObjInfo->ModificationDate == 0)
            ptm = 0;
        else
            ptm = localtime( &pObjInfo->ModificationDate);
        if (!ptm)
            printf ( "    ModificationDate:  [unknown]\n");
        else
            printf ( "    ModificationDate:  %04d-%02d-%02d  %02d:%02d:%02d\n",
                     ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday,
                     ptm->tm_hour, ptm->tm_min, ptm->tm_sec);

        printf ( "            Keywords:  %s\n", (pObjInfo->Keywords ? pObjInfo->Keywords : "[none]"));
        printf ( "    ProtectionStatus:  0x%04X\t%s\n", pObjInfo->ProtectionStatus, GetCodeName( pObjInfo->ProtectionStatus, CAM_PROTECTION));
        printf ( "ObjectCompressedSize:  %d\n", pObjInfo->ObjectCompressedSize);
        printf ( "        ObjectFormat:  0x%04X\t%s\n", pObjInfo->ObjectFormat, GetCodeName( pObjInfo->ObjectFormat, CAM_OBJECT_FORMAT));
        printf ( "       ImagePixWidth:  %d\n", pObjInfo->ImagePixWidth);
        printf ( "      ImagePixHeight:  %d\n", pObjInfo->ImagePixHeight);
        printf ( "       ImageBitDepth:  %d\n", pObjInfo->ImageBitDepth);
        printf ( " ThumbCompressedSize:  %d\n", pObjInfo->ThumbCompressedSize);
        printf ( "         ThumbFormat:  0x%04X\t%s\n", pObjInfo->ThumbFormat, GetCodeName( pObjInfo->ThumbFormat, CAM_OBJECT_FORMAT));
        printf ( "       ThumbPixWidth:  %d\n", pObjInfo->ThumbPixWidth);
        printf ( "      ThumbPixHeight:  %d\n", pObjInfo->ThumbPixHeight);
        printf ( "        ParentObject:  %04d\n", pObjInfo->ParentObject);
        printf ( "     AssociationType:  0x%04X\t%s\n", pObjInfo->AssociationType, GetCodeName( pObjInfo->AssociationType, CAM_ASSOCIATION));
        printf ( "     AssociationDesc:  0x%04X\n", pObjInfo->AssociationDesc);
        printf ( "      SequenceNumber:  0x%04X\n", pObjInfo->SequenceNumber);
        printf ( "           StorageID:  0x%04X\n\n", pObjInfo->StorageID);

        free( pObjInfo);
        pObjInfo = 0;
    }

    if (pObjInfo)
        free( pObjInfo);
    if (pHandles)
        free( pHandles);

    return;
}