areaDetector / ADGenICam

areaDetector base class for GenICam cameras.
https://areadetector.github.io/master/ADGenICam/ADGenICam.html
7 stars 16 forks source link

64-bit GenICam feature support #7

Closed MarkRivers closed 4 years ago

MarkRivers commented 4 years ago

GenICam integer features are 64-bit integers. However, the ADGenICam GenICam feature class declares these pure virtual methods:

   virtual int readInteger(void) = 0;
   virtual int readIntegerMin(void) = 0;
   virtual int readIntegerMax(void) = 0;
   virtual int readIncrement(void) = 0;
   virtual void writeInteger(int value) = 0;

This limits the range of such features to 32-bits, rather than the full 64-bit range that the camera may be using.

This has been shown to be an issue, for example, with the ChunkTimestamp feature on FLIR cameras, and likely on a number of other features on other cameras.

MarkRivers commented 4 years ago

This problem has been address by changing those methods in the GenICam feature class to this:

   virtual epicsInt64 readInteger(void) = 0;
   virtual epicsInt64 readIntegerMin(void) = 0;
   virtual epicsInt64 readIntegerMax(void) = 0;
   virtual epicsInt64 readIncrement(void) = 0;
   virtual void writeInteger(epicsInt64 value) = 0;

The derived classes in ADAravis, ADSpinnaker, and ADVimba have been changed to 64-bits. The ADGenICam driver has been changed to correctly handle 64-bit integer features.

makeDb.py has been changed to generate databases that can work with the new 64-bit integer features.

This new support is available for testing in the master branch of ADGenICam, ADAravis, ADSpinnaker, and ADVimba.

int64in/out records require asyn R4-47. asynInt64 device support for ao/ai records requires the master branch of asyn.