00001 #ifndef NDPluginROI_H
00002 #define NDPluginROI_H
00003
00004 #include <epicsTypes.h>
00005 #include <asynStandardInterfaces.h>
00006
00007 #include "NDPluginDriver.h"
00008
00010 typedef struct NDROI {
00011 NDDimension_t dims[ND_ARRAY_MAX_DIMS];
00012 double *profiles[ND_ARRAY_MAX_DIMS];
00013 int profileSize[ND_ARRAY_MAX_DIMS];
00014 int nElements;
00015 int bgdWidth;
00016 double total;
00017 double net;
00018 double mean;
00019 double min;
00020 double max;
00021 double histMin;
00022 double histMax;
00023 int histSize;
00024 double *histogram;
00025 } NDROI_t;
00026
00027
00028 #define NDPluginROIFirstROINParam NDPluginDriverLastParam
00029
00031 typedef enum {
00032 NDPluginROIName
00033 = NDPluginROIFirstROINParam,
00034 NDPluginROIUse,
00035 NDPluginROIComputeStatistics,
00036 NDPluginROIComputeHistogram,
00037 NDPluginROIComputeProfiles,
00038 NDPluginROIHighlight,
00039
00040
00041 NDPluginROIDim0Min,
00042 NDPluginROIDim0Size,
00043 NDPluginROIDim0MaxSize,
00044 NDPluginROIDim0Bin,
00045 NDPluginROIDim0Reverse,
00046 NDPluginROIDim1Min,
00047 NDPluginROIDim1Size,
00048 NDPluginROIDim1MaxSize,
00049 NDPluginROIDim1Bin,
00050 NDPluginROIDim1Reverse,
00051 NDPluginROIDim2Min,
00052 NDPluginROIDim2Size,
00053 NDPluginROIDim2MaxSize,
00054 NDPluginROIDim2Bin,
00055 NDPluginROIDim2Reverse,
00056 NDPluginROIDataType,
00057
00058
00059 NDPluginROIBgdWidth,
00060 NDPluginROIMinValue,
00061 NDPluginROIMaxValue,
00062 NDPluginROIMeanValue,
00063 NDPluginROITotal,
00064 NDPluginROINet,
00065
00066
00067 NDPluginROIHistSize,
00068 NDPluginROIHistMin,
00069 NDPluginROIHistMax,
00070 NDPluginROIHistEntropy,
00071 NDPluginROIHistArray,
00072
00073 NDPluginROITotalArray,
00074 NDPluginROINetArray,
00075
00076 NDPluginROILastROINParam
00077 } NDPluginROINParam_t;
00078
00079
00080 #define NUM_ROIN_PARAMS (sizeof(NDPluginROINParamString)/sizeof(NDPluginROINParamString[0]))
00081
00085 class NDPluginROI : public NDPluginDriver {
00086 public:
00087 NDPluginROI(const char *portName, int queueSize, int blockingCallbacks,
00088 const char *NDArrayPort, int NDArrayAddr, int maxROIs,
00089 int maxBuffers, size_t maxMemory,
00090 int priority, int stackSize);
00091
00092 void processCallbacks(NDArray *pArray);
00093 asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00094 asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
00095 const char **pptypeName, size_t *psize);
00096
00097
00098 asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value,
00099 size_t nelements, size_t *nIn);
00100
00101 private:
00102 int maxROIs;
00103 NDROI_t *pROIs;
00104 epicsInt32 *totalArray;
00105 epicsInt32 *netArray;
00106 };
00107
00108 #endif