diff --git a/andorApp/src/shamrock.cpp b/andorApp/src/shamrock.cpp index 60748ce..1651dec 100644 --- a/andorApp/src/shamrock.cpp +++ b/andorApp/src/shamrock.cpp @@ -20,6 +20,7 @@ #include +#include "atmcdLXd.h" #include #include @@ -125,7 +126,7 @@ extern "C" int shamrockConfig(const char *portName, int shamrockId, const char * * \param[in] stackSize The size of the stack for the EPICS port thread. 0=use asyn default. */ shamrock::shamrock(const char *portName, int shamrockID, const char *iniPath, int priority, int stackSize) - : asynPortDriver(portName, MAX_ADDR, NUM_SR_PARAMS, + : asynPortDriver(portName, MAX_ADDR, asynInt32Mask | asynFloat64Mask | asynFloat32ArrayMask | asynDrvUserMask, asynInt32Mask | asynFloat64Mask | asynFloat32ArrayMask, ASYN_CANBLOCK | ASYN_MULTIDEVICE, 1, priority, stackSize), @@ -140,6 +141,8 @@ shamrock::shamrock(const char *portName, int shamrockID, const char *iniPath, in float pixelWidth; int i; int numFlipperStatus; + int width, height; + float xSize, ySize; createParam(SRWavelengthString, asynParamFloat64, &SRWavelength_); createParam(SRMinWavelengthString, asynParamFloat64, &SRMinWavelength_); @@ -166,6 +169,32 @@ shamrock::shamrock(const char *portName, int shamrockID, const char *iniPath, in driverName, functionName, numDevices); return; } + + //Get Detector dimensions + error = GetDetector(&width, &height); + if (error != DRV_SUCCESS) { + asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, + "%s:%s: GetDetector() status = %d\n", + driverName, functionName, error); + return; + } + + //Sets the number of pixels for calibration purposes + error = ShamrockSetNumberPixels(shamrockId_, width); + status = checkError(error, functionName, "ShamrockSetNumberPixels"); + + //Get Detector pixel size + error = GetPixelSize(&xSize, &ySize); + if (error != DRV_SUCCESS) { + asynPrint(pasynUserSelf, ASYN_TRACE_ERROR, + "%s:%s: GetPixelSize() status = %d\n", + driverName, functionName, error); + return; + } + + //Set the pixel width in microns for calibration purposes. + error = ShamrockSetPixelWidth(shamrockId_, xSize); + status = checkError(error, functionName, "ShamrockSetPixelWidth"); // Determine the number of pixels on the attached CCD and the pixel size error = ShamrockGetNumberPixels(shamrockId_, &numPixels_); diff --git a/andorSupport/ShamrockCIF.h b/andorSupport/ShamrockCIF.h old mode 100755 new mode 100644 index 3078133..70b9858 --- a/andorSupport/ShamrockCIF.h +++ b/andorSupport/ShamrockCIF.h @@ -1,4 +1,6 @@ -/* #pragma hdrstop */ +#ifndef __linux__ +#pragma hdrstop +#endif #define SHAMROCK_COMMUNICATION_ERROR 20201 #define SHAMROCK_SUCCESS 20202 @@ -10,8 +12,8 @@ #define SHAMROCK_NOT_INITIALIZED 20275 #define SHAMROCK_NOT_AVAILABLE 20292 -#define SHAMROCK_ACCESSORYMIN 1 -#define SHAMROCK_ACCESSORYMAX 2 +#define SHAMROCK_ACCESSORYMIN 0 +#define SHAMROCK_ACCESSORYMAX 1 #define SHAMROCK_FILTERMIN 1 #define SHAMROCK_FILTERMAX 6 #define SHAMROCK_TURRETMIN 1 @@ -66,6 +68,7 @@ unsigned int WINAPI ShamrockGetNumberDevices(int *nodevices); unsigned int WINAPI ShamrockGetFunctionReturnDescription(int error,char *description, int MaxDescStrLen); //sdkeeprom functions unsigned int WINAPI ShamrockGetSerialNumber(int device,char *serial); +unsigned int WINAPI ShamrockEepromSetOpticalParams(int device, float FocalLength, float AngularDeviation, float FocalTilt); unsigned int WINAPI ShamrockEepromGetOpticalParams(int device,float *FocalLength,float *AngularDeviation,float *FocalTilt); //sdkgrating functions unsigned int WINAPI ShamrockSetGrating(int device,int grating); @@ -101,6 +104,10 @@ unsigned int WINAPI ShamrockAutoSlitIsPresent(int device, int index, int *presen unsigned int WINAPI ShamrockSetAutoSlitCoefficients(int device, int index, int x1, int y1, int x2, int y2); unsigned int WINAPI ShamrockGetAutoSlitCoefficients(int device, int index, int &x1, int &y1, int &x2, int &y2); +// new new Slit functions. +unsigned int WINAPI ShamrockSetSlitZeroPosition(int device, int index, int offset); +unsigned int WINAPI ShamrockGetSlitZeroPosition(int device, int index, int *offset); + ///// Deprecated Slit Functions // Deprecated Input Slit Functions unsigned int WINAPI ShamrockSetSlit(int device,float width); @@ -138,6 +145,9 @@ unsigned int WINAPI ShamrockGetFlipperMirror(int device, int flipper, int * port unsigned int WINAPI ShamrockFlipperMirrorReset(int device, int flipper); unsigned int WINAPI ShamrockFlipperMirrorIsPresent(int device, int flipper, int *present); unsigned int WINAPI ShamrockGetCCDLimits(int device, int port, float *Low, float *High); +unsigned int WINAPI ShamrockSetFlipperMirrorPosition(int device, int flipper, int position); +unsigned int WINAPI ShamrockGetFlipperMirrorPosition(int device, int flipper, int *position); +unsigned int WINAPI ShamrockGetFlipperMirrorMaxPosition(int device, int flipper, int *max); // Deprecated unsigned int WINAPI ShamrockSetPort(int device,int port); @@ -164,6 +174,12 @@ unsigned int WINAPI ShamrockGetPixelWidth(int device, float* Width); unsigned int WINAPI ShamrockGetNumberPixels(int device, int* NumberPixels); unsigned int WINAPI ShamrockGetCalibration(int device, float* CalibrationValues, int NumberPixels); unsigned int WINAPI ShamrockGetPixelCalibrationCoefficients(int device, float* A, float* B, float* C, float* D); + +//SDK iris functions +unsigned int WINAPI ShamrockIrisIsPresent(int device, int iris, int *present); +unsigned int WINAPI ShamrockSetIris(int device, int iris, int value); +unsigned int WINAPI ShamrockGetIris(int device, int iris, int *value); + #ifdef __cplusplus } #endif diff --git a/andorSupport/atmcdLXd.h b/andorSupport/atmcdLXd.h index b34349b..e5a89b8 100644 --- a/andorSupport/atmcdLXd.h +++ b/andorSupport/atmcdLXd.h @@ -115,6 +115,7 @@ typedef struct ANDORCAPS at_u32 ulPCICard; at_u32 ulEMGainCapability; at_u32 ulFTReadModes; + at_u32 ulFeatures2; } AndorCapabilities; @@ -165,6 +166,7 @@ unsigned int GetAvailableCameras(at_32 * totalCameras); unsigned int GetBackground(at_32 * arr, at_u32 size); unsigned int GetBaselineClamp(int * state); unsigned int GetBitDepth(int channel, int * depth); +unsigned int GetBitsPerPixel(int readout_index, int index, int * value); unsigned int GetCameraEventStatus(at_u32 * camStatus); unsigned int GetCameraHandle(at_32 cameraIndex, at_32 * cameraHandle); unsigned int GetCameraInformation(int index, at_32 * information); @@ -209,6 +211,7 @@ unsigned int GetDICameraInfo(void * info); unsigned int GetEMAdvanced(int * state); unsigned int GetEMCCDGain(int * gain); unsigned int GetEMGainRange(int * low, int * high); +unsigned int GetESDEventStatus(at_u32 * camStatus); unsigned int GetExternalTriggerTermination(at_u32 * puiTermination); unsigned int GetFastestRecommendedVSSpeed(int * index, float * speed); unsigned int GetFIFOUsage(int * FIFOusage); @@ -275,6 +278,7 @@ unsigned int GetPhysicalDMAAddress(at_u32 * Address1, at_u32 * Address2); unsigned int GetPixelSize(float * xSize, float * ySize); unsigned int GetPreAmpGain(int index, float * gain); unsigned int GetPreAmpGainText(int index, char * name, int length); +unsigned int GetCurrentPreAmpGain(int * index, char * name, int length); unsigned int GetDualExposureTimes(float * exposure1, float * exposure2); unsigned int GetQE(char * sensor, float wavelength, unsigned int mode, float * QE); unsigned int GetReadOutTime(float * ReadOutTime); @@ -329,6 +333,7 @@ unsigned int Merge(const at_32 * arr, at_32 nOrder, at_32 nPoint, at_32 nPixel, unsigned int OutAuxPort(int port, int state); unsigned int PrepareAcquisition(); unsigned int SaveAsBmp(const char * path, const char * palette, at_32 ymin, at_32 ymax); +unsigned int SaveAsCalibratedSif(char * path, int x_data_type, int x_unit, float * x_cal, float rayleighWavelength); unsigned int SaveAsCommentedSif(char * path, char * comment); unsigned int SaveAsEDF(char * szPath, int iMode); unsigned int SaveAsFITS(char * szFileTitle, int typ); @@ -346,12 +351,14 @@ unsigned int SetAccumulationCycleTime(float time); unsigned int SetAcquisitionMode(int mode); unsigned int SetSensorPortMode(int mode); unsigned int SelectSensorPort(int port); +unsigned int SelectDualSensorPort(int port); unsigned int SetAcquisitionType(int typ); unsigned int SetADChannel(int channel); unsigned int SetAdvancedTriggerModeState(int iState); unsigned int SetBackground(at_32 * arr, at_u32 size); unsigned int SetBaselineClamp(int state); unsigned int SetBaselineOffset(int offset); +unsigned int SetBitsPerPixel(int state); unsigned int SetCameraLinkMode(int mode); unsigned int SetCameraStatusEnable(unsigned long Enable); unsigned int SetChargeShifting(unsigned int NumberRows, unsigned int NumberRepeats); @@ -400,6 +407,7 @@ unsigned int SetDDGVariableGateStep(int mode, double p1, double p2); unsigned int SetDelayGenerator(int board, short address, int typ); unsigned int SetDMAParameters(int MaxImagesPerDMA, float SecondsPerDMA); // unsigned int SetDriverEvent(HANDLE driverEvent); +// unsigned int SetESDEvent(HANDLE esdEvent); unsigned int SetEMAdvanced(int state); unsigned int SetEMCCDGain(int gain); unsigned int SetEMClockCompensation(int EMClockCompensationFlag); @@ -410,8 +418,8 @@ unsigned int SetFanMode(int mode); unsigned int SetFastExtTrigger(int mode); unsigned int SetFastKinetics(int exposedRows, int seriesLength, float time, int mode, int hbin, int vbin); unsigned int SetFastKineticsEx(int exposedRows, int seriesLength, float time, int mode, int hbin, int vbin, int offset); -unsigned int SetSuperKinetics(int exposedRows, int seriesLength, float time, int mode, int hbin, int vbin, int offset); -unsigned int SetTimeScan(int rows, int tracks, int mode); +unsigned int SetFastKineticsStorageMode(int mode); +unsigned int SetFastKineticsTimeScanMode(int rows, int tracks, int mode); unsigned int SetFilterMode(int mode); unsigned int SetFilterParameters(int width, float sensitivity, int range, float accept, int smooth, int noise); unsigned int SetFKVShiftSpeed(int index); @@ -431,6 +439,7 @@ unsigned int SetImageFlip(int iHFlip, int iVFlip); unsigned int SetImageRotate(int iRotate); unsigned int SetIsolatedCropMode(int active, int cropheight, int cropwidth, int vbin, int hbin); unsigned int SetIsolatedCropModeEx(int active, int cropheight, int cropwidth, int vbin, int hbin, int cropleft, int cropbottom); +unsigned int SetIsolatedCropModeType(int type); unsigned int SetKineticCycleTime(float time); unsigned int SetMCPGain(int gain); unsigned int SetMCPGating(int gating); @@ -498,6 +507,7 @@ unsigned int WaitForAcquisitionTimeOut(int iTimeOutMs); unsigned int WhiteBalance(unsigned short * wRed, unsigned short * wGreen, unsigned short * wBlue, float * fRelR, float * fRelB, WhiteBalanceInfo * info); unsigned int OA_Initialize(const char * const pcFilename, unsigned int uiFileNameLen); +unsigned int OA_IsPreSetModeAvailable(const char * const pcModeName); unsigned int OA_EnableMode(const char * const pcModeName); unsigned int OA_GetModeAcqParams(const char * const pcModeName, char * const pcListOfParams); unsigned int OA_GetUserModeNames(char * pcListOfModes); @@ -626,6 +636,7 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define DRV_BINNING_ERROR 20099 #define DRV_INVALID_AMPLIFIER 20100 #define DRV_INVALID_COUNTCONVERT_MODE 20101 +#define DRV_USB_INTERRUPT_ENDPOINT_TIMEOUT 20102 #define DRV_ERROR_NOCAMERA 20990 #define DRV_NOT_SUPPORTED 20991 @@ -672,6 +683,7 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define DRV_OA_MODE_DOES_NOT_EXIST 20193 #define DRV_OA_CAMERA_NOT_SUPPORTED 20194 #define DRV_OA_FAILED_TO_GET_MODE 20195 +#define DRV_OA_CAMERA_NOT_AVAILABLE 20196 #define DRV_PROCESSING_FAILED 20211 @@ -682,8 +694,7 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define AC_ACQMODE_FRAMETRANSFER 16 #define AC_ACQMODE_FASTKINETICS 32 #define AC_ACQMODE_OVERLAP 64 -#define AC_ACQMODE_SUPERKINETICS 128 -#define AC_ACQMODE_TIMESCAN 256 +#define AC_ACQMODE_TDI 0x80 #define AC_READMODE_FULLIMAGE 1 #define AC_READMODE_SUBIMAGE 2 @@ -735,6 +746,8 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define AC_CAMERATYPE_ALTAF 27 #define AC_CAMERATYPE_IKONXL 28 #define AC_CAMERATYPE_RES1 29 +#define AC_CAMERATYPE_ISTAR_SCMOS 30 +#define AC_CAMERATYPE_IKONLR 31 #define AC_PIXELMODE_8BIT 1 #define AC_PIXELMODE_14BIT 2 @@ -775,6 +788,9 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define AC_SETFUNCTION_PRESCANS 0x4000000 #define AC_SETFUNCTION_GATEWIDTHSTEP 0x8000000 #define AC_SETFUNCTION_EXTENDED_CROP_MODE 0x10000000 +#define AC_SETFUNCTION_SUPERKINETICS 0x20000000 +#define AC_SETFUNCTION_TIMESCAN 0x40000000 +#define AC_SETFUNCTION_CROPMODETYPE 0x80000000 // Deprecated for AC_SETFUNCTION_MCPGAIN #define AC_SETFUNCTION_GAIN 8 @@ -841,6 +857,9 @@ unsigned int PostProcessDataAveraging(at_32 * pInputImage, at_32 * pOutputImage, #define AC_EMGAIN_LINEAR12 4 #define AC_EMGAIN_REAL12 8 +#define AC_FEATURES2_ESD_EVENTS 1 +#define AC_FEATURES2_DUAL_PORT_CONFIGURATION 2 + #ifdef __cplusplus } #endif diff --git a/andorSupport/ftdi_table.c b/andorSupport/ftdi_table.c new file mode 100644 index 0000000..efd991e --- /dev/null +++ b/andorSupport/ftdi_table.c @@ -0,0 +1,46 @@ +/* + This is a simple method to enable users to configure their own table of + VID and PIDs. + Just overwrite entries in the table or add/subract as many as you want. + There may be a performance drop when using FT_Open, FT_OpenEx or + FT_ListDevices when using this method. Therefore it is advised to avoid + excessive used of these functions. + + Compile with: + $ gcc -fpic -shared -Wl,-soname,libd2xx_table.so -o libd2xx_table.so ftdi_table.c + + This is Andor Shamrock 500i: + Bus 001 Device 073: ID 0403:d493 Future Technology Devices International, Ltd + +*/ + + +#define SIZE(x) (sizeof(x)/sizeof(x[0])) + +static int id_table[][2] = { + { 0x0403, 0x6010 }, /* 2232C */ + { 0x0403, 0x6001 }, /* AM or BM */ + { 0x0403, 0x6006 }, /* Direct Driver PID */ + { 0x0403, 0xD493 } /* Andor Shamrock 500i */ +}; + +/* + int lib_check_device(int vendor, int product) + + Description: Check the VID and PID against our table + Arguments: vendor (device to check VID), product (device to check PID) + Return: 0 if no match, 1 if match +*/ +int lib_check_device(int vendor, int product) +{ + int i; + + for(i = 0; i < SIZE(id_table); i++) { + if ((id_table[i][0] == vendor) && (id_table[i][1] == product)) { + return 1; + } + } + return 0; /* no match */ +} + + diff --git a/andorSupport/os/linux-x86/libUSBI2C-i386.so.2.102.30034.0 b/andorSupport/os/linux-x86/libUSBI2C-i386.so.2.102.30034.0 new file mode 100755 index 0000000..d6c010f Binary files /dev/null and b/andorSupport/os/linux-x86/libUSBI2C-i386.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86/libUSBI2C.so b/andorSupport/os/linux-x86/libUSBI2C.so new file mode 120000 index 0000000..d99510d --- /dev/null +++ b/andorSupport/os/linux-x86/libUSBI2C.so @@ -0,0 +1 @@ +libUSBI2C.so.2 \ No newline at end of file diff --git a/andorSupport/os/linux-x86/libUSBI2C.so.2 b/andorSupport/os/linux-x86/libUSBI2C.so.2 new file mode 120000 index 0000000..8dfc02c --- /dev/null +++ b/andorSupport/os/linux-x86/libUSBI2C.so.2 @@ -0,0 +1 @@ +libUSBI2C-i386.so.2.102.30034.0 \ No newline at end of file diff --git a/andorSupport/os/linux-x86/libandor-i386.so.2.102.30034.0 b/andorSupport/os/linux-x86/libandor-i386.so.2.102.30034.0 new file mode 100755 index 0000000..9d9c7a7 Binary files /dev/null and b/andorSupport/os/linux-x86/libandor-i386.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86/libandor.so.2 b/andorSupport/os/linux-x86/libandor.so.2 index 1889ad3..ce1f170 120000 --- a/andorSupport/os/linux-x86/libandor.so.2 +++ b/andorSupport/os/linux-x86/libandor.so.2 @@ -1 +1 @@ -libandor-i386.so.2.99.30002.0 \ No newline at end of file +libandor-i386.so.2.102.30034.0 \ No newline at end of file diff --git a/andorSupport/os/linux-x86/libatsifio-i386.so.2.102.30034.0 b/andorSupport/os/linux-x86/libatsifio-i386.so.2.102.30034.0 new file mode 100755 index 0000000..f0d269f Binary files /dev/null and b/andorSupport/os/linux-x86/libatsifio-i386.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86/libshamrockcif-i386.so.2.102.30034.0 b/andorSupport/os/linux-x86/libshamrockcif-i386.so.2.102.30034.0 new file mode 100755 index 0000000..013763d Binary files /dev/null and b/andorSupport/os/linux-x86/libshamrockcif-i386.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86/libshamrockcif.so.2 b/andorSupport/os/linux-x86/libshamrockcif.so.2 index 16fa8de..82a8bbe 120000 --- a/andorSupport/os/linux-x86/libshamrockcif.so.2 +++ b/andorSupport/os/linux-x86/libshamrockcif.so.2 @@ -1 +1 @@ -libshamrockcif-i386.so.2.99.30002.0 \ No newline at end of file +libshamrockcif-i386.so.2.102.30034.0 \ No newline at end of file diff --git a/andorSupport/os/linux-x86_64/libUSBI2C-x86_64.so.2.102.30034.0 b/andorSupport/os/linux-x86_64/libUSBI2C-x86_64.so.2.102.30034.0 new file mode 100755 index 0000000..2842fa9 Binary files /dev/null and b/andorSupport/os/linux-x86_64/libUSBI2C-x86_64.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86_64/libUSBI2C.so b/andorSupport/os/linux-x86_64/libUSBI2C.so new file mode 120000 index 0000000..d99510d --- /dev/null +++ b/andorSupport/os/linux-x86_64/libUSBI2C.so @@ -0,0 +1 @@ +libUSBI2C.so.2 \ No newline at end of file diff --git a/andorSupport/os/linux-x86_64/libUSBI2C.so.2 b/andorSupport/os/linux-x86_64/libUSBI2C.so.2 new file mode 120000 index 0000000..16f0344 --- /dev/null +++ b/andorSupport/os/linux-x86_64/libUSBI2C.so.2 @@ -0,0 +1 @@ +libUSBI2C-x86_64.so.2.102.30034.0 \ No newline at end of file diff --git a/andorSupport/os/linux-x86_64/libandor-x86_64.so.2.102.30034.0 b/andorSupport/os/linux-x86_64/libandor-x86_64.so.2.102.30034.0 new file mode 100755 index 0000000..d75db45 Binary files /dev/null and b/andorSupport/os/linux-x86_64/libandor-x86_64.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86_64/libandor.so.2 b/andorSupport/os/linux-x86_64/libandor.so.2 index f2a2e3a..73b4564 120000 --- a/andorSupport/os/linux-x86_64/libandor.so.2 +++ b/andorSupport/os/linux-x86_64/libandor.so.2 @@ -1 +1 @@ -libandor-x86_64.so.2.99.30002.0 \ No newline at end of file +libandor-x86_64.so.2.102.30034.0 \ No newline at end of file diff --git a/andorSupport/os/linux-x86_64/libatsifio-x86_64.so.2.102.30034.0 b/andorSupport/os/linux-x86_64/libatsifio-x86_64.so.2.102.30034.0 new file mode 100755 index 0000000..4e437ac Binary files /dev/null and b/andorSupport/os/linux-x86_64/libatsifio-x86_64.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86_64/libd2xx_table.so b/andorSupport/os/linux-x86_64/libd2xx_table.so new file mode 100755 index 0000000..49394ed Binary files /dev/null and b/andorSupport/os/linux-x86_64/libd2xx_table.so differ diff --git a/andorSupport/os/linux-x86_64/libshamrockcif-x86_64.so.2.102.30034.0 b/andorSupport/os/linux-x86_64/libshamrockcif-x86_64.so.2.102.30034.0 new file mode 100755 index 0000000..0e47f37 Binary files /dev/null and b/andorSupport/os/linux-x86_64/libshamrockcif-x86_64.so.2.102.30034.0 differ diff --git a/andorSupport/os/linux-x86_64/libshamrockcif.so.2 b/andorSupport/os/linux-x86_64/libshamrockcif.so.2 index 0b1647e..3306184 120000 --- a/andorSupport/os/linux-x86_64/libshamrockcif.so.2 +++ b/andorSupport/os/linux-x86_64/libshamrockcif.so.2 @@ -1 +1 @@ -libshamrockcif-x86_64.so.2.99.30002.0 \ No newline at end of file +libshamrockcif-x86_64.so.2.102.30034.0 \ No newline at end of file diff --git a/documentation/andorDoc.html b/documentation/andorDoc.html index 6a9bbd1..280076e 100755 --- a/documentation/andorDoc.html +++ b/documentation/andorDoc.html @@ -94,6 +94,22 @@

This is a rather strange requirement of the Andor Shamrock SDK, which will hopefully be fixed by them in a future release.

+

+ NOTE: When using SDK version >= 2.102.30000.0 on Linux one must make sure that + libUSBI2C-[ARCH].so.[VERSION] is installed as part of support into libUSBI2C.so and libUSBI2C.so.2. +

+

+ Also libd2xx_table.so might be needed to get Shamrock communicating. See andorSupport/ftdi_table.c for more. +

+

+ Compile with: +

+

+    $ gcc -fpic -shared -Wl,-soname,libd2xx_table.so -o libd2xx_table.so ftdi_table.c
+  

+

+ Place the libd2xx_table.so into the folder with the rest of SDK support libraries. +

Implementation of standard driver parameters