The VisAO Camera
VisAO::framegrabber< dataT > Class Template Reference

The basic VisAO framegrabber. More...

#include <framegrabber.h>

+ Inheritance diagram for VisAO::framegrabber< dataT >:

Public Member Functions

 framegrabber (int argc, char **argv) throw (AOException)
 
 framegrabber (std::string, const std::string &conffile) throw (AOException)
 
virtual int Run ()
 Main loop, normally won't need to be overridden.
 
virtual int start_framegrabber ()
 Override this: it is where your framegrabber should do all its work. Check for !STOP_FRAMEGRABBER and !TimeToDie.
 
virtual int stop_framegrabber ()
 Override this: framegrabber clean up.
 
int postGetImage ()
 Call this immediately after getting each frame. updates frameNo and saves the init file.
 
int send_ping ()
 Sends a ping to the waiting process (usuallly a framewriter). More...
 
int copyto_sharedim_short (unsigned char *im)
 Copies the image data to shared memory, as shorts.
 
int copyto_sharedim_short_rotated (unsigned char *im)
 Copies the image data to shared memory, as shorts, rotated by 90 degrees.
 
int copyto_sharedim_short_deintlv_rotated (unsigned char *im)
 Copies the image to data to shared memory, as shorts, rotated by 90 degrees, with DALSA 2 channel de-interleaving.
 
std::string local_command (std::string com)
 Called by __local_command after control state logic. More...
 
std::string script_command (std::string com)
 Called by __script_command after control state logic. More...
 
std::string auto_command (std::string com, char *seqmsg)
 Processing for auto commands - to be overriden. More...
 
std::string common_command (std::string com, int cmode)
 
- Public Member Functions inherited from VisAO::VisAOApp_standalone
 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...
 
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, 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, char *seqmsg)
 
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.
 

Protected Member Functions

void Create ()
 Processes the config file.
 
int addto_dark ()
 
int save_init ()
 Save the initialization data to disk.
 
int delete_init ()
 Delete the initialization file.
 
- 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 ()
 

Protected Attributes

u_char * image_p
 Pointer to the current image data.
 
int width
 Image width.
 
int bias_width
 Width of bias stripe (if any)
 
int height
 Image height.
 
int bias_height
 Height of bias stripe (if any)
 
int depth
 Image bit depth.
 
int frameNo
 For use as a running tally of images captured.
 
sharedim_stack< dataT > sis
 The shared memory ring buffer for image storage.
 
sharedim< dataT > * sim
 Pointer to a shared memory image.
 
int shmem_key
 The key for the shared memory.
 
int dark_shmem_key
 The key for the darks shared memory.
 
int num_sharedim
 The number of shared images available in the buffer.
 
size_t max_imsize
 The maximum size (x*y) of images that will be put in this buffer.
 
int hasWriterPing
 If true, open fifo for pinging the framewriter.
 
int writerPingEnabled
 Send pings on frame ready when true.
 
int writerPingChan
 The fifo channel for the writer pings.
 
int saves_remaining
 Number pings left to issue.
 
int num_skip
 The number of frames to skip between pings.
 
int skips_remaining
 Skips remaining.
 
int hasServerPing
 If true, open fifo for pinging the frame server.
 
int serverPingEnabled
 Send pings on frame ready when true.
 
int serverPingChan
 The fifo channel for the writer pings.
 
int STOP_FRAMEGRABBER
 If true, framegrabber stops at top of next loop.
 
int RUNNING
 Status of framegrabber.
 
int sh_i
 Convenience variable for loops.
 
int sh_j
 Convenience variable for loops.
 
timeval tv
 Convenience variable for filling in the frame time in the image header.
 
timeval tv_dma
 Convenience variable for filling in the dma timestamp.
 
sharedim_stack< dataT > dark_sis
 The shared memory ring buffer for image storage.
 
sharedim< dataT > * dark_sim
 Pointer to a shared memory image.
 
std::vector< dataT > dark_temp
 Temporary data storage for dark calculations.
 
int calc_dark
 
int no_darks_added
 
int init_save_interval
 
- Protected Attributes inherited from VisAO::VisAOApp_standalone
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.
 
VisAO::profilerprofile
 
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
 

Additional Inherited Members

- Public Types inherited from VisAO::VisAOApp_base
enum  control_modes {
  CMODE_NONE, CMODE_REMOTE, CMODE_LOCAL, CMODE_SCRIPT,
  CMODE_AUTO, CMODE_max
}
 The control modes.
 
- Static Public Member Functions inherited from VisAO::VisAOApp_standalone
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.
 
- Public Attributes inherited from VisAO::VisAOApp_base
pthread_mutex_t my_mutex
 Mutex used by the threaded versions of the standard command handlers.
 
- Static Protected Member Functions inherited from VisAO::VisAOApp_standalone
static void SetMyName (const std::string &name)
 
static void SetConfigFile (const std::string &conffile) throw (Config_File_Exception)
 
static void SetID (int id)
 
- Static Protected Attributes inherited from VisAO::VisAOApp_standalone
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...
 

Detailed Description

template<class dataT>
class VisAO::framegrabber< dataT >

This class provides a framework for a framegrabber which writes to a sharedim_stack. You need to provide, at a minimum overloaded members start_framegrabber and stop_framegrabber. Has local, script, and auto fifos. Is intended to be normally controlled in auto mode by the camera controller. When a frame is ready, it (optionally) issues a ping to a frame writer process and a frame server process. These pings are frame-ready notifications. The difference between the writer and the server is that the writer also manages saving (number and skipping), whereas the server only receives pings.

In addition to the VisAOApp_standalone config file options, has:

  • num_sharedim int [200] - the number of shared images to build into the stack
  • max_imsize int [1024x1024] - the maximum possible size of an image
  • shmem_key int [DATA_framegrabber47] - the shared memory key of the image data circular buffer
  • dark_shmem_key int [0] - the shared memory key of the dark image data circular buffer
  • writer_ping_path string - the path to the frame writer ping fifo, relative to VISAO_ROOT
  • writer_ping_name string - the name of the frame writer ping. If not set then writer ping is disabled
  • server_ping_path string- the path to the frame server ping fifo, relative to VISAO_ROOT
  • server_ping_name string- the name of the frame server ping. If not set then server ping is disabled
  • init_save_interval int [200] - how often, in frames, to save the frame number to the init file

See VisAOApp_standalone for command line arguments. There are no additional command line arguments for a basic framegrabber, though derived clases may add them.

Commands:

  • start starts the framegrabber, returns 1
  • stop stops the framegrabber, returns 0
  • running? returns 1 if running, 0 if not
  • save n enable pings for n images
  • save -1 enable pings indefinitely
  • save 0 disable pings for frame writer
  • savedark n saves n dark images, and also updates the realtime dark
  • skip n when pings enabled, skip n frames between pings
  • save? status of pings for frame writer (returns value of save)
  • skip? returns the number of images being skipped
  • dark n calculates a new realtime dark image (average) from the next n frames
  • serve 1 enable pings for the frame server
  • serve 0 disable pings for the frame server
  • serve? status of pings for frame server
  • state? returns a string of the form "A,B,C,D,E,F" where the fields indicate:
    • A is the one letter control mode (N,R,L,S,or A)
    • B is the running state, 1 or 0
    • C is the status of saving, 0, n, or -1
    • D is the status of skipping, 0..n
    • E is the number of saves remaining
    • F is the status of the server ping

Definition at line 78 of file framegrabber.h.

Member Function Documentation

template<class dataT >
int VisAO::framegrabber< dataT >::send_ping ( )

Contains the logic for number of saves and skipping frames. Should be called after one of the copyto functions completes.

Return values
0on success
-1on failure

Definition at line 447 of file framegrabber.h.

References write_fifo_channel().

template<class dataT >
std::string VisAO::framegrabber< dataT >::local_command ( std::string  com)
virtual

This should be overriden by derived classes.

Parameters
comis the command string to be processed.
Returns
the application response.

Reimplemented from VisAO::VisAOApp_base.

Definition at line 621 of file framegrabber.h.

template<class dataT >
std::string VisAO::framegrabber< dataT >::script_command ( std::string  com)
virtual

This should be overriden by derived classes.

Parameters
comis the command string to be processed.
Returns
the application response.

Reimplemented from VisAO::VisAOApp_base.

Definition at line 631 of file framegrabber.h.

template<class dataT>
std::string VisAO::framegrabber< dataT >::auto_command ( std::string  com,
char *  seqmsg 
)
virtual

The handler always calls auto_command, which after app specific processing should call post_auto_command. This is so app specific processing happens first in auto mode, for speed.

Parameters
comis the command string to be processed.
Returns
the application response.

Reimplemented from VisAO::VisAOApp_base.

Definition at line 642 of file framegrabber.h.


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