/* 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; }
/* 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 *)); }
/* 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; }
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; }
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; }