The VisAO Camera
VisAO::VisAOApp_standalone Class Reference

The standalone VisAO application, does not interface with the AO Supervisor. More...

#include <VisAOApp_standalone.h>

+ Inheritance diagram for VisAO::VisAOApp_standalone:

Public Member Functions

 VisAOApp_standalone () throw (AOException)
 Default constructor.
 VisAOApp_standalone (string name, int id, int logLevel=Logger::LOG_LEV_INFO) throw (AOException)
 Complicated constructor.
void set_conffile (std::string name) throw (AOException)
 VisAOApp_standalone (std::string name, const std::string &conffile) throw (AOException)
 Config file constructor.
void set_conffile (std::string name, const std::string &conffile) throw (AOException)
 For use if default constructed.
 VisAOApp_standalone (int argc, char **argv) throw (AOException)
 Command line constructor.
void usage ()
virtual std::string get_app_name ()
 Get the application name.
void log_msg (int LogLevel, std::string lmsg)
 Report an error. Also calls log_msg. Overloaded from VisAOApp_base. More...
virtual int Exec ()
 Installs the term and XXXX signal handlers, and calls Run(). More...
virtual int Run ()
 The application main loop, to be re-implemented in derived classes.
void signal_catcher ()
 Signal loop, normally won't need to be overridden. More...
virtual int start_signal_catcher (bool inherit_sched=true)
 Starts the signal catching loop. More...
virtual int install_sig_mainthread_catcher ()
 Install the SIG_MAINTHREAD signal catcher.
virtual int block_signal (int signum)
 Sets the signal mask to block signal signum.
virtual int block_sigio ()
 Sets the signal mask to block SIGIO and RTSIGIO.
virtual int kill_me ()
 Handle a timetodie condition upon exiting the signal catcher thread (e.g. tell main thread it is about to die) More...
- Public Member Functions inherited from VisAO::VisAOApp_base
 VisAOApp_base ()
 Default constructor.
virtual ~VisAOApp_base ()
 Virtual destructor.
int set_euid_called ()
 Changes the user id of the process to euid_called.
int set_euid_real ()
 Changes the user id fo the process to the real user id.
int set_RT_priority (int prio)
 Set the real-time priority of the current process. More...
int get_RT_priority ()
 Get the real-time priority of the current process.
int set_app_name (std::string an)
 Set the application name.
virtual int setup_baseApp (bool usethreads=false)
 Install fifo channels. More...
virtual int setup_baseApp (bool remfifo, bool locfifo, bool scrfifo, bool autfifo, bool usethreads=false)
 Create fifo names, then installs the fifo channels. More...
int setup_fifo_list (int nfifos)
 Allocate the fifo_list. More...
int connect_fifo_list ()
 Connect the fifo_list with exclusive locking. More...
int connect_fifo_list_nolock ()
 Connect the fifo_list without exclusive locking. More...
int setup_sigio ()
 Setup the SIGIO signal handling. More...
int setup_RTsigio ()
 Setup SIGIO signal handling using realtime signals. More...
int check_fifo_list_RTpending ()
 Check for pending reads for the fifo list while using the RT signals.
int write_fifo_channel (int ch, const char *com, int comlen, std::string *resp)
 Write data to a fifo_channel, and get a response if desired. More...
int write_fifo_channel (int ch, const char *com, int comlen, std::string *resp, char *sm)
 Write data to a fifo_channel, with a sequence message attached, and get a response if desired. More...
int get_fifo_channel_response (std::string *resp, int ch)
 Check, and wait if neccessary, for data on a fifo channel. More...
int set_wait_to (double to)
 Set the wait timeout for fifo channel responses. More...
double get_wait_to ()
 Get the wait timeout for fifo channel responses. More...
virtual int request_control (int cmode)
 Calls request_control(cmode, 0).
virtual int request_control (int cmode, bool override)
 Attempts to change the control type. More...
virtual std::string __remote_command (std::string com, char *seqmsg)
 Processing for remote commands. More...
virtual std::string remote_command (std::string com)
 Called by __remote_command after control state logic. More...
virtual std::string remote_command (std::string com, char *seqmsg)
virtual std::string __local_command (std::string com, char *seqmsg)
 Processing for local commands. More...
