📄 dc1394_vendor_pixelink.c
字号:
dc1394error_tdc1394_pxl_get_gpo_param_min_max(dc1394camera_t *camera, uint_t gpio_id, quadlet_t *p1_val, quadlet_t *p2_val, quadlet_t *p3_val, quadlet_t *p1_min, quadlet_t *p2_min, quadlet_t *p3_min, quadlet_t *p1_max, quadlet_t *p2_max, quadlet_t *p3_max) { dc1394error_t err; dc1394_pxl_gpio_info_t gpio_info; err = dc1394_pxl_get_gpio_inq(camera, &gpio_info); if (err == DC1394_FAILURE) { return DC1394_FAILURE; } if (!(gpio_info.presence && gpio_id < gpio_info.number)) { return DC1394_FAILURE; } quadlet_t gpio_parm1_abs, gpio_parm2_abs, gpio_parm3_abs; GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM1_ABS, &gpio_parm1_abs); GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM2_ABS, &gpio_parm2_abs); GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM3_ABS, &gpio_parm3_abs); quadlet_t gpio_parm1_add, gpio_parm2_add, gpio_parm3_add; gpio_parm1_add = 4*gpio_parm1_abs + gpio_id*0x0c + 0x08; gpio_parm2_add = 4*gpio_parm2_abs + gpio_id*0x0c + 0x08; gpio_parm3_add = 4*gpio_parm3_abs + gpio_id*0x0c + 0x08; GetCameraROMValue(camera, (octlet_t)(gpio_parm1_add), p1_val); GetCameraROMValue(camera, (octlet_t)(gpio_parm2_add), p2_val); GetCameraROMValue(camera, (octlet_t)(gpio_parm3_add), p3_val);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : r 0x%08x < GPIO_PARM1_VALUE\n", gpio_parm1_add, *p1_val); printf(" 0x%08x : r 0x%08x < GPIO_PARM2_VALUE\n", gpio_parm2_add, *p2_val); printf(" 0x%08x : r 0x%08x < GPIO_PARM3_VALUE\n", gpio_parm3_add, *p3_val);#endif gpio_parm1_add = 4*gpio_parm1_abs+ gpio_id*0x0c + 0x00; gpio_parm2_add = 4*gpio_parm2_abs+ gpio_id*0x0c + 0x00; gpio_parm3_add = 4*gpio_parm3_abs+ gpio_id*0x0c + 0x00; GetCameraROMValue(camera, (octlet_t)(gpio_parm1_add), p1_min); GetCameraROMValue(camera, (octlet_t)(gpio_parm2_add), p2_min); GetCameraROMValue(camera, (octlet_t)(gpio_parm3_add), p3_min);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : r 0x%08x < GPIO_PARM1_MIN\n", gpio_parm1_add, *p1_min); printf(" 0x%08x : r 0x%08x < GPIO_PARM2_MIN\n", gpio_parm2_add, *p2_min); printf(" 0x%08x : r 0x%08x < GPIO_PARM3_MIN\n", gpio_parm3_add, *p3_min);#endif gpio_parm1_add = 4*gpio_parm1_abs+ gpio_id*0x0c + 0x04; gpio_parm2_add = 4*gpio_parm2_abs+ gpio_id*0x0c + 0x04; gpio_parm3_add = 4*gpio_parm3_abs+ gpio_id*0x0c + 0x04; GetCameraROMValue(camera, (octlet_t)(gpio_parm1_add), p1_max); GetCameraROMValue(camera, (octlet_t)(gpio_parm2_add), p2_max); GetCameraROMValue(camera, (octlet_t)(gpio_parm3_add), p3_max);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : r 0x%08x < GPIO_PARM1_MAX\n", gpio_parm1_add, *p1_max); printf(" 0x%08x : r 0x%08x < GPIO_PARM2_MAX\n", gpio_parm2_add, *p2_max); printf(" 0x%08x : r 0x%08x < GPIO_PARM3_MAX\n", gpio_parm3_add, *p3_max);#endif return DC1394_SUCCESS;}/****************************************************************************** * Function to set the GPO parameters P1, P2, P3 * Internal Function. * */dc1394error_tdc1394_pxl_set_gpo_param(dc1394camera_t *camera, uint_t gpio_id, quadlet_t p1_val, quadlet_t p2_val, quadlet_t p3_val) { dc1394error_t err; dc1394_pxl_gpio_info_t gpio_info; err = dc1394_pxl_get_gpio_inq(camera, &gpio_info); if (err == DC1394_FAILURE) { return DC1394_FAILURE; } quadlet_t gpio_parm1_abs, gpio_parm2_abs, gpio_parm3_abs; GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM1_ABS, &gpio_parm1_abs); GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM2_ABS, &gpio_parm2_abs); GetCameraAdvControlRegister(camera, PxL_ACR_GPIO_PARM3_ABS, &gpio_parm3_abs); quadlet_t gpio_parm1_add, gpio_parm2_add, gpio_parm3_add; gpio_parm1_add = 4*gpio_parm1_abs+ gpio_id*0x0c + 0x08; gpio_parm2_add = 4*gpio_parm2_abs+ gpio_id*0x0c + 0x08; gpio_parm3_add = 4*gpio_parm3_abs+ gpio_id*0x0c + 0x08; SetCameraROMValue(camera, (octlet_t)(gpio_parm1_add), p1_val); SetCameraROMValue(camera, (octlet_t)(gpio_parm2_add), p2_val); SetCameraROMValue(camera, (octlet_t)(gpio_parm3_add), p3_val);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : w 0x%08x < GPIO_PARM1_VALUE\n", gpio_parm1_add, p1_val); printf(" 0x%08x : w 0x%08x < GPIO_PARM2_VALUE\n", gpio_parm2_add, p2_val); printf(" 0x%08x : w 0x%08x < GPIO_PARM3_VALUE\n", gpio_parm3_add, p3_val);#endif return DC1394_SUCCESS;}/****************************************************************************** * Function to read GPIO config. Internal function? */dc1394error_tdc1394_pxl_get_gpo_config(dc1394camera_t *camera, uint_t gpio_id, quadlet_t *gpio_cfg) { dc1394error_t err; if (camera == NULL) return DC1394_FAILURE; quadlet_t gpio_cfg_add = PxL_ACR_GPIO_0_CFG + gpio_id*4; err = GetCameraAdvControlRegister(camera, (octlet_t) gpio_cfg_add, gpio_cfg);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : r 0x%08x < GPO_0_CFG\n", gpio_cfg_add, *gpio_cfg);#endif return err;}/****************************************************************************** * Function to set GPIO config. Internal function? */dc1394error_tdc1394_pxl_set_gpo_config(dc1394camera_t *camera, uint_t gpio_id, quadlet_t gpio_cfg) { dc1394error_t err; if (camera == NULL) return DC1394_FAILURE; quadlet_t gpio_cfg_add = PxL_ACR_GPIO_0_CFG + gpio_id*4; err = SetCameraAdvControlRegister(camera, (octlet_t) gpio_cfg_add, gpio_cfg);#ifdef PIXELINK_DEBUG_DISPLAY printf(" 0x%08x : w 0x%08x < GPO_0_CFG\n", gpio_cfg_add, gpio_cfg);#endif return err;}/****************************************************************************** * Function to print list of camera features. * It can be used to test many functions in this file. */dc1394error_tdc1394_pxl_print_camera_info(dc1394camera_t *camera) { dc1394_pxl_camera_info_t camera_info; dc1394_pxl_get_camera_info(camera, &camera_info); printf("Camera information.\n"); printf(" %-16s: %08x\n", "FPGA Version", camera_info.fpga_version); printf(" %-16s: %08x\n", "FW Version", camera_info.fw_version); printf(" %-16s: %s\n", "Serial Number", camera_info.serial_number); printf(" %-16s: %s\n", "Description", camera_info.description); dc1394_pxl_adv_feature_info_t adv_info; dc1394_pxl_get_adv_feature_info(camera, &adv_info); printf("Advanced Feature Information.\n"); printf(" %-16s: %s\n", "Name", adv_info.name); printf("\n"); return DC1394_SUCCESS;}/****************************************************************************** * Function to activate GPIO mode with the parameters */dc1394error_tdc1394_pxl_set_gpio_mode_param(dc1394camera_t *camera, uint_t gpio_id, dc1394pxl_gpio_polarity_t gpio_polarity, dc1394pxl_gpio_mode_t gpio_mode, double f1_val, double f2_val, double f3_val) { dc1394error_t err; dc1394_pxl_gpio_info_t gpio_info; err = dc1394_pxl_get_gpio_inq(camera, &gpio_info); if (err == DC1394_FAILURE) { return DC1394_FAILURE; } if (err == DC1394_FAILURE) { fprintf(stderr, "error reading gpio inq register\n"); return DC1394_FAILURE; } /* compose the cfg_register value */ quadlet_t gpio_cfg = PxL_GPO_CFG_ENABLE; /* check if mode is valid */ switch (gpio_mode) { case DC1394_PxL_GPIO_MODE_STROBE: gpio_cfg = gpio_cfg | PxL_GPO_CFG_MODE_STROBE; if (gpio_info.mode_strobe == DC1394_FALSE) err = DC1394_FAILURE; break; case DC1394_PxL_GPIO_MODE_NORMAL: gpio_cfg = gpio_cfg | PxL_GPO_CFG_MODE_NORMAL; if (gpio_info.mode_normal == DC1394_FALSE) err = DC1394_FAILURE; break; case DC1394_PxL_GPIO_MODE_PULSE: gpio_cfg = gpio_cfg | PxL_GPO_CFG_MODE_PULSE; if (gpio_info.mode_pulse == DC1394_FALSE) err = DC1394_FAILURE; break; case DC1394_PxL_GPIO_MODE_BUSY: gpio_cfg = gpio_cfg | PxL_GPO_CFG_MODE_BUSY; if (gpio_info.mode_busy == DC1394_FALSE) err = DC1394_FAILURE; break; case DC1394_PxL_GPIO_MODE_FLASH: gpio_cfg = gpio_cfg | PxL_GPO_CFG_MODE_FLASH; if (gpio_info.mode_flash == DC1394_FALSE) err = DC1394_FAILURE; break; default: err = DC1394_FAILURE; } if (err == DC1394_FAILURE) { fprintf(stderr, "error with gpio mode setting\n"); return DC1394_FAILURE; } /* check if polarity is valid */ switch (gpio_mode) { case DC1394_PxL_GPIO_POLARITY_NONE: /* No change in the mode, use whatever is available */ break; case DC1394_PxL_GPIO_POLARITY_HIGH: gpio_cfg = gpio_cfg | PxL_GPO_CFG_POLARITY_HIGH; if (gpio_info.polarity == DC1394_FALSE) err = DC1394_FAILURE; break; case DC1394_PxL_GPIO_POLARITY_LOW: gpio_cfg = gpio_cfg | PxL_GPO_CFG_POLARITY_LOW; if (gpio_info.polarity == DC1394_FALSE) err = DC1394_FAILURE; break; default: err = DC1394_FAILURE; } if (err == DC1394_FAILURE) { fprintf(stderr, "error with gpio polarity setting\n"); return DC1394_FAILURE; } /* Set the GPIO_CFG parameter */ dc1394_pxl_set_gpo_config(camera, gpio_id, gpio_cfg); /* Check the minimum and maximum values */ quadlet_t p1_val, p2_val, p3_val; quadlet_t p1_min, p2_min, p3_min, p1_max, p2_max, p3_max; double f1_min, f2_min, f3_min, f1_max, f2_max, f3_max; dc1394_pxl_get_gpo_param_min_max(camera, gpio_id, &p1_val, &p2_val, &p3_val, &p1_min, &p2_min, &p3_min, &p1_max, &p2_max, &p3_max); dc1394_pxl_convert_quadlet_to_float32(p1_min, &f1_min); dc1394_pxl_convert_quadlet_to_float32(p2_min, &f2_min); dc1394_pxl_convert_quadlet_to_float32(p3_min, &f3_min); dc1394_pxl_convert_quadlet_to_float32(p1_max, &f1_max); dc1394_pxl_convert_quadlet_to_float32(p2_max, &f2_max); dc1394_pxl_convert_quadlet_to_float32(p3_max, &f3_max); if ((f1_val < f1_min)| (f1_val > f1_max)) { fprintf(stderr, "\nWARNING: parameter1 out of bounds! corrected.\n"); } if ((f2_val < f2_min)| (f2_val > f2_max)) { fprintf(stderr, "\nWARNING: parameter2 out of bounds! corrected.\n"); } if ((f3_val < f3_min)| (f3_val > f3_max)) { fprintf(stderr, "\nWARNING: parameter3 out of bounds! corrected.\n"); } f1_val = (f1_val < f1_min)? f1_min: ((f1_val > f1_max)? f1_max: f1_val); f2_val = (f2_val < f2_min)? f2_min: ((f2_val > f2_max)? f2_max: f2_val); f3_val = (f3_val < f3_min)? f3_min: ((f3_val > f3_max)? f3_max: f3_val); dc1394_pxl_convert_float32_to_quadlet(f1_val, &p1_val); dc1394_pxl_convert_float32_to_quadlet(f2_val, &p2_val); dc1394_pxl_convert_float32_to_quadlet(f3_val, &p3_val); dc1394_pxl_set_gpo_param(camera, gpio_id, p1_val, p2_val, p3_val); return DC1394_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -