#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. | |
int | loadConfig (mx::app::appConfigurator &config) |
load the configuration system results | |
int | appStartup () |
Startup function. | |
int | appLogic () |
Checks the shmimMonitor thread. | |
int | appShutdown () |
Shuts down the shmimMonitor thread. | |
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. | |
int | m_semaphoreNumber {5} |
The image structure semaphore index. | |
uint32_t | m_width {0} |
The width of the images in the stream. | |
uint32_t | m_height {0} |
The height of the images in the stream. | |
uint32_t | m_depth {0} |
The depth of the circular buffer in the stream. | |
uint8_t | m_dataType {0} |
The ImageStreamIO type code. | |
size_t | m_typeSize {0} |
The size of the type, in bytes. Result of sizeof. | |
IMAGE | m_imageStream |
The ImageStreamIO shared memory buffer. | |
ino_t | m_inode {0} |
The inode of the image stream file. | |
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. | |
int | m_smThreadPrio {2} |
Priority of the shmimMonitor thread, should normally be > 00. | |
std::string | m_smCpuset |
The cpuset to assign the shmimMonitor thread to. Ignored if empty (the default). | |
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. | |
static shmimMonitor * | m_selfMonitor = nullptr |
Static pointer to this (set in constructor). Used for getting out of the static SIGSEGV handler. | |
shmimmonitor Thread | |
This thread actually monitors the shared memory buffer | |
bool | m_smThreadInit {true} |
Synchronizer for thread startup, to allow priority setting to finish. | |
pid_t | m_smThreadID {0} |
The s.m. thread PID. | |
pcf::IndiProperty | m_smThreadProp |
The property to hold the s.m. thread details. | |
std::thread | m_smThread |
A separate thread for the actual monitoring. | |
static void | smThreadStart (shmimMonitor *s) |
Thread starter, called by MagAOXApp::threadStart on thread construction. Calls smThreadExec. | |
void | smThreadExec () |
Execute the monitoring thread. | |
INDI | |
pcf::IndiProperty | m_indiP_shmimName |
Property used to report the shmim buffer name. | |
pcf::IndiProperty | m_indiP_frameSize |
Property used to report the current frame size. | |
int | updateINDI () |
Update the INDI properties for this device controller. | |
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 | ( | ) | const |
Definition at line 289 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::depth | ( | ) | const |
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 | ( | ) | const |
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 | ( | ) | const |
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 | ( | ) | const |
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 | ( | ) | const |
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.