Class Interface¶
Defined in File astrocam.h
Nested Relationships¶
Nested Types¶
Inheritance Relationships¶
Base Type¶
public Camera::InterfaceBase
Class Documentation¶
-
class Interface : public Camera::InterfaceBase¶
This class defines the interface to the AstroCam controller.
Public Functions
-
inline Interface()¶
-
inline long init_pubsub(const std::initializer_list<std::string> &topics = {})¶
-
inline void start_subscriber_thread()¶
-
inline void stop_subscriber_thread()¶
-
void publish_status(bool force = false)¶
-
void request_snapshot()¶
-
void handletopic_snapshot(const nlohmann::json &jmessage_in)¶
-
void handletopic_calib(const nlohmann::json &jmessage_in)¶
-
void handletopic_flexure(const nlohmann::json &jmessage_in)¶
-
void handletopic_focus(const nlohmann::json &jmessage_in)¶
-
void handletopic_power(const nlohmann::json &jmessage_in)¶
-
void handletopic_slit(const nlohmann::json &jmessage_in)¶
-
void handletopic_targetinfo(const nlohmann::json &jmessage_in)¶
-
void handletopic_tcs(const nlohmann::json &jmessage_in)¶
-
void handletopic_thermal(const nlohmann::json &jmessage_in)¶
-
inline void add_framethread()¶
-
inline void remove_framethread()¶
-
inline int get_framethread_count()¶
-
inline void init_framethread_count()¶
-
inline bool is_camera_idle(int dev)¶
is the specified camera idle?
Asking if a camera is idle refers to its activity status — actively reading out or in frame transfer.
- Parameters:
dev – [in] device number to check
- Returns:
true|false
-
inline bool is_camera_idle()¶
-
inline bool in_readout() const¶
-
inline bool in_frametransfer() const¶
-
inline void inc_expbuf()¶
-
inline int get_expbuf()¶
-
inline std::vector<int> exposure_pending_list()¶
returns the exposure_pending vector
- Returns:
std::vector<int>
-
inline bool exposure_pending()¶
Is an exposure pending or can a new exposure be started?
This function is overloaded with a version that allows setting the exposure_pending state.
- Returns:
bool { true | false }
-
inline void exposure_pending(int devnum, bool add)¶
Set or clear the exposure pending state for a given controller.
This function is overloaded with an inline version that returns a bool to indicate if there are any controllers with a pending exposure.
- Parameters:
devnum – [in] controller device number
add – [in] bool true to add, false to remove from pending vector
-
inline std::vector<int> writes_pending_list(int expbuf)¶
returns the writes_pending vector
- Parameters:
expbuf – [in] the exposure buffer number
- Returns:
std::vector<int>, the vector of devnums for this expbuf
-
inline bool any_writes_pending()¶
Is any device still writing frames for any exposure buffer?
- Returns:
true if any writes are pending, false otherwise
-
inline void write_pending(int expbuf, int devnum, bool add)¶
Set or clear the write pending state for a given exposure.
This function is overloaded with an inline version that returns a bool to indicate if there are any controllers with a pending write.
- Parameters:
expbuf – [in] exposure buffer number
devnum – [in] device number
add – [in] bool true to add, false to remove from pending vector
-
void get_logical(Controller *pcontroller, int &spat, int &spec, int &osspat, int &osspec, int &binspat, int &binspec)¶
-
long camera_active_state(const std::string &args, std::string &retstring, AstroCam::ActiveState cmd)¶
-
Controller *get_controller(const int dev)¶
-
Controller *get_active_controller(const int dev)¶
-
void exposure_progress()¶
-
void make_image_keywords(int dev)¶
-
long parse_spec_info(std::string args)¶
-
long parse_det_geometry(std::string args)¶
-
long parse_controller_config(std::string args)¶
-
long parse_activate_commands(std::string args)¶
-
int devnum_from_chan(const std::string &chan)¶
-
long extract_dev_chan(std::string args, int &dev, std::string &chan, std::string &retstring)¶
-
long test(std::string args, std::string &retstring)¶
test routines
-
void dothread_test_shutter_timer(long ms)¶
-
long interface(std::string &iface)¶
returns the interface
-
long do_abort()¶
-
long abort()¶
-
long do_bin(std::string args, std::string &retstring)¶
set/get binning factor
-
long bin(std::string args, std::string &retstring)¶
set/get binning factor
-
long do_connect_controller(const std::string devices_in, std::string &retstring)¶
opens a connection to the PCI/e device(s)
-
long connect_controller(std::string devices_in, std::string &help)¶
wrapper for do_connect_controller
-
long is_connected(std::string &retstring)¶
are all selected controllers connected?
-
long do_disconnect_controller(int dev)¶
closes the connection to the named PCI/e device
-
long do_disconnect_controller()¶
closes the connection to all PCI/e devices
-
long disconnect_controller()¶
wrapper for do_disconnect_controller
-
long do_configure_controller()¶
perform initial configuration of controller from .cfg file
-
long configure_controller()¶
wrapper for do_configure_controller
-
long access_useframes(std::string &useframes)¶
set or get the state of this->useframes
-
long access_nframes(std::string valstring)¶
-
int get_driversize()¶
-
long do_load_firmware(std::string &retstring)¶
load firmware (.lod) into one or all controller timing boards
-
long do_load_firmware(std::string timlodfile, std::string &retstring)¶
-
long load_firmware(std::string &retstring)¶
wrapper for load_firmware
-
long load_firmware(std::string timlodfile, std::string &retstring)¶
wrapper for load_firmware
-
long band_of_interest(std::string args, std::string &retstring)¶
set/get interest bands
-
long parse_boi_pairs(Controller *pcontroller, const std::string &args)¶
-
long load_boi_pairs(Controller *pcontroller, int &spat_total)¶
-
long reset_boi_full(Controller *pcontroller, int dev, const std::string &chan, std::string &retstring)¶
-
long adjust_boi_for_binning(Controller *pcontroller, int nskip, int nread, std::pair<int, int> &adj)¶
-
std::string print_bands_of_interest(Controller *pcontroller)¶
-
long set_camera_mode(std::string mode)¶
-
long exptime(std::string exptime_in, std::string &retstring)¶
-
long do_exptime(std::string exptime_in, std::string &retstring)¶
-
long modify_exptime(std::string exptime_in, std::string &retstring)¶
-
long do_modify_exptime(std::string exptime_in, std::string &retstring)¶
-
long stop_exposure(std::string exptime_in, std::string &retstring)¶
-
long pause_exposure(std::string exptime_in, std::string &retstring)¶
-
long resume_exposure(std::string exptime_in, std::string &retstring)¶
-
long shutter(std::string shutter_in, std::string &shutter_out)¶
-
long frame_transfer_mode(std::string args)¶
-
long frame_transfer_mode(std::string args, std::string &retstring)¶
-
long image_size(std::string args, std::string &retstring)¶
-
long set_image_size(Controller *pcontroller, int spat, int spec, int osspat, int osspec, int binspat, int binspec)¶
-
long geometry(std::string args, std::string &retstring)¶
-
long do_geometry(std::string args, std::string &retstring)¶
-
long bias(std::string args, std::string &retstring)¶
-
long buffer(std::string size_in, std::string &retstring)¶
-
long readout(std::string readout_in, std::string &readout_out)¶
-
long do_readout(std::string readout_in, std::string &readout_out)¶
-
void set_imagesize(int rowsin, int colsin, int *status)¶
-
long expose(std::string nexp_in)¶
-
long do_expose(int nexp_in)¶
-
double get_live_airmass()¶
latest airmass from cached tcsd telemetry, or NAN
-
long native(std::string cmdstr)¶
-
long native(std::string cmdstr, std::string &retstring)¶
-
long do_native(std::string cmdstr)¶
selected or all open controllers
send 3-letter command to …
-
long do_native(std::string cmdstr, std::string &retstring)¶
selected or all open controllers, return reply
-
long do_native(std::vector<int> selectdev, std::string cmdstr)¶
specified by vector
-
long do_native(std::vector<int> selectdev, std::string cmdstr, std::string &retstring)¶
specified by vector
-
long do_native(int dev, std::string cmdstr, std::string &retstring)¶
specified by devnum
-
long do_native(int dev, std::string cmdstr)¶
specified by devnum
-
long write_frame(int expbuf, int devnum, const std::string chan, int fpbcount)¶
-
void dothread_native(int dev, std::vector<uint32_t> cmd)¶
-
void handle_queue2(std::string message)¶
-
inline int keytype_string()¶
-
inline int keytype_double()¶
-
inline int keytype_integer()¶
-
inline int fits_bpp16()¶
-
inline int fits_bpp32()¶
Public Members
-
Camera::Information camera_info¶
instantiate a Camera object
-
std::map<std::string, nlohmann::json> live_telemetry¶
this is the main camera_info object
latest JSON snapshot per provider, keyed by Topic
-
std::mutex live_telemetry_mtx¶
-
std::string publisher_address¶
publish socket endpoint
-
std::string publisher_topic¶
my default topic for publishing
-
std::string subscriber_address¶
subscribe socket endpoint
-
std::vector<std::string> subscriber_topics¶
list of topics I subscribe to
-
std::atomic<bool> is_subscriber_thread_running¶
is my subscriber thread running?
-
std::atomic<bool> should_subscriber_thread_run¶
should my subscriber thread run?
-
std::unordered_map<std::string, std::function<void(const nlohmann::json&)>> topic_handlers¶
maps a handler function to each topic
-
Common::Broadcaster broadcast = {this->publisher, Daemon::CAMERAD}¶
-
std::vector<std::shared_ptr<Camera::Information>> fitsinfo¶
-
std::mutex frameinfo_mutex¶
protects access to frameinfo
-
std::mutex framecount_mutex¶
protects access to frame count
-
std::atomic<int> framethreadcount¶
-
std::mutex framethreadcount_mutex¶
-
std::atomic<bool> state_monitor_thread_running¶
-
std::condition_variable state_monitor_condition¶
-
std::mutex state_lock¶
-
std::mutex publish_mutex¶
serializes concurrent callers of publish_status()
-
std::condition_variable exposure_condition¶
-
std::mutex exposure_lock¶
-
std::condition_variable write_condition¶
-
std::mutex write_lock¶
-
std::map<int, Controller> controller¶
-
bool modeselected¶
true if a valid mode has been selected, false otherwise
-
bool useframes¶
Not all firmware supports frames.
-
std::vector<FITS_file*> pFits¶
vector of FITS containers, one for each exposure number for multiple buffering
-
std::map<std::string, readout_info_t> readout_source¶
STL map of readout sources indexed by readout name.
Public Static Functions
-
static void dothread_load(Controller &con, std::string timlodfile)¶
-
static void dothread_read(Camera::Camera &cam, Controller &con, int expbuf)¶
-
static void dothread_expose(Controller &con)¶
-
static void handle_frame(int expbuf, int devnum, uint32_t fpbcount, uint32_t fcount, void *buffer)¶
-
static void handle_queue(std::string message)¶
-
class Controller¶
contains information for each controller
The Controller class is a sub-class of Interface and is here to contain the Camera::Information class and FITS_file class objects. There will be a vector of Controller class objects which matches the vector of controller objects.
Public Functions
-
inline Controller()¶
-
inline ~Controller()¶
-
void logical_to_physical(int spat, int spec, int &rows, int &cols) const¶
-
void physical_to_logical(int rows, int cols, int &spat, int &spec) const¶
-
inline int spat_physical_axis() const¶
-
inline int spec_physical_axis() const¶
-
inline bool has_boi() const¶
-
inline uint32_t get_bufsize()¶
-
inline uint32_t set_bufsize(uint32_t sz)¶
-
long alloc_workbuf()¶
-
inline void init_framecount()¶
-
inline int get_framecount()¶
-
inline void increment_framecount()¶
-
long write()¶
wrapper for this->pFits->write_image()
-
long open_file(std::string writekeys)¶
wrapper for this->pFits->open_file()
-
void close_file(std::string writekeys)¶
wrapper for this->pFits->close_file()
Public Members
-
Camera::Information info¶
no deconstructor
camera info object for this controller
-
void *workbuf¶
pointer to workspace for performing deinterlacing
-
std::vector<Camera::Information> expinfo¶
vector of Camera::Information class, one for each exposure buffer
This contains the camera information for each exposure buffer. Note that since Camera::Information contains extkeys and prikeys objects, expinfo will contain those objects, but prikeys should not be used. Use only Controller::expinfo.extkeys because keys specific to a given controller will be added to that controller’s extension.
-
std::mutex pcimtx¶
mutex protects talking to this PCI driver
-
int error¶
-
int cols¶
total number of columns read (includes overscan)
-
int rows¶
total number of rows read (includes overscan)
-
int detcols¶
number of detector columns (unchanged by binning)
-
int detrows¶
number of detector rows (unchanged by binning)
-
int oscols0¶
requested number of overscan rows
-
int osrows0¶
requested number of overscan columns
-
int oscols¶
realized number of overscan rows (can be modified by binning)
-
int osrows¶
realized number of overscan columns (can be modified by binning)
-
int skiprows¶
-
int skipcols¶
-
int defcols¶
default number of detector columns
-
int defrows¶
default number of detector rows
-
int defoscols¶
default number of overscan rows
-
int defosrows¶
default number of overscan columns
-
int defbincols¶
default number of overscan rows
-
int defbinrows¶
default number of overscan columns
-
std::string imsize_args¶
IMAGE_SIZE arguments read from config file, used to restore default.
-
arc::gen3::CArcDevice *pArcDev¶
arc::CController object pointer — things pointed to by this are in the ARC API
-
bool connected¶
true if controller connected (requires successful TDL command)
-
bool configured¶
set false to skip future use of controllers when unable to connect
-
bool active¶
used to disable an otherwise-configured controller
-
bool is_imsize_set¶
has image_size been called after controller connected?
-
bool firmwareloaded¶
true if firmware is loaded, false otherwise
-
std::string firmware¶
name of firmware (.lod) file
-
std::string channel¶
name of spectrographic channel
-
std::string ccd_id¶
CCD identifier (E.G. serial number, name, etc.)
-
int devnum¶
this controller’s devnum
-
std::string devname¶
comes from arc::gen3::CArcPCI::getDeviceStringList()
-
std::uint32_t retval¶
convenient place to hold return values for threaded commands to this controller
-
std::map<int, frameinfo_t> frameinfo¶
STL map of frameinfo structure (see above)
-
uint32_t readout_arg¶
-
bool have_ft¶
Do I have (and am I using) frame transfer?
-
std::atomic<bool> in_readout¶
Is the controller currently reading out/transmitting pixels?
-
std::atomic<bool> in_frametransfer¶
Is the controller currently performing a frame transfer?
-
std::vector<std::string> activate_commands¶
Public Static Functions
-
template<class T>
static void dothread_deinterlace(DeInterlace<T> &deinterlace, int cols, int rows, int section, int nthreads)¶
-
inline Controller()¶
-
struct frameinfo_t¶
Public Members
-
int tid¶
use fpbcount as the thread ID here
the current frame from ARC_API’s fcount, counts from 1
-
int rows¶
number of rows in this frame
-
int cols¶
number of cols in this frame
-
void *buf¶
pointer to the start of memory holding this frame
-
bool inuse¶
this thread ID is in use, set when thread is spawned, cleared when handle_frame is done
-
int tid¶
-
struct readout_info_t¶
Public Members
-
ReadoutType readout_type¶
enum for readout type
-
uint32_t readout_arg¶
argument for Arc firmware command
-
ReadoutType readout_type¶
-
inline Interface()¶