...
This commit is contained in:
parent
6836182e53
commit
719e2ec7e7
@ -13,6 +13,7 @@ find_package(spdlog REQUIRED)
|
|||||||
find_package(CFITSIO REQUIRED)
|
find_package(CFITSIO REQUIRED)
|
||||||
find_package(XCLIB REQUIRED)
|
find_package(XCLIB REQUIRED)
|
||||||
|
|
||||||
|
|
||||||
set(RAPTOR_EAGLEV_LIB raptor_eaglev)
|
set(RAPTOR_EAGLEV_LIB raptor_eaglev)
|
||||||
add_library(${RAPTOR_EAGLEV_LIB} SHARED
|
add_library(${RAPTOR_EAGLEV_LIB} SHARED
|
||||||
raptor_eagle_ccd.h raptor_eagle_ccd.cpp
|
raptor_eagle_ccd.h raptor_eagle_ccd.cpp
|
||||||
@ -25,7 +26,7 @@ target_compile_definitions(${RAPTOR_EAGLEV_LIB} PRIVATE USE_SPDLOG_LIBRARY)
|
|||||||
# !!!!! TEMPORARY !!!!!
|
# !!!!! TEMPORARY !!!!!
|
||||||
target_include_directories(${RAPTOR_EAGLEV_LIB} PRIVATE "../ADC/")
|
target_include_directories(${RAPTOR_EAGLEV_LIB} PRIVATE "../ADC/")
|
||||||
target_include_directories(${RAPTOR_EAGLEV_LIB} PRIVATE ${XCLIB_INCLUDE_DIR})
|
target_include_directories(${RAPTOR_EAGLEV_LIB} PRIVATE ${XCLIB_INCLUDE_DIR})
|
||||||
target_link_libraries(${RAPTOR_EAGLEV_LIB} PUPLIC Threads::Threads spdlog::spdlog)
|
target_link_libraries(${RAPTOR_EAGLEV_LIB} PUBLIC Threads::Threads spdlog::spdlog_header_only ${XCLIB_LIBRARIES})
|
||||||
|
|
||||||
add_executable(RaptorEagleV main.cpp)
|
add_executable(RaptorEagleV main.cpp)
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
#include <fitsio.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "raptor_eagle_ccd.h"
|
#include "raptor_eagle_ccd.h"
|
||||||
|
|
||||||
@ -74,6 +75,48 @@ void RaptorEagleCCD::AcquisitionProcess::start(const std::shared_ptr<acq_params_
|
|||||||
isAcqInProgress = false;
|
isAcqInProgress = false;
|
||||||
|
|
||||||
// save to FITS file
|
// save to FITS file
|
||||||
|
|
||||||
|
_manager->logInfo("Try to save FITS file with name '{}'", _acqParams->filename);
|
||||||
|
|
||||||
|
fitsfile* fitsFilePtr;
|
||||||
|
int status = 0;
|
||||||
|
|
||||||
|
int naxis = 2;
|
||||||
|
long naxes[naxis];
|
||||||
|
naxes[0] = _acqParams->roiWidth;
|
||||||
|
naxes[1] = _acqParams->roiHeight;
|
||||||
|
|
||||||
|
char err_str[100];
|
||||||
|
|
||||||
|
fits_clear_errmsg();
|
||||||
|
|
||||||
|
fits_create_file(&fitsFilePtr, _acqParams->filename.c_str(), &status);
|
||||||
|
|
||||||
|
// keywords from user template file
|
||||||
|
if (_acqParams->templateFilename.size() && !status) {
|
||||||
|
_manager->logDebug("Copy keywords from '{}' template file", _acqParams->templateFilename);
|
||||||
|
fits_write_key_template(fitsFilePtr, _acqParams->templateFilename.c_str(), &status);
|
||||||
|
if (status) { // ignore possible errors
|
||||||
|
fits_get_errstatus(status, err_str);
|
||||||
|
_manager->logWarn(
|
||||||
|
"An error occured while copy keywords from the template file '{}' (err = {}, msg = {})! Ignore!",
|
||||||
|
_acqParams->templateFilename, status, err_str);
|
||||||
|
|
||||||
|
status = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// the keywords
|
||||||
|
|
||||||
|
fits_update_key_str(fitsFilePtr, "ORIGIN", "SAO RAS", NULL, &status);
|
||||||
|
fits_update_key_str(fitsFilePtr, "CREATOR", "RaptorEagleV control software", NULL, &status);
|
||||||
|
|
||||||
|
|
||||||
|
fits_close_file(fitsFilePtr, &status);
|
||||||
|
|
||||||
|
fits_get_errstatus(status, err_str);
|
||||||
|
|
||||||
|
_manager->logInfo("FITS file '{}' is saved", _acqParams->filename);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1022,7 +1022,7 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
_permanentFitsKeywords.push_back(key);
|
_permanentFitsKeywords.push_back(key);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[this](const std::vector<std::string>& keys) { // serialize as "USER_FITS_KEY_SEP_SEQ" separated char sequences
|
[](const std::vector<std::string>& keys) { // serialize as "USER_FITS_KEY_SEP_SEQ" separated char sequences
|
||||||
attribute_t::serialized_t res;
|
attribute_t::serialized_t res;
|
||||||
|
|
||||||
if (keys.size() > 1) {
|
if (keys.size() > 1) {
|
||||||
@ -1036,7 +1036,7 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
[this](const attribute_t::serialized_t& char_seq) {
|
[](const attribute_t::serialized_t& char_seq) {
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
for (auto const& key : char_seq | std::views::split(USER_FITS_KEY_SEP_SEQ)) {
|
for (auto const& key : char_seq | std::views::split(USER_FITS_KEY_SEP_SEQ)) {
|
||||||
keys.push_back({key.begin(), key.end()});
|
keys.push_back({key.begin(), key.end()});
|
||||||
@ -1062,7 +1062,7 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
_currentFitsKeywords.push_back(key);
|
_currentFitsKeywords.push_back(key);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[this](const std::vector<std::string>& keys) { // serialize as "USER_FITS_KEY_SEP_SEQ" separated char sequences
|
[](const std::vector<std::string>& keys) { // serialize as "USER_FITS_KEY_SEP_SEQ" separated char sequences
|
||||||
attribute_t::serialized_t res;
|
attribute_t::serialized_t res;
|
||||||
|
|
||||||
if (keys.size() > 1) {
|
if (keys.size() > 1) {
|
||||||
@ -1076,7 +1076,7 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
[this](const attribute_t::serialized_t& char_seq) {
|
[](const attribute_t::serialized_t& char_seq) {
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
for (auto const& key : char_seq | std::views::split(USER_FITS_KEY_SEP_SEQ)) {
|
for (auto const& key : char_seq | std::views::split(USER_FITS_KEY_SEP_SEQ)) {
|
||||||
keys.push_back({key.begin(), key.end()});
|
keys.push_back({key.begin(), key.end()});
|
||||||
@ -1467,6 +1467,18 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
writeRegisters(CL_READMODE_ADDR, {bits});
|
writeRegisters(CL_READMODE_ADDR, {bits});
|
||||||
|
|
||||||
logDebug("Readout mode is set to 0x{:02X} bits", bits);
|
logDebug("Readout mode is set to 0x{:02X} bits", bits);
|
||||||
|
},
|
||||||
|
adc::utils::AdcDefaultValueConverter<>::serialize<attribute_t::serialized_t, std::string_view>,
|
||||||
|
[](const attribute_t::serialized_t& v) {
|
||||||
|
auto comp_case_ignore = [](const auto& v1, const auto& v2) { return std::toupper(v1) == v2; };
|
||||||
|
|
||||||
|
if (std::ranges::equal(v, CAMERA_ATTR_READ_MODE_NORMAL, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_READ_MODE_NORMAL;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_READ_MODE_TEST, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_READ_MODE_TEST;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CAMERA_ATTR_STR_INVALID;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -1508,6 +1520,18 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
writeRegisters(CL_FRAMERATE_ADDR, bytes);
|
writeRegisters(CL_FRAMERATE_ADDR, bytes);
|
||||||
|
|
||||||
logDebug("Readout rate is set to [0x{:02X}, 0x{:02X}] bytes", bytes[0], bytes[1]);
|
logDebug("Readout rate is set to [0x{:02X}, 0x{:02X}] bytes", bytes[0], bytes[1]);
|
||||||
|
},
|
||||||
|
adc::utils::AdcDefaultValueConverter<>::serialize<attribute_t::serialized_t, std::string_view>,
|
||||||
|
[](const attribute_t::serialized_t& v) {
|
||||||
|
auto comp_case_ignore = [](const auto& v1, const auto& v2) { return std::toupper(v1) == v2; };
|
||||||
|
|
||||||
|
if (std::ranges::equal(v, CAMERA_ATTR_READ_RATE_FAST, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_READ_RATE_FAST;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_READ_RATE_SLOW, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_READ_RATE_SLOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CAMERA_ATTR_STR_INVALID;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -1552,6 +1576,20 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
writeRegisters(CL_SHUTTER_CONTROL_ADDR, bytes);
|
writeRegisters(CL_SHUTTER_CONTROL_ADDR, bytes);
|
||||||
|
|
||||||
logDebug("Shutter state is set to 0x{:02X}", bytes[0]);
|
logDebug("Shutter state is set to 0x{:02X}", bytes[0]);
|
||||||
|
},
|
||||||
|
adc::utils::AdcDefaultValueConverter<>::serialize<attribute_t::serialized_t, std::string_view>,
|
||||||
|
[](const attribute_t::serialized_t& v) {
|
||||||
|
auto comp_case_ignore = [](const auto& v1, const auto& v2) { return std::toupper(v1) == v2; };
|
||||||
|
|
||||||
|
if (std::ranges::equal(v, CAMERA_ATTR_SHUTTER_STATE_EXP, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_SHUTTER_STATE_EXP;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_SHUTTER_STATE_CLOSED, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_SHUTTER_STATE_CLOSED;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_SHUTTER_STATE_OPEN, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_SHUTTER_STATE_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CAMERA_ATTR_STR_INVALID;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -1674,6 +1712,24 @@ void RaptorEagleCCD::initAttrComm()
|
|||||||
}
|
}
|
||||||
|
|
||||||
logDebug("Trigger mode bits are set to 0b{:08b}", bits);
|
logDebug("Trigger mode bits are set to 0b{:08b}", bits);
|
||||||
|
},
|
||||||
|
adc::utils::AdcDefaultValueConverter<>::serialize<attribute_t::serialized_t, std::string_view>,
|
||||||
|
[](const attribute_t::serialized_t& v) {
|
||||||
|
auto comp_case_ignore = [](const auto& v1, const auto& v2) { return std::toupper(v1) == v2; };
|
||||||
|
|
||||||
|
if (std::ranges::equal(v, CAMERA_ATTR_TRIGGER_MODE_EXT_RISING, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_TRIGGER_MODE_EXT_RISING;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_TRIGGER_MODE_EXT_FALLING, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_TRIGGER_MODE_EXT_FALLING;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_TRIGGER_MODE_FFR, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_TRIGGER_MODE_FFR;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_TRIGGER_MODE_ITR, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_TRIGGER_MODE_ITR;
|
||||||
|
} else if (std::ranges::equal(v, CAMERA_ATTR_TRIGGER_MODE_SNAPSHOT, comp_case_ignore)) {
|
||||||
|
return CAMERA_ATTR_TRIGGER_MODE_SNAPSHOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CAMERA_ATTR_STR_INVALID;
|
||||||
});
|
});
|
||||||
|
|
||||||
logDebug("Attributes and commands are successfully created!");
|
logDebug("Attributes and commands are successfully created!");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user