#ifdef _CVI_ #include #else #include #include #include #endif #include "licel_tr.h" /* Please look there also for parameter description*/ /*Configuration*/ /*Set the discriminator level between 0 and 63*/ int HS_Licel_Set_Discriminator_Level( short int iDevice,int iDiscrLevel) { int iStatus,i; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+RESET_DISCR)); if(iStatus!=0) return iStatus; if(iDiscrLevel>=0) { for(i=63; i>iDiscrLevel;i--) { iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+DECREASE_DISCR)); } } return iStatus; } /* Changes the input voltage range (20,100,500mV)*/ int HS_Licel_Set_Range(short int iDevice,int iRange) { int iStatus; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7) + RESET_RANGE)); if(iStatus!=0) return iStatus; mDelay(10); switch (iRange) { case MILLIVOLT500: break; case MILLIVOLT100: iStatus=WriteCommand(NI_CARD,(short) ((iDevice &7)+SET_RANGE)); break; case MILLIVOLT20: iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+SET_RANGE+GROUP_II)); break; default: break; } mDelay(10); return iStatus; } /* Set Threshold Mode sets the scale of the discriminator level, in the low threshold mode the discriminator level 63 corresponds to -25mV, while in the high threshold mode it corresponds to -100mV */ int HS_Licel_Set_Threshold_Mode(short int iDevice,int iMode) { int iStatus; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+RESET_DAMPING)); if(iStatus!=0) return iStatus; if(iMode!=0) iStatus=WriteCommand(NI_CARD,(short) ((iDevice &7)+HIGH_TRESH)); return iStatus; } /*Action Status*/ /*Returns the status information for the specified device (cycles ,memory, acqusition state and whether the device is just recording*/ int HS_Licel_Get_Status(short int iDevice,long int *iCycles, int *iMemory, int *iAcq_State, int *iRecording) { int iStatus; unsigned short Patterns[2]; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STATUS)); if(iStatus!=0) return iStatus; iStatus=ReadArray(NI_CARD,Patterns,2); if(iStatus!=0) return iStatus; *iCycles=Patterns[1]&0x1FFF; *iMemory=(Patterns[1]&0x4000)>>14; *iAcq_State=(Patterns[1]&0x8000)>>15; *iRecording=(Patterns[1]&0x8000)>>13; #ifdef SHOTS64K iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STATUS+GROUP_II)); if(iStatus!=0) return iStatus; iStatus=ReadArray(NI_CARD,Patterns,2); if(iStatus!=0) return iStatus; *iCycles+=((long int) (Patterns[1]&0x07))<<13; #endif return iStatus; } /* Continues the recording process for the specified device without a new initialisation of the memeory*/ int HS_Licel_Continue_Acquisition(short int iDevice) { int iStatus; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD,(short) ( (iDevice &7)+START)); return iStatus; } /* The acquissition process will be stopped after the next received trigger*/ int HS_Licel_Stop_Acquisition(short int iDevice) { int iStatus; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD,(short) ( (iDevice &7)+STOP)); return iStatus; } /*Clears both memories (A and B) of the specified device */ int HS_Licel_Clear_Memory(short int iDevice) { int iStatus; int nMemory,nRunning, nAcqState,nLoop; long nCycles; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+RESET)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+START)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+SET_MEMORY)); if(iStatus!=0) return iStatus; nCycles=0; nLoop=0; while((nCycles==0) && nLoop= START_LOOP) return -START_LOOP; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+SET_MEMORY+GROUP_II)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STATUS)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STOP)); if(iStatus!=0) return iStatus; nCycles=0; nLoop=0; while((nCycles < 2) && nLoop= START_LOOP) return -START_LOOP; return iStatus; } /* Clears both Memories (A and B) and the device is in the armed state */ int HS_Licel_Start_Acquisition(short int iDevice) { int iStatus; int nMemory,nRunning, nAcqState,nLoop; long nCycles; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD,(short) ( (iDevice &7)+RESET)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD,(short) ( (iDevice &7)+START)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD,(short) ( (iDevice &7)+SET_MEMORY)); if(iStatus!=0) return iStatus; nCycles=0; nLoop=0; while((nCycles==0) && nLoop= START_LOOP) return -START_LOOP; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+SET_MEMORY+GROUP_II)); if(iStatus!=0) return iStatus; nCycles=0; while((nCycles < 2) && nLoop= START_LOOP) return -START_LOOP; return iStatus; } /* Acquires one shot for the specified device */ int HS_Licel_Single_Shot(short int iDevice) { int iStatus; Select(NI_CARD,iDevice&8); iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+START)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STATUS)); if(iStatus!=0) return iStatus; iStatus=WriteCommand(NI_CARD, (short) ((iDevice &7)+STOP)); return iStatus; } /* Waits for the return of the device from the armed state. If the waiting time is longer than the time specified by imDelay, then the device will return to the idle state with the next reading of binary data */ int HS_Licel_Wait_For_Ready(short int iDevice, int imDelay) { int iStatus; int nMemory,nRunning, nAcqState; long nCycles; int iTime; #ifndef _CVI #ifdef __BORLANDC__ struct timeb t1,t2; #else struct _timeb t1,t2; #endif #else double t1,t2; #endif Select(NI_CARD,iDevice&8); iTime=0; nRunning=1; #ifndef _CVI_ #ifdef __BORLANDC__ ftime(&t1); #else _ftime(&t1); #endif #else t1=Timer(); #endif while((nRunning!=0)&&(iTime