#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 } |
shmimMonitorState | m_smState { shmimMonitorState::init } |
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 { "" } |
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). | |
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. | |
Private Member Functions | |
derivedT & | derived () |
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. | |
int | create (uint32_t width, uint32_t height, uint32_t depth, uint8_t datatype, void *initData=nullptr) |
Create the image. | |
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 111 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 470 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 485 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 394 of file shmimMonitor.hpp.
|
protected |
Create the image.
This will create the shared memory image, erasing an existing. This is independent of the actual shmim monitoring function, which will pick up the new inode change on its own and restart the allocate() and processImage() cycle.
[in] | width | width of the new image |
[in] | height | height of the new image |
[in] | depth | depth of the new image |
[in] | datatype | CACAO data type of the new image |
[in] | initData | [optional] data to initialize the new image with. Must be of size width*height*depth*sizeof(dataType) |
Definition at line 857 of file shmimMonitor.hpp.
const uint8_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::dataType | ( | ) | const |
Definition at line 322 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::depth | ( | ) | const |
Definition at line 316 of file shmimMonitor.hpp.
|
inlineprivate |
Definition at line 287 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::height | ( | ) | const |
Definition at line 310 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 383 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 334 of file shmimMonitor.hpp.
const std::string & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::shmimName | ( | ) | const |
Definition at line 298 of file shmimMonitor.hpp.
|
protected |
Execute the monitoring thread.
<
< The semaphore to monitor for new image data
Definition at line 509 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 503 of file shmimMonitor.hpp.
const size_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::typeSize | ( | ) | const |
Definition at line 328 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 923 of file shmimMonitor.hpp.
const uint32_t & MagAOX::app::dev::shmimMonitor< derivedT, specificT >::width | ( | ) | const |
Definition at line 304 of file shmimMonitor.hpp.
|
protected |
The ImageStreamIO type code.
Definition at line 138 of file shmimMonitor.hpp.
|
protected |
The depth of the circular buffer in the stream.
Definition at line 136 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 127 of file shmimMonitor.hpp.
|
protected |
The height of the images in the stream.
Definition at line 135 of file shmimMonitor.hpp.
|
protected |
The ImageStreamIO shared memory buffer.
Definition at line 141 of file shmimMonitor.hpp.
|
protected |
Property used to report the current frame size.
Definition at line 272 of file shmimMonitor.hpp.
|
protected |
Property used to report the shmim buffer name.
Definition at line 270 of file shmimMonitor.hpp.
|
protected |
The inode of the image stream file.
Definition at line 143 of file shmimMonitor.hpp.
|
protected |
Flag indicating tha the shared memory should be reinitialized.
Definition at line 222 of file shmimMonitor.hpp.
|
protected |
The image structure semaphore index.
Definition at line 132 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 118 of file shmimMonitor.hpp.
|
protected |
The cpuset to assign the shmimMonitor thread to. Ignored if empty (the default).
Definition at line 123 of file shmimMonitor.hpp.
|
protected |
Definition at line 130 of file shmimMonitor.hpp.
|
protected |
A separate thread for the actual monitoring.
Definition at line 238 of file shmimMonitor.hpp.
|
protected |
The s.m. thread PID.
Definition at line 234 of file shmimMonitor.hpp.
|
protected |
Synchronizer for thread startup, to allow priority setting to finish.
Definition at line 232 of file shmimMonitor.hpp.
|
protected |
Priority of the shmimMonitor thread, should normally be > 00.
Definition at line 121 of file shmimMonitor.hpp.
|
protected |
The property to hold the s.m. thread details.
Definition at line 236 of file shmimMonitor.hpp.
|
protected |
The size of the type, in bytes. Result of sizeof.
Definition at line 139 of file shmimMonitor.hpp.
|
protected |
The width of the images in the stream.
Definition at line 134 of file shmimMonitor.hpp.