Ejemplo n.º 1
0
/*
 * Private functions
 */
dc1394error_t
get_sff_address_from_csr_guid (dc1394camera_t* camera, const dc1394basler_sff_guid_t* feature_guid, uint64_t* address)
{
    dc1394error_t err;
    uint32_t data;

    if (camera == NULL || feature_guid == NULL || address == NULL)
        return DC1394_FAILURE;

    /* write GUID like this to BASLER_ADDRESS_SFF_INQUIRY_REGISTER:
     * 0x10   <- D1
     * 0x14   <- D3 | D2
     * 0x18   <- D4[3] | D4[2] | D4[1] | D4[0]
     * 0x1C   <- D4[7] | D4[6] | D4[5] | D4[4]
     */
    data = feature_guid->d1;
    err = dc1394_set_adv_control_register (camera, BASLER_ADDRESS_SFF_INQUIRY, data);
    DC1394_ERR_RTN(err, "Could not write D1 to SFF inquiry register");

    data = ((uint32_t)feature_guid->d3) << 16 | feature_guid->d2;
    err = dc1394_set_adv_control_register (camera, BASLER_ADDRESS_SFF_INQUIRY + 0x4U, data);
    DC1394_ERR_RTN(err, "Could not write D3 | D2 to SFF inquiry register");

    data = ((uint32_t)feature_guid->d4[3] << 24) | ((uint32_t)feature_guid->d4[2] << 16) |
        ((uint32_t)feature_guid->d4[1] << 8) | feature_guid->d4[0];
    err = dc1394_set_adv_control_register (camera, BASLER_ADDRESS_SFF_INQUIRY + 0x8U, data);
    DC1394_ERR_RTN(err, "Could not write D4[3..0] to SFF inquiry register");

    data = ((uint32_t)feature_guid->d4[7] << 24) | ((uint32_t)feature_guid->d4[6] << 16) |
        ((uint32_t)feature_guid->d4[5] << 8) | feature_guid->d4[4];
    err = dc1394_set_adv_control_register (camera, BASLER_ADDRESS_SFF_INQUIRY + 0xCU, data);
    DC1394_ERR_RTN(err, "Could not write D4[7..4] to SFF inquiry register");

    /* read address */
    err = dc1394_get_adv_control_register (camera, BASLER_ADDRESS_SFF_ADDRESS, &data);
    DC1394_ERR_RTN(err, "Could not read first quadlet of address from SFF address register");

    *address = data;

    err = dc1394_get_adv_control_register (camera, BASLER_ADDRESS_SFF_ADDRESS + 0x4U, &data);
    DC1394_ERR_RTN(err, "Could not read second quadlet of address from SFF address register");

    *address |= ((uint64_t)data) << 32;
    *address -= CONFIG_ROM_BASE;
    return DC1394_SUCCESS;
}
Ejemplo n.º 2
0
/*
 * Tests whether the camera supports Basler SFF
 */
