ngc 1.5.0
 
Loading...
Searching...
No Matches
ngcdcsFACTORY.hpp
Go to the documentation of this file.
1
8#ifndef ngcdcsFACTORY_H
9#define ngcdcsFACTORY_H
10
11
12#ifndef __cplusplus
13#error This is a C++ include file and cannot be used from plain C
14#endif
15
19
26
29
32
35 size_t i;
36 ctrl = NULL;
37 for (i=0;i<ngcdcsACQ_MAX_PROC;i++) acq[i] = NULL;
38 numAcqMod = 0;
39 }
40};
41
46{
47public:
49 char name[64];
50
52 void *dl;
53
55 char module[64];
56
58 char symbol[64];
59
61 int busy;
62
64 explicit ngcdcsFACTORY(const char *s) {
65 Init_();
66 str2str(name, s, sizeof(name) - 1);
67 }
68
70 ngcdcsFACTORY(const char *s, int closed) {
71 Init_();
72 str2str(name, s, sizeof(name) - 1);
73 closed_ = closed;
74 }
75
77 virtual ~ngcdcsFACTORY() {}
78
80 ngcdcsEXPDRV *Create(const char *desc, const ngcdcs_system_t &sys,
81 const ngcb_fb_t &fb) {
82 ngcdcsEXPDRV *drv = Make(desc, sys, fb);
83 if (drv != NULL) strcpy(drv->name, name); // forward the driver name
84 return (drv);
85 }
86
88 char *ErrMsg() {return (erms_);}
89
91 int Closed() {return (closed_);}
92protected:
94 virtual ngcdcsEXPDRV *Make(const char *desc, const ngcdcs_system_t &sys,
95 const ngcb_fb_t &fb) {
96 USE(desc); USE(sys.ctrl); USE(fb);
97 strcpy(ErrMsg(), "factory provides no creator method");
98 return (NULL);
99 }
100private:
102 char erms_[256];
103
105 int closed_;
106
108 void Init_() {
109 name[0] = '\0'; module[0] = '\0'; symbol[0] = '\0'; dl = NULL; busy = 0;
110 erms_[0] = '\0'; closed_ = 0;
111 }
112};
113
117typedef ngcdcsFACTORY* (*ngcdcs_fmkr_t)();
118
122#define ngcdcsEDRV_SIGNATURE ((sizeof(ngcdcsEXPDRV) & 0xffff) | \
123 (sizeof(ngcdcsFACTORY) & 0xffff) << 16)
124
128#define NGCDCS_REGISTER_DRV(type, name) extern "C" { type name; \
129 volatile unsigned long int _ngcdcs_expdrv_ ## name = ngcdcsEDRV_SIGNATURE; }
130
134#define NGCDCS_REGISTER_LIB(name, ...) extern "C" { \
135 volatile unsigned long int _ngcdcs_expdrv_ ## name = ngcdcsEDRV_SIGNATURE; \
136 ngcb_str64_t name ## _LIST[] = {__VA_ARGS__, ""}; }
137
138#endif
Definition ngcdcsACQ.hpp:343
Definition ngcdcsCTRL.hpp:68
Definition ngcdcsEXPDRV.hpp:31
char name[64]
Exposure driver name.
Definition ngcdcsEXPDRV.hpp:34
Definition ngcdcsFACTORY.hpp:46
ngcdcsEXPDRV * Create(const char *desc, const ngcdcs_system_t &sys, const ngcb_fb_t &fb)
Creator.
Definition ngcdcsFACTORY.hpp:80
char module[64]
Dynamic linking module.
Definition ngcdcsFACTORY.hpp:55
int busy
Busy flag.
Definition ngcdcsFACTORY.hpp:61
char name[64]
Driver name.
Definition ngcdcsFACTORY.hpp:49
int Closed()
Factory is closed.
Definition ngcdcsFACTORY.hpp:91
void * dl
Dynamic linking handle.
Definition ngcdcsFACTORY.hpp:52
ngcdcsFACTORY(const char *s)
Constructor.
Definition ngcdcsFACTORY.hpp:64
virtual ~ngcdcsFACTORY()
Destructor.
Definition ngcdcsFACTORY.hpp:77
char * ErrMsg()
Error message.
Definition ngcdcsFACTORY.hpp:88
virtual ngcdcsEXPDRV * Make(const char *desc, const ngcdcs_system_t &sys, const ngcb_fb_t &fb)
Maker.
Definition ngcdcsFACTORY.hpp:94
ngcdcsFACTORY(const char *s, int closed)
Constructor for empty factory.
Definition ngcdcsFACTORY.hpp:70
char symbol[64]
Dynamic linking symbol name.
Definition ngcdcsFACTORY.hpp:58
#define str2str(s1, s2, n)
Definition ngcb.h:74
#define USE(x)
Definition ngcb.h:29
#define ngcdcsACQ_MAX_PROC
Definition ngcdcsACQ.hpp:71
Definition ngcbSTREAM.hpp:28
Definition ngcdcsFACTORY.hpp:23
ngcdcsCTRL * ctrl
Controller.
Definition ngcdcsFACTORY.hpp:25
int numAcqMod
Number of acquisition modules.
Definition ngcdcsFACTORY.hpp:31
ngcdcsACQ * acq[ngcdcsACQ_MAX_PROC]
Acquisition modules.
Definition ngcdcsFACTORY.hpp:28
ngcdcs_system_t()
Constructor.
Definition ngcdcsFACTORY.hpp:34