virtual std::string local_command (std::string com)
 Called by __local_command after control state logic. More...
virtual std::string local_command (std::string com, char *seqmsg)
virtual std::string __script_command (std::string com, char *seqmsg)
 Processing for script commands - not normally overriden. More...
virtual std::string script_command (std::string com)
 Called by __script_command after control state logic. More...
virtual std::string script_command (std::string com, char *seqmsg)
virtual std::string auto_command (std::string com, char *seqmsg)
 Processing for auto commands - to be overriden. More...
virtual std::string post_auto_command (std::string com, char *seqmsg=0)
 Processing for auto commands - not normally overriden. More...
std::string control_mode_string ()
 Convenience function to return the control type string, e.g. "REMOTE".
std::string control_mode_response ()
 Convenience function to return the control type response string, e.g. "A\n".
virtual void error_report (int LogLevel, std::string emsg)
 Report an error. Also calls log_msg. More...
VisAO::profilerget_profile ()
int get_use_profiler ()
int start_profiler ()
void * get_statusboard_shmemptr ()
 Get the status board shared memory pointer. More...
int set_statusboard_shmemkey (key_t mkey)
 Set the status board shared memory key. Does nothing else. More...
key_t get_statusboard_shmemkey ()
 Get the status board shared memory key. More...
virtual int update_statusboard ()
 Update the status board. More...
virtual void dataLogger (timeval tv)
 Log data at intervals.

Static Public Member Functions

static const std::string & ConfigFile ()
static const std::string & MyName ()
static const std::string & MyFullName ()
static int ID ()
static Config_File & ConfigDictionary ()
static int Verbosity ()
static string getConffile (string identity)
 Return configuration file path based on identity.

Static Protected Member Functions

static void SetMyName (const std::string &name)
static void SetConfigFile (const std::string &conffile) throw (Config_File_Exception)
static void SetID (int id)

Protected Attributes

std::string init_file
Config_File * init_vars
pthread_t main_thread
 Identifier for the main thread.
pthread_t signal_thread
 Identifier for the separate signal handling thread.
pthread_mutex_t signal_mutex
 Mutex for the condition signaling.
pthread_cond_t signal_cond
 Condition for telling main thread that something changed.
double signalth_sleeptime
- Protected Attributes inherited from VisAO::VisAOApp_base
std::string app_name
 The name of the application.
double pause_time
 Time to pause during application main loop.
fifo_list fl
 The list of named-pipe fifos used for inter-process comms.
std::string com_path
 The control fifo path base name.
std::string com_path_remote
 The path for the remote control fifos.
std::string com_path_local
 The path for the local control fifos.
std::string com_path_script
 The path for the script control fifos.
std::string com_path_auto
 The path for the auto control fifos.
double wait_to
 The timeout for waiting on responses from FIFOs in seconds.
std::ostringstream logss
 Conveninence string stream for building log messages.
std::string profile_path
int use_profiler
void * statusboard_shmemptr
 The pointer to the shared memory block for the statusboard.
key_t statusboard_shmemkey
 The key used to lookup the shared memory.
int statusboard_shmemid
 The ID of the shared memory block.
std::ofstream dataof
bool dataFileOpen
double dataFileOpenTime
double data_log_time_length
std::string data_save_path
std::string data_file_prefix

Static Protected Attributes

static Logger * _logger = NULL
- Static Protected Attributes inherited from VisAO::VisAOApp_base
static int control_mode = VisAOApp_base::CMODE_NONE
 The current control mode. More...
static int default_control_mode = -1
 The default control mode. More...

Private Member Functions

void setLogFile (string fileName)
void initTempLog ()
void CreateVisAOApp_standalone (int logLevel) throw (AOException)

Static Private Attributes

static std::string _configFile
static std::string _logFile
static std::string _myName
static int _ID
static std::string _myFullName
static Config_File * _cfg = NULL

Additional Inherited Members

