areaDetector 3-14
EPICS areaDetector framework
ADSpinnaker.h
Go to the documentation of this file.
1#ifndef ADSPINNAKER_H
2#define ADSPINNAKER_H
3
4#include <epicsEvent.h>
5
6#include <ADGenICam.h>
7#include "Spinnaker.h"
8#include "SpinGenApi/SpinnakerGenApi.h"
9
10using namespace Spinnaker;
11using namespace Spinnaker::GenApi;
12using namespace Spinnaker::GenICam;
13
14#define SPConvertPixelFormatString "SP_CONVERT_PIXEL_FORMAT" // asynParamInt32, R/W
15#define SPStartedFrameCountString "SP_STARTED_FRAME_COUNT" // asynParamInt32, R/O
16#define SPDeliveredFrameCountString "SP_DELIVERED_FRAME_COUNT" // asynParamInt32, R/O
17#define SPReceivedFrameCountString "SP_RECEIVED_FRAME_COUNT" // asynParamInt32, R/O
18#define SPIncompleteFrameCountString "SP_INCOMPLETE_FRAME_COUNT" // asynParamInt32, R/O
19#define SPLostFrameCountString "SP_LOST_FRAME_COUNT" // asynParamInt32, R/O
20#define SPDroppedFrameCountString "SP_DROPPED_FRAME_COUNT" // asynParamInt32, R/O
21#define SPInputBufferCountString "SP_INPUT_BUFFER_COUNT" // asynParamInt32, R/O
22#define SPOutputBufferCountString "SP_OUTPUT_BUFFER_COUNT" // asynParamInt32, R/O
23#define SPReceivedPacketCountString "SP_RECEIVED_PACKET_COUNT" // asynParamInt32, R/O
24#define SPMissedPacketCountString "SP_MISSED_PACKET_COUNT" // asynParamInt32, R/O
25#define SPResendRequestedPacketCountString "SP_RESEND_REQUESTED_PACKET_COUNT" // asynParamInt32, R/O
26#define SPResendReceivedPacketCountString "SP_RESEND_RECEIVED_PACKET_COUNT" // asynParamInt32, R/O
27#define SPTimeStampModeString "SP_TIME_STAMP_MODE" // asynParamInt32, R/O
28#define SPUniqueIdModeString "SP_UNIQUE_ID_MODE" // asynParamInt32, R/O
29
30class ADSpinnakerImageEventHandler : public ImageEventHandler
31{
32public:
33
34 ADSpinnakerImageEventHandler(epicsMessageQueue *pMsgQ)
35 : pMsgQ_(pMsgQ)
36 {}
38
39 void OnImageEvent(ImagePtr image) {
40 ImagePtr *imagePtrAddr = new ImagePtr(image);
41
42 if (pMsgQ_->send(&imagePtrAddr, sizeof(imagePtrAddr)) != 0) {
43 printf("OnImageEvent error calling pMsgQ_->send()\n");
44 }
45 }
46
47private:
48 epicsMessageQueue *pMsgQ_;
49
50};
51
52
56class ADSpinnaker : public ADGenICam
57{
58public:
59 ADSpinnaker(const char *portName, int cameraId, int numSPBuffers,
60 size_t maxMemory, int priority, int stackSize);
61
62 // virtual methods to override from ADGenICam
63 //virtual asynStatus writeInt32( asynUser *pasynUser, epicsInt32 value);
64 //virtual asynStatus writeFloat64( asynUser *pasynUser, epicsFloat64 value);
65 virtual asynStatus readEnum(asynUser *pasynUser, char *strings[], int values[], int severities[],
66 size_t nElements, size_t *nIn);
67 void report(FILE *fp, int details);
69 std::string const & asynName, asynParamType asynType, int asynIndex,
70 std::string const & featureName, GCFeatureType_t featureType);
71 INodeMap *getNodeMap();
72
74 void imageGrabTask();
75 void shutdown();
76
77private:
78 int SPConvertPixelFormat;
79#define FIRST_SP_PARAM SPConvertPixelFormat
80 int SPStartedFrameCount;
81 int SPDeliveredFrameCount;
82 int SPReceivedFrameCount;
83 int SPIncompleteFrameCount;
84 int SPLostFrameCount;
85 int SPDroppedFrameCount;
86 int SPInputBufferCount;
87 int SPOutputBufferCount;
88 int SPReceivedPacketCount;
89 int SPMissedPacketCount;
90 int SPResendRequestedPacketCount;
91 int SPResendReceivedPacketCount;
92 int SPTimeStampMode;
93 int SPUniqueIdMode;
94 int SPFrameRateEnable;
95
96 /* Local methods to this class */
97 asynStatus grabImage();
98 asynStatus startCapture();
99 asynStatus stopCapture();
100 asynStatus connectCamera();
101 asynStatus disconnectCamera();
102 void imageEventCallback(ImagePtr pImage);
103 void reportNode(FILE *fp, INodeMap *pNodeMap, gcstring nodeName, int level);
104 void updateStreamStat(const char *nodeName, int param);
105
106 /* Data */
107 int cameraId_;
108
109 INodeMap *pNodeMap_;
110 INodeMap *pTLStreamNodeMap_;
111 SystemPtr system_;
112 CameraList camList_;
113 CameraPtr pCamera_;
114 int numSPBuffers_;
115 ImageEventHandler *pImageEventHandler_;
116
117 int exiting_;
118 epicsEventId startEventId_;
119 epicsMessageQueue *pCallbackMsgQ_;
120 NDArray *pRaw_;
121 int uniqueId_;
122};
123
124#endif
125
GCFeatureType_t
Definition GenICamFeature.h:13
Definition ADGenICam.h:25
Main driver class inherited from areaDetectors ADDriver class.
Definition ADSpinnaker.h:57
INodeMap * getNodeMap()
These should be private but are called from C callback functions, must be public.
Definition ADSpinnaker.cpp:219
void report(FILE *fp, int details)
Print out a report; calls ADGenICam::report to get base class report as well.
Definition ADSpinnaker.cpp:884
void shutdown()
Definition ADSpinnaker.cpp:190
void imageGrabTask()
Task to grab images off the camera and send them up to areaDetector.
Definition ADSpinnaker.cpp:369
virtual GenICamFeature * createFeature(GenICamFeatureSet *set, std::string const &asynName, asynParamType asynType, int asynIndex, std::string const &featureName, GCFeatureType_t featureType)
Definition ADSpinnaker.cpp:213
virtual asynStatus readEnum(asynUser *pasynUser, char *strings[], int values[], int severities[], size_t nElements, size_t *nIn)
Definition ADSpinnaker.cpp:752
Definition ADSpinnaker.h:31
ADSpinnakerImageEventHandler(epicsMessageQueue *pMsgQ)
Definition ADSpinnaker.h:34
void OnImageEvent(ImagePtr image)
Definition ADSpinnaker.h:39
~ADSpinnakerImageEventHandler()
Definition ADSpinnaker.h:37
Definition GenICamFeature.h:41
Definition GenICamFeature.h:123
N-dimensional array class; each array has a set of dimensions, a data type, pointer to data,...
Definition NDArray.h:99