📄 dc1394_control.c
字号:
}dc1394error_tdc1394_feature_temperature_get_value(dc1394camera_t *camera, uint_t *target_temperature, uint_t *temperature){ quadlet_t value; dc1394error_t err= GetCameraControlRegister(camera, REG_CAMERA_TEMPERATURE, &value); DC1394_ERR_RTN(err, "Could not get temperature"); *target_temperature= (uint_t)((value >> 12) & 0xFFF); *temperature= (uint_t)(value & 0xFFFUL); return err;}dc1394error_tdc1394_feature_temperature_set_value(dc1394camera_t *camera, uint_t target_temperature){ dc1394error_t err; quadlet_t curval; err=GetCameraControlRegister(camera, REG_CAMERA_TEMPERATURE, &curval); DC1394_ERR_RTN(err, "Could not get temperature"); curval= (curval & 0xFF000FFFUL) | ((target_temperature & 0xFFFUL) << 12); err= SetCameraControlRegister(camera, REG_CAMERA_TEMPERATURE, curval); DC1394_ERR_RTN(err, "Could not set temperature"); return err;}dc1394error_tdc1394_feature_whiteshading_get_value(dc1394camera_t *camera, uint_t *r_value, uint_t *g_value, uint_t *b_value){ quadlet_t value; dc1394error_t err= GetCameraControlRegister(camera, REG_CAMERA_WHITE_SHADING, &value); DC1394_ERR_RTN(err, "Could not get white shading"); *r_value= (uint_t)((value & 0xFF0000UL) >> 16); *g_value= (uint_t)((value & 0xFF00UL) >> 8); *b_value= (uint_t)(value & 0xFFUL); return err;}dc1394error_tdc1394_feature_whiteshading_set_value(dc1394camera_t *camera, uint_t r_value, uint_t g_value, uint_t b_value){ quadlet_t curval; dc1394error_t err=GetCameraControlRegister(camera, REG_CAMERA_WHITE_SHADING, &curval); DC1394_ERR_RTN(err, "Could not get white shading"); curval= (curval & 0xFF000000UL) | ( ((r_value & 0xFFUL) << 16) | ((g_value & 0xFFUL) << 8) | (b_value & 0xFFUL) ); err=SetCameraControlRegister(camera, REG_CAMERA_WHITE_SHADING, curval); DC1394_ERR_RTN(err, "Could not set white shading"); return err;}dc1394error_tdc1394_external_trigger_get_mode(dc1394camera_t *camera, dc1394trigger_mode_t *mode){ quadlet_t value; dc1394error_t err= GetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, &value); DC1394_ERR_RTN(err, "Could not get trigger mode"); *mode= (uint_t)( ((value >> 16) & 0xFUL) ); if ((*mode)>5) (*mode)-=8; (*mode)+= DC1394_TRIGGER_MODE_MIN; return err;}dc1394error_tdc1394_external_trigger_set_mode(dc1394camera_t *camera, dc1394trigger_mode_t mode){ dc1394error_t err; quadlet_t curval; if ( (mode < DC1394_TRIGGER_MODE_MIN) || (mode > DC1394_TRIGGER_MODE_MAX) ) { return DC1394_INVALID_TRIGGER_MODE; } err=GetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, &curval); DC1394_ERR_RTN(err, "Could not get trigger mode"); mode-= DC1394_TRIGGER_MODE_MIN; if (mode>5) mode+=8; curval= (curval & 0xFFF0FFFFUL) | ((mode & 0xFUL) << 16); err=SetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, curval); DC1394_ERR_RTN(err, "Could not set trigger mode"); return err;}dc1394error_tdc1394_external_trigger_get_supported_sources(dc1394camera_t *camera, dc1394trigger_sources_t *sources){ quadlet_t value; dc1394error_t err; octlet_t offset; int i; FEATURE_TO_INQUIRY_OFFSET(DC1394_FEATURE_TRIGGER, offset); err=GetCameraControlRegister(camera, offset, &value); DC1394_ERR_RTN(err,"Could not query supported trigger sources"); sources->num=0; value=( (value & (0xF << 23)) >>23 ); for (i=DC1394_TRIGGER_SOURCE_MIN;i<=DC1394_TRIGGER_SOURCE_MAX;i++) { if (value & (0x1 << (i-DC1394_TRIGGER_SOURCE_MIN))){ sources->sources[sources->num]=i; sources->num++; } } return err;}dc1394error_tdc1394_external_trigger_get_source(dc1394camera_t *camera, dc1394trigger_source_t *source){ quadlet_t value; dc1394error_t err= GetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, &value); DC1394_ERR_RTN(err, "Could not get trigger source"); *source= (uint_t)( ((value >> 21) & 0x8UL) ); (*source)+= DC1394_TRIGGER_SOURCE_MIN; return err;}dc1394error_tdc1394_external_trigger_set_source(dc1394camera_t *camera, dc1394trigger_source_t source){ dc1394error_t err; quadlet_t curval; if ( (source < DC1394_TRIGGER_SOURCE_MIN) || (source > DC1394_TRIGGER_SOURCE_MAX) ) { return DC1394_INVALID_TRIGGER_SOURCE; } err=GetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, &curval); DC1394_ERR_RTN(err, "Could not get trigger source"); source-= DC1394_TRIGGER_MODE_MIN; curval= (curval & 0xFF1FFFFFUL) | ((source & 0x8UL) << 21); err=SetCameraControlRegister(camera, REG_CAMERA_TRIGGER_MODE, curval); DC1394_ERR_RTN(err, "Could not set trigger source"); return err;}dc1394error_tdc1394_feature_get_value(dc1394camera_t *camera, dc1394feature_t feature, uint_t *value){ quadlet_t quadval; octlet_t offset; dc1394error_t err; if ((feature==DC1394_FEATURE_WHITE_BALANCE)|| (feature==DC1394_FEATURE_WHITE_SHADING)|| (feature==DC1394_FEATURE_TEMPERATURE)) { err=DC1394_INVALID_FEATURE; DC1394_ERR_RTN(err, "You should use the specific functions to read from multiple-value features"); } FEATURE_TO_VALUE_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get feature %d value",feature); *value= (uint_t)(quadval & 0xFFFUL); return err;}dc1394error_tdc1394_feature_set_value(dc1394camera_t *camera, dc1394feature_t feature, uint_t value){ quadlet_t quadval; octlet_t offset; dc1394error_t err; if ((feature==DC1394_FEATURE_WHITE_BALANCE)|| (feature==DC1394_FEATURE_WHITE_SHADING)|| (feature==DC1394_FEATURE_TEMPERATURE)) { err=DC1394_INVALID_FEATURE; DC1394_ERR_RTN(err, "You should use the specific functions to write from multiple-value features"); } FEATURE_TO_VALUE_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get feature %d value",feature); err=SetCameraControlRegister(camera, offset, (quadval & 0xFFFFF000UL) | (value & 0xFFFUL)); DC1394_ERR_RTN(err, "Could not set feature %d value",feature); return err;}dc1394error_tdc1394_feature_is_present(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; *value=DC1394_FALSE; // check feature presence in 0x404 and 0x408 if ( (feature > DC1394_FEATURE_MAX) || (feature < DC1394_FEATURE_MIN) ) { return DC1394_INVALID_FEATURE; } if (feature < DC1394_FEATURE_ZOOM) { offset= REG_CAMERA_FEATURE_HI_INQ; } else { offset= REG_CAMERA_FEATURE_LO_INQ; } err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get register for feature %d",feature); if (IsFeatureBitSet(quadval, feature)!=DC1394_TRUE) { *value=DC1394_FALSE; return DC1394_SUCCESS; } FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get register for feature %d",feature); if (quadval & 0x80000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_has_one_push_auto(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get one-push capability for feature %d",feature); if (quadval & 0x10000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_is_readable(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get read-out capability for feature %d",feature); if (quadval & 0x08000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_is_switchable(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get power capability for feature %d",feature); if (quadval & 0x04000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_get_power(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; FEATURE_TO_VALUE_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get feature %d status",feature); if (quadval & 0x02000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_set_power(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t value){ dc1394error_t err; octlet_t offset; quadlet_t curval; FEATURE_TO_VALUE_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &curval); DC1394_ERR_RTN(err, "Could not get feature %d register",feature); if (value && !(curval & 0x02000000UL)) { curval|= 0x02000000UL; err=SetCameraControlRegister(camera, offset, curval); DC1394_ERR_RTN(err, "Could not set feature %d power",feature); } else if (!value && (curval & 0x02000000UL)) { curval&= 0xFDFFFFFFUL; err=SetCameraControlRegister(camera, offset, curval); DC1394_ERR_RTN(err, "Could not set feature %d power",feature); } return err;}dc1394error_tdc1394_feature_has_auto_mode(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; if (feature == DC1394_FEATURE_TRIGGER) { return DC1394_INVALID_FEATURE; } FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get automode capability for feature %d",feature); if (quadval & 0x02000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_has_manual_mode(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value){ dc1394error_t err; octlet_t offset; quadlet_t quadval; if (feature == DC1394_FEATURE_TRIGGER) { return DC1394_INVALID_FEATURE; } FEATURE_TO_INQUIRY_OFFSET(feature, offset); err=GetCameraControlRegister(camera, offset, &quadval); DC1394_ERR_RTN(err, "Could not get manual modecapability for feature %d",feature); if (quadval & 0x01000000UL) { *value= DC1394_TRUE; } else { *value= DC1394_FALSE; } return err;}dc1394error_tdc1394_feature_get_mode(dc1394camera_t *camera, dc1394feature_t feature, dc1394feature_mode_t *mode){ dc1394error_t err; octlet_t offset; quadlet_t quadval; if (feature == DC1394_FEATURE_TRIGGER) { return DC1394_INVALID_FEATURE; } FEATURE_TO_VALUE_OFFSET(feature, offset);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -