ngc 1.4.0
 
Loading...
Searching...
No Matches
ngcdcsFACTORY.hpp
Go to the documentation of this file.
1
7#ifndef ngcdcsFACTORY_H
8#define ngcdcsFACTORY_H
9
10
11#ifndef __cplusplus
12#error This is a C++ include file and cannot be used from plain C
13#endif
14
18
25
28
31
34 size_t i;
35 ctrl = NULL;
36 for (i=0;i<ngcdcsACQ_MAX_PROC;i++) acq[i] = NULL;
37 numAcqMod = 0;
38 }
39};
40
45{
46public:
48 char name[64];
49
51 void *dl;
52
54 char module[64];
55
57 char symbol[64];
58
60 int busy;
61
63 explicit ngcdcsFACTORY(const char *s) {
64 Init_();
65 str2str(name, s, sizeof(name) - 1);
66 }
67
69 ngcdcsFACTORY(const char *s, int closed) {
70 Init_();
71 str2str(name, s, sizeof(name) - 1);
72 closed_ = closed;
73 }
74
76 virtual ~ngcdcsFACTORY() {}
77
79 ngcdcsEXPDRV *Create(const char *desc, const ngcdcs_system_t &sys,
80 const ngcb_fb_t &fb) {
81 ngcdcsEXPDRV *drv = Make(desc, sys, fb);
82 if (drv != NULL) strcpy(drv->name, name); // forward the driver name
83 return (drv);
84 }
85
87 char *ErrMsg() {return (erms_);}
88
90 int Closed() {return (closed_);}
91protected:
93 virtual ngcdcsEXPDRV *Make(const char *desc, const ngcdcs_system_t &sys,
94 const ngcb_fb_t &fb) {
95 USE(desc); USE(sys.ctrl); USE(fb);
96 strcpy(ErrMsg(), "factory provides no creator method");
97 return (NULL);
98 }
99private:
101 char erms_[256];
102
104 int closed_;
105
107 void Init_() {
108 name[0] = '\0'; module[0] = '\0'; symbol[0] = '\0'; dl = NULL; busy = 0;
109 erms_[0] = '\0'; closed_ = 0;
110 }
111};
112
116typedef ngcdcsFACTORY* (*ngcdcs_fmkr_t)();
117
121#define ngcdcsEDRV_SIGNATURE ((sizeof(ngcdcsEXPDRV) & 0xffff) | \
122 (sizeof(ngcdcsFACTORY) & 0xffff) << 16)
123
127#define NGCDCS_REGISTER_DRV(type, name) extern "C" { type name; \
128 volatile unsigned long int _ngcdcs_expdrv_ ## name = ngcdcsEDRV_SIGNATURE; }
129
133#define NGCDCS_REGISTER_LIB(name, ...) extern "C" { \
134 volatile unsigned long int _ngcdcs_expdrv_ ## name = ngcdcsEDRV_SIGNATURE; \
135 ngcb_str64_t name ## _LIST[] = {__VA_ARGS__, ""}; }
136
137#endif
Definition ngcdcsACQ.hpp:342
Definition ngcdcsCTRL.hpp:67
Definition ngcdcsEXPDRV.hpp:30
char name[64]
Exposure driver name.
Definition ngcdcsEXPDRV.hpp:33
Definition ngcdcsFACTORY.hpp:45
ngcdcsEXPDRV * Create(const char *desc, const ngcdcs_system_t &sys, const ngcb_fb_t &fb)
Creator.
Definition ngcdcsFACTORY.hpp:79
char module[64]
Dynamic linking module.
Definition ngcdcsFACTORY.hpp:54
int busy
Busy flag.
Definition ngcdcsFACTORY.hpp:60
char name[64]
Driver name.
Definition ngcdcsFACTORY.hpp:48
int Closed()
Factory is closed.
Definition ngcdcsFACTORY.hpp:90
void * dl
Dynamic linking handle.
Definition ngcdcsFACTORY.hpp:51
ngcdcsFACTORY(const char *s)
Constructor.
Definition ngcdcsFACTORY.hpp:63
virtual ~ngcdcsFACTORY()
Destructor.
Definition ngcdcsFACTORY.hpp:76
char * ErrMsg()
Error message.
Definition ngcdcsFACTORY.hpp:87
virtual ngcdcsEXPDRV * Make(const char *desc, const ngcdcs_system_t &sys, const ngcb_fb_t &fb)
Maker.
Definition ngcdcsFACTORY.hpp:93
ngcdcsFACTORY(const char *s, int closed)
Constructor for empty factory.
Definition ngcdcsFACTORY.hpp:69
char symbol[64]
Dynamic linking symbol name.
Definition ngcdcsFACTORY.hpp:57
#define str2str(s1, s2, n)
Definition ngcb.h:73
#define USE(x)
Definition ngcb.h:28
#define ngcdcsACQ_MAX_PROC
Definition ngcdcsACQ.hpp:70
Definition ngcbSTREAM.hpp:27
Definition ngcdcsFACTORY.hpp:22
ngcdcsCTRL * ctrl
Controller.
Definition ngcdcsFACTORY.hpp:24
int numAcqMod
Number of acquisition modules.
Definition ngcdcsFACTORY.hpp:30
ngcdcsACQ * acq[ngcdcsACQ_MAX_PROC]
Acquisition modules.
Definition ngcdcsFACTORY.hpp:27
ngcdcs_system_t()
Constructor.
Definition ngcdcsFACTORY.hpp:33