예제 #1
0
int PvUniversalParam::plSetParam( PvUniversalParamValue& aValueOut )
{
    rs_bool pvRet;
    switch (mType)
    {
    case TYPE_INT8:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.int8_val );
        break;
    case TYPE_UNS8:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.uns8_val );
        break;
    case TYPE_INT16:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.int16_val );
        break;
    case TYPE_UNS16:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.uns16_val );
        break;
    case TYPE_INT32:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.int32_val );
        break;
    case TYPE_ENUM:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.enum_val );
        break;
    case TYPE_BOOLEAN:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.rs_bool_val );
        break;
    case TYPE_UNS32:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.uns32_val );
        break;
    case TYPE_FLT64:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.flt64_val );
        break;
#ifdef TYPE_INT64
    case TYPE_INT64:
        pvRet = pl_set_param( mCamera->Handle(), mId, &aValueOut.long64_val );
        break;
#endif
    default:
        mCamera->LogCamError(__LINE__, "PvUniversalParam::plSetParam() type not supported");
        pvRet = PV_FAIL;
        break;
    }

    if (pvRet != PV_OK)
        return DEVICE_ERR;
    return DEVICE_OK;
}
예제 #2
0
// set numeric parameter value
rs_bool pvcam_set_numeric(int16 hcam, uns32 param_id, double param_value) {

	// declarations
	rs_bool	success = 0;	// flag for successful execution
	double	param_min;		// minimum parameter value
	double	param_max;		// maximum parameter value
	double	param_inc;		// parameter increment
	int8	int8_value;		// signed byte
	uns8	uns8_value;		// unsigned byte
	int16	int16_value;	// signed word
	uns16	uns16_value;	// unsigned word
	int32	int32_value;	// signed dword
	uns32	uns32_value;	// unsigned dword
	flt64	flt64_value;	// double
	rs_bool	bool_value;		// boolean

	// obtain min, max & increment for numeric types
	// enumerated parameter limits given in ATTR_COUNT
	if (attr_type == TYPE_ENUM) {
		param_min = 0.0;
		param_inc = 1.0;
		param_max = (double) attr_count - param_inc;
	}
	else if (!pvcam_param_value(hcam, param_id, ATTR_MIN, attr_type, &param_min)) {
		return(0);
	}
	else if (!pvcam_param_value(hcam, param_id, ATTR_MAX, attr_type, &param_max)) {
		return(0);
	}
	else if (!pvcam_param_value(hcam, param_id, ATTR_INCREMENT, attr_type, &param_inc)) {
		return(0);
	}

	// check for valid parameter value
	if (param_value < param_min) {
		pvcam_error(hcam, "Parameter value exceeds minimum value allowed");
		return(0);
	}
	else if (param_value > param_max) {
		pvcam_error(hcam, "Parameter value exceeds maximum value allowed");
		return(0);
	}
	else if (param_inc > 0.0) {
		if (fmod((param_value - param_min), param_inc) > 0.0) {
			pvcam_error(hcam, "Parameter value not integer multiple of increment");
			return(0);
		}
	}

	// recast parameter value and save to appropriate storage variable
	// set parameter value with appropriate storage variable
	switch (attr_type) {
	case TYPE_INT8:
		int8_value = (int8) param_value;
		success = pl_set_param(hcam, param_id, (void *) &int8_value);
		break;
	case TYPE_UNS8:
		uns8_value = (uns8) param_value;
		success = pl_set_param(hcam, param_id, (void *) &uns8_value);
		break;
	case TYPE_INT16:
		int16_value = (int16) param_value;
		success = pl_set_param(hcam, param_id, (void *) &int16_value);
		break;
	case TYPE_UNS16:
		uns16_value = (uns16) param_value;
		success = pl_set_param(hcam, param_id, (void *) &uns16_value);
		break;
	case TYPE_INT32:
		int32_value = (int32) param_value;
		success = pl_set_param(hcam, param_id, (void *) &int32_value);
		break;
	case TYPE_UNS32:
	case TYPE_ENUM:
		uns32_value = (uns32) param_value;
		success = pl_set_param(hcam, param_id, (void *) &uns32_value);
		break;
	case TYPE_FLT64:
		flt64_value = (flt64) param_value;
		success = pl_set_param(hcam, param_id, (void *) &flt64_value);
		break;
	case TYPE_BOOLEAN:
		bool_value = (rs_bool)param_value;
		success = pl_set_param(hcam, param_id, (void *) &bool_value);
		break;
	default:
		pvcam_error(hcam, "Invalid data type for setting numeric parameter value");
		break;
	}

	// return value of successful execution flag
	return(success);
}
예제 #3
0
/*****************************************************************************
*
*       SetLongParam_PvCam
*
* Description :: 
*       This routine sets a parameter in PvCam, it takes care of data type for 
*   the user, by taking a long from the user.
*
*-----------------------------------------------------------------------------
*/
bool SetLongParam_PvCam
(   int16 handle,
    uns32 pvcam_cmd,
    long value
)
{
    bool status = false;
    union {
        double dtmp;
        uns8 ubytetmp;
        int16 stmp;
        uns16 ustmp;
        int32 ltmp;
        uns32 ultmp;
        uns32 etmp;
        boolean btmp;
        int8 bytetmp;
    } temp;                     /* temp variable for values, which can be any data type. */
    bool avail;                 /* PvCam available variable. */
    uns16 DataType;             /* PvCam data type variable. */
    uns16 access;               /* PvCam access variable.    */
    bool fcn_status;            /* status of function.       */
    uns32 count;                /* number of values in variable */

    fcn_status = (bool)pl_get_param( handle, pvcam_cmd, ATTR_AVAIL, (void*)&temp );
    avail = (bool)temp.btmp;

    if (fcn_status && avail)
    {
		pl_get_param( handle, pvcam_cmd, ATTR_TYPE,		
                             (void*)&DataType );
	    pl_get_param( handle, pvcam_cmd, ATTR_COUNT,    
                             (void*)&count);
		pl_get_param( handle, pvcam_cmd, ATTR_ACCESS,	
                             (void*)&access );

        /* Make sure this is a valid parameter to set. */
        if (access == ACC_READ_WRITE)
        {
            status = true;
            switch (DataType)
            {
                case TYPE_INT8 :        /* signed char                            */
                    temp.bytetmp = (char) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.bytetmp);
                    break;
                case TYPE_UNS8 :        /* unsigned char                          */
                    temp.ubytetmp = (unsigned char) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.ubytetmp);
                    break;
                case TYPE_INT16 :       /* short                                  */
                    temp.stmp = (short) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.stmp);
                    break;
                case TYPE_UNS16 :       /* unsigned short                         */
                    temp.ustmp = (unsigned short) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.ustmp);
                    break;
                case TYPE_INT32 :       /* long                                   */
                    temp.ltmp = (long) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.ltmp);
                    break;
                case TYPE_UNS32 :       /* unsigned long                          */
                    temp.ultmp = (unsigned long) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.ultmp);
                    break;
                case TYPE_FLT64 :       /* double                                 */
                    temp.dtmp = (double) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.dtmp);
                    break;
                case TYPE_BOOLEAN :     /* Boolean value                          */
                    temp.btmp = (boolean) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.btmp);
                    break;
                case TYPE_ENUM :        /* Can be treat as unsigned long          */
                    temp.ultmp = (unsigned long) value;
                    pl_set_param(handle, pvcam_cmd, (void *)&temp.ultmp);
                    break;
                default:
                /* ptrs not supported yet. */
                case TYPE_VOID_PTR :    /* ptr to void                            */
                case TYPE_VOID_PTR_PTR :/* void ptr to a ptr.                     */
                case TYPE_CHAR_PTR :    /* char                                   */
                    status = false;
                break;
            }
        }
   }

    return(status);
}                           /* end SetLongParam_PvCam */