- Public Types inherited from VisAO::VisAOApp_base
enum  control_modes {
 The control modes.
- Public Attributes inherited from VisAO::VisAOApp_base
pthread_mutex_t my_mutex
 Mutex used by the threaded versions of the standard command handlers.
- Protected Member Functions inherited from VisAO::VisAOApp_base
int create_statusboard (size_t sz)
 Creates and attaches to the statusboard shared memory. More...
std::string getDataFileName ()
int checkDataFileOpen ()

Detailed Description

This class reproduces the configuration and logging capabilities of the Arcetri::AOApp, but does not connect to the AO Supervisor.

Standard config options, none of which are required, are listed below. Default values are given between [] and units, where applicable, are given between ().

  • LogLevel string [INF] - the logger verbosity level: VTR, TRA, DEB, INF, WAR, ERR, FAT.
  • RT_priority int [0] - The real time priority, should only be changed if you are an expert user. Only works if the executable is setuid.
  • wait_to double [0.2] (seconds) - The timeout for fifo reads.
  • com_path string [fifos] - the directory for the command fifos, relative to VISAO_ROOT
  • profile_path string [profile] - the directory for profiler output, relative to VISAO_ROOT
  • use_profiler int [0] - flag specifying whether or no the profiler is used.
  • pause_time double [1.0] - the time between statusboard updates and other housekeeping in the main loop.
  • init_path string [init] - the directory to search for an initialization file, relative to VISAO_ROOT
  • data_save_path string [data/syslogs] - the directory relative to VISAO_ROOT where the process data log is written
  • data_file_prefix string [full app name] - the prefix for data logs
  • data_log_time_length double [120.0] - the length of time, in seconds, to allow a single data log file to remain open.

A VisAOApp accepts at least the following command line options:

  • -i identity, used for config lookup etc. This is often not required, but it is good practice to use it.
  • -f configuration (if not specified, takes the identity as prefix) [optional].
  • -v increase verbosity over default level (can appear multiple times) [optional].
  • -q decrease verbosity from default level (can appear multiple times) [optional].
  • -h prints a help message documenting these options, and exits [optional].

Definition at line 72 of file VisAOApp_standalone.h.

Member Function Documentation

void VisAO::VisAOApp_standalone::log_msg ( int  LogLevel,
std::string  lmsg 
emsgthe message to report.
LogLevelis the logger level for the error report. For erros this is usually Logger::LOG_LEVEL_ERROR or Logger::LOG_LEVEL_FATAL Log a message.
lmsgthe message to log. Overloaded from VisAOApp_base.
LogLevelis the logger level for the message.

Reimplemented from VisAO::VisAOApp_base.

Definition at line 496 of file VisAOApp_standalone.cpp.

Referenced by VisAO::FocusMotorCtrl::get_preset(), VisAO::FocusMotorCtrl::Run(), VisAO::FocusMotorCtrl::set_direction(), VisAO::FocusMotorCtrl::set_enable(), signal_catcher(), VisAO::framegrabber47::start_framegrabber(), VisAO::framegrabber39::start_framegrabber(), VisAO::FocusMotorCtrl::step(), VisAO::framegrabber47::stop_framegrabber(), and VisAO::framegrabber39::stop_framegrabber().

int VisAO::VisAOApp_standalone::Exec ( )

Normaly doesn't need to be re-implemented.

Definition at line 502 of file VisAOApp_standalone.cpp.

References Run().

void VisAO::VisAOApp_standalone::signal_catcher ( )
int VisAO::VisAOApp_standalone::start_signal_catcher ( bool  inherit_sched = true)
inherit_schedif true (default) then the signal_catcher is started with the same RT priority as the main loop.

Definition at line 583 of file VisAOApp_standalone.cpp.

References VisAO::__start_signal_catcher(), and signal_thread.

Referenced by VisAO::frameselector::Run(), VisAO::frameserver::Run(), VisAO::coronguide::Run(), VisAO::reconstructor::Run(), VisAO::GimbalMotorCtrl::Run(), VisAO::FocusMotorCtrl::Run(), and VisAO::CCD47Ctrl::Run().

int VisAO::VisAOApp_standalone::kill_me ( )

This isn't usually necessary, but see framewriter for an example of using it.

Reimplemented in VisAO::framewriter< dataT >, and VisAO::frameselector.

Definition at line 661 of file VisAOApp_standalone.cpp.

Referenced by signal_catcher().

The documentation for this class was generated from the following files: