#include <shmimMonitor.hpp>
Public Member Functions | |
const std::string & | shmimName () const |
const uint32_t & | width () const |
const uint32_t & | height () const |
const uint32_t & | depth () const |
const uint8_t & | dataType () const |
const size_t & | typeSize () const |
int | setupConfig (mx::app::appConfigurator &config) |
Setup the configuration system. More... | |
int | loadConfig (mx::app::appConfigurator &config) |
load the configuration system results More... | |
int | appStartup () |
Startup function. More... | |
int | appLogic () |
Checks the shmimMonitor thread. More... | |
int | appShutdown () |
Shuts down the shmimMonitor thread. More... | |
Protected Attributes | |
bool | m_getExistingFirst {false} |
If set to true by derivedT, any existing image will be grabbed and sent to processImage before waiting on the semaphore. More... | |
int | m_semaphoreNumber {5} |
The image structure semaphore index. More... | |
uint32_t | m_width {0} |
The width of the images in the stream. More... | |
uint32_t | m_height {0} |
The height of the images in the stream. More... | |
uint32_t | m_depth {0} |
The depth of the circular buffer in the stream. More... | |
uint8_t | m_dataType {0} |
The ImageStreamIO type code. More... | |
size_t | m_typeSize {0} |
The size of the type, in bytes. Result of sizeof. More... | |
IMAGE | m_imageStream |
The ImageStreamIO shared memory buffer. More... | |
ino_t | m_inode {0} |
The inode of the image stream file. More... | |
Configurable Parameters | |
std::string | m_shmimName {""} |
The name of the shared memory image, is used in /tmp/<shmimName>.im.shm . Derived classes should set a default. More... | |
int | m_smThreadPrio {2} |
Priority of the shmimMonitor thread, should normally be > 00. More... | |
std::string | m_smCpuset |
The cpuset to assign the shmimMonitor thread to. Ignored if empty (the default). More... | |
Private Member Functions | |
derivedT & | derived () |
SIGSEGV & SIGBUS signal handling | |
These signals occur as a result of a ImageStreamIO source server resetting (e.g. changing frame sizes). When they occur a restart of the shmim monitor thread main loops is triggered. | |
bool | m_restart {false} |
Flag indicating tha the shared memory should be reinitialized. More... | |
static shmimMonitor * | m_selfMonitor = nullptr |
Static pointer to this (set in constructor). Used for getting out of the static SIGSEGV handler. More... | |
shmimmonitor Thread | |
bool | m_smThreadInit {true} |
Synchronizer for thread startup, to allow priority setting to finish. More... | |
pid_t | m_smThreadID {0} |
The s.m. thread PID. More... | |
pcf::IndiProperty | m_smThreadProp |
The property to hold the s.m. thread details. More... | |
std::thread | m_smThread |
A separate thread for the actual monitoring. More... | |
static void | smThreadStart (shmimMonitor *s) |
Thread starter, called by MagAOXApp::threadStart on thread construction. Calls smThreadExec. More... | |
void | smThreadExec () |
Execute the monitoring thread. More... | |
INDI | |
pcf::IndiProperty | m_indiP_shmimName |
Property used to report the shmim buffer name. More... | |
pcf::IndiProperty | m_indiP_frameSize |
Property used to report the current frame size. More... | |
int | updateINDI () |
Update the INDI properties for this device controller. More... | |
MagAO-X generic shared memory monitor
The derived class derivedT
has the following requirements (see below for discussion of specificT):
setupConfig
, loadConfig
, appStartup
, appLogic
, updateINDI
and appShutdown
functions must be placed in the derived class's functions of the same name. For convenience the following macros are defined to provide error checking: specificT
is used to specialize.The template specifier specificT
allows inheritance of multiple shmimMonitor classes. This type must have at least the static member function:
which returns the string which is prefixed to INDI properties. The default shmimT
uses "sm".
Additionally, if specificT
is used, the following convenience macros can be used:
Definition at line 97 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::appLogic |
Checks the shmimMonitor thread.
This should be called in derivedT::appLogic
as
with appropriate error checking.
Definition at line 397 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::appShutdown |
Shuts down the shmimMonitor thread.
This should be called in derivedT::appShutdown
as
with appropriate error checking.
Definition at line 411 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::appStartup |
Startup function.
Starts the shmimMonitor thread This should be called in derivedT::appStartup
as
with appropriate error checking.
Definition at line 329 of file shmimMonitor.hpp.
const uint8_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::dataType |
Definition at line 289 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::depth |
Definition at line 283 of file shmimMonitor.hpp.
|
inlineprivate |
Definition at line 254 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::height |
Definition at line 277 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::loadConfig | ( | mx::app::appConfigurator & | config | ) |
load the configuration system results
This should be called in derivedT::loadConfig
as
with appropriate error checking.
[in] | config | the derived classes configurator |
Definition at line 318 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::setupConfig | ( | mx::app::appConfigurator & | config | ) |
Setup the configuration system.
This should be called in derivedT::setupConfig
as
with appropriate error checking.
[out] | config | the derived classes configurator |
Definition at line 301 of file shmimMonitor.hpp.
const std::string & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::shmimName |
Definition at line 265 of file shmimMonitor.hpp.
|
protected |
Execute the monitoring thread.
<
< The semaphore to monitor for new image data
Definition at line 435 of file shmimMonitor.hpp.
Referenced by MagAOX::app::dev::shmimMonitor< derivedT, specificT >::smThreadStart().
|
staticprotected |
Thread starter, called by MagAOXApp::threadStart on thread construction. Calls smThreadExec.
[in] | s | a pointer to a shmimMonitor instance (normally this) |
Definition at line 429 of file shmimMonitor.hpp.
const size_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::typeSize |
Definition at line 295 of file shmimMonitor.hpp.
int MagAOX::app::dev::shmimMonitor< derivedT, specificT >::updateINDI |
Update the INDI properties for this device controller.
You should call this once per main loop. It is not called automatically.
Definition at line 750 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::width |
Definition at line 271 of file shmimMonitor.hpp.
|
protected |
The ImageStreamIO type code.
Definition at line 120 of file shmimMonitor.hpp.
|
protected |
The depth of the circular buffer in the stream.
Definition at line 118 of file shmimMonitor.hpp.
|
protected |
If set to true by derivedT, any existing image will be grabbed and sent to processImage before waiting on the semaphore.
Definition at line 112 of file shmimMonitor.hpp.
|
protected |
The height of the images in the stream.
Definition at line 117 of file shmimMonitor.hpp.
|
protected |
The ImageStreamIO shared memory buffer.
Definition at line 123 of file shmimMonitor.hpp.
|
protected |
Property used to report the current frame size.
Definition at line 239 of file shmimMonitor.hpp.
|
protected |
Property used to report the shmim buffer name.
Definition at line 237 of file shmimMonitor.hpp.
|
protected |
The inode of the image stream file.
Definition at line 125 of file shmimMonitor.hpp.
|
protected |
Flag indicating tha the shared memory should be reinitialized.
Definition at line 205 of file shmimMonitor.hpp.
|
staticprotected |
Static pointer to this (set in constructor). Used for getting out of the static SIGSEGV handler.
Definition at line 207 of file shmimMonitor.hpp.
|
protected |
The image structure semaphore index.
Definition at line 114 of file shmimMonitor.hpp.
|
protected |
The name of the shared memory image, is used in /tmp/<shmimName>.im.shm
. Derived classes should set a default.
Definition at line 104 of file shmimMonitor.hpp.
|
protected |
The cpuset to assign the shmimMonitor thread to. Ignored if empty (the default).
Definition at line 108 of file shmimMonitor.hpp.
|
protected |
A separate thread for the actual monitoring.
Definition at line 220 of file shmimMonitor.hpp.
|
protected |
The s.m. thread PID.
Definition at line 216 of file shmimMonitor.hpp.
|
protected |
Synchronizer for thread startup, to allow priority setting to finish.
Definition at line 214 of file shmimMonitor.hpp.
|
protected |
Priority of the shmimMonitor thread, should normally be > 00.
Definition at line 106 of file shmimMonitor.hpp.
|
protected |
The property to hold the s.m. thread details.
Definition at line 218 of file shmimMonitor.hpp.
|
protected |
The size of the type, in bytes. Result of sizeof.
Definition at line 121 of file shmimMonitor.hpp.
|
protected |
The width of the images in the stream.
Definition at line 116 of file shmimMonitor.hpp.