dc1394error_t
dc1394_basler_sff_is_available (dc1394camera_t* camera, dc1394bool_t *available)
{
    uint32_t data;
    dc1394error_t err;
    const uint32_t basler_feature_id_1 = 0x0030533b;
    const uint32_t basler_feature_id_2 = 0x73c3f000;

    if (camera == NULL || available == NULL) {
        err = DC1394_INVALID_ARGUMENT_VALUE;
        DC1394_ERR_RTN(err, "camera or available is NULL");
    }
    *available = DC1394_FALSE;

    err = dc1394_set_adv_control_register (camera, 0x0U, basler_feature_id_1);
    DC1394_ERR_RTN(err, "Could not write the first quadlet of Basler feature ID");

    err = dc1394_set_adv_control_register (camera, 0x4U, basler_feature_id_2);
    DC1394_ERR_RTN(err, "Could not write the second quadlet of Basler feature ID");

    err = dc1394_get_adv_control_register (camera, 0x0U, &data);
    DC1394_ERR_RTN(err, "Could not read from the ACR");
    if (data != 0xffffffff) {
        *available = DC1394_TRUE;
        return DC1394_SUCCESS;
    }

    err = dc1394_get_adv_control_register (camera, 0x4U, &data);
    DC1394_ERR_RTN(err, "Could not read from ACR + 4");
    if (data != 0xffffffff) {
        *available = DC1394_TRUE;
        return DC1394_SUCCESS;
    }

    /* SFF is not supported */
    return DC1394_SUCCESS;
}
Ejemplo n.º 3
0
void FWCamera::enablePtGreyBayer()
{
#ifdef AVG_ENABLE_1394_2
    dc1394error_t err; 
    uint32_t imageDataFormat;
    err = dc1394_get_adv_control_register(m_pCamera, 0x48, &imageDataFormat);
    AVG_ASSERT(err == DC1394_SUCCESS);
    if (imageDataFormat & 0x80000000) {
        err = dc1394_set_adv_control_register(m_pCamera, 0x48, 0x80000081);
        AVG_ASSERT(err == DC1394_SUCCESS);
        uint32_t bayerFormat;
        err = dc1394_get_adv_control_register(m_pCamera, 0x40, &bayerFormat);
        AVG_ASSERT(err == DC1394_SUCCESS);
        PixelFormat exactPF = fwBayerStringToPF(bayerFormat);
        if (exactPF == I8) {
            throw(Exception(AVG_ERR_CAMERA_NONFATAL, 
                    "Greyscale camera doesn't support bayer pattern."));
        }
        setCamPF(exactPF);
    }
#endif
}
Ejemplo n.º 4
0
/** Set the area of interest (AOI) for the auto functions.
 * @param left offset form the left image border
 * @param top offset form the top image border
 * @param width width of the AOI
 * @param height height of the AOI
 * @param show_work_area highlight the work area in the image
 * @return true on success, false otherwise
 */
bool
PikeCamera::set_autofunction_aoi(unsigned int left,
                                 unsigned int top,
                                 unsigned int width,
                                 unsigned int height,
                                 bool         show_work_area)
{
	if (!_opened) {
		return false;
	}

	if (!set_autofnc_aoi_) {
		return true;
	}

	avt_autofnc_aoi_t      aoi;
	avt_af_area_position_t position;
	avt_af_area_size_t     size;

	aoi.show_work_area = show_work_area;
	aoi.on_off         = true;

	position.left = left;
	position.top  = top;

	size.width  = width;
	size.height = height;

	dc1394error_t err;

	uint32_t value = 0;
	memcpy((void *)&value, (void *)&aoi, sizeof(value));

	err = dc1394_set_adv_control_register(_camera, AVT_AUTOFNC_AOI_REGISTER, value);

	if (err != DC1394_SUCCESS) {
		throw Exception(
		  "Pike::set_autofunction_aoi; dc1394_set_register(AVT_AUTOFNC_AOI_REGISTER) failed\n");
	}

	memcpy((void *)&value, (void *)&position, sizeof(value));
	err = dc1394_set_adv_control_register(_camera, AVT_AF_AREA_POSITION_REGISTER, value);

	if (err != DC1394_SUCCESS) {
		throw Exception(
		  "Pike::set_autofunction_aoi; dc1394_set_register(AVT_AF_AREA_POSITION_REGISTER) failed\n");
	}

	memcpy((void *)&value, (void *)&size, sizeof(value));
	err = dc1394_set_adv_control_register(_camera, AVT_AF_AREA_SIZE_REGISTER, value);

	if (err != DC1394_SUCCESS) {
		throw Exception(
		  "Pike::set_autofunction_aoi; dc1394_set_register(AVT_AF_AREA_SIZE_REGISTER) failed\n");
	}

	err = dc1394_get_adv_control_register(_camera, AVT_AUTOFNC_AOI_REGISTER, &value);
	if (err != DC1394_SUCCESS) {
		throw Exception(
		  "Pike::set_autofunction_aoi; dc1394_get_register(AVT_AUTOFNC_AOI_REGISTER) failed\n");
	}

	memcpy((void *)&aoi, (void *)&value, sizeof(value));

	return aoi.on_off;
}