|
Wasatch.NET 2.4.14
.NET application driver for Wasatch Photonics spectrometers
|
Encapsulates a logical Wasatch Photonics spectrometer for communication. More...
Public Types | |
| enum | LaserPowerResolution { LASER_POWER_RESOLUTION_100 , LASER_POWER_RESOLUTION_1000 , LASER_POWER_RESOLUTION_MANUAL } |
| When setting laser power as a percentage (see setLaserPowerPercentage), this enum determines the possible resolution (granularity) of the selectable power. More... | |
| enum | UntetheredCaptureStatus { IDLE = 0 , DARK = 1 , WARMUP = 2 , SAMPLE = 3 , PROCESSING = 4 , ERROR = 5 } |
Public Member Functions | |
| void | cancelCurrentAcquisition () |
| virtual void | changeSPITrigger (bool edge, bool firmwareThrow) |
| virtual void | close () |
| double[] | correctRamanIntensity (double[] spectrum) |
| Performs SRM correction on the given spectrum using the ROI and coefficients on EEPROM. Non-ROI pixels are not corrected. If ROI or relative intensity coefficients appear invalid, original spectrum is returned. | |
| void | dontCache (Opcodes op) |
| bool | eraseStorage () |
| void | flushReaders () |
| ushort | getDAC_UNUSED () |
| virtual ushort[] | getFrame () |
| virtual double[] | getSpectrum (bool forceNew=false) |
| Take a single complete spectrum, including any configured scan averaging, boxcar, dark subtraction, inversion, binning, and optionally relative intensity correction. | |
| byte[] | getStorage (UInt16 page) |
| UntetheredCaptureStatus | getUntetheredCaptureStatus () |
| bool | haveCache (Opcodes op) |
| virtual bool | loadFromJSON (string pathname) |
| virtual bool | reconnect () |
| virtual void | regenerateWavelengths () |
| bool | resetFPGA () |
| bool | sendFeedback (UInt16 sequence) |
| bool | sendSWTrigger () |
| bool | setDFUMode () |
| Put the ARM microcontroller into DFU mode for firmware update. | |
| virtual bool | setLaserPowerPercentage (float perc) |
| void | useCache (Opcodes op) |
| void | close () |
| double[] | getSpectrum (bool forceNew) |
| Take a single complete spectrum, including any configured scan averaging, boxcar and dark subtraction. | |
| bool | reconnect () |
| void | regenerateWavelengths () |
| bool | setDFUMode () |
| Put the ARM microcontroller into DFU mode for firmware update. | |
| bool | setLaserPowerPercentage (float perc) |
| Set laser power to the specified percentage. | |
Public Attributes | |
| int | acquisitionMaxRetries = 2 |
| If a call to Spectrometer.getSpectrum() fails, how many internal (within WasatchNET) retries should be attempted (includes re-sending an ACQUIRE opcode). | |
| int | delayAfterBulkEndpointErrorMS = 100 |
| If there is an error reading one of the bulk endpoints, pause this many milliseconds in hopes of the bus resetting itself (does not automatically retry). | |
| bool | fastAreaScan = false |
| float | lastDetectorTemperatureDegC = UNINITIALIZED_TEMPERATURE_DEG_C |
| A cached value of the last-measured detector temperature. This is automatically updated following spectral reads if readTemperatureAfterSpectrum is set. | |
| int | multiChannelPosition = -1 |
| If the spectrometer is deployed in a multi-channel configuration, this provides a place to store an integral position in the Spectrometer object. (defaults to -1, an invalid position) | |
| bool | readTemperatureAfterSpectrum = false |
| If enabled, Wasatch.NET will automatically read the detector temperature following every successful call to getSpectrum(). That temperature can then be read from lastDetectorTemperatureDegC, without inducing any spectrometer communications. | |
Static Public Attributes | |
| const byte | DEVICE_TO_HOST = 0xc0 |
| const byte | HOST_TO_DEVICE = 0x40 |
| const int | LEGACY_VERTICAL_PIXELS = 70 |
| for Stroker Area Scan | |
| const ushort | SPECTRUM_START_MARKER = 0xffff |
| const float | UNINITIALIZED_TEMPERATURE_DEG_C = -999 |
Protected Member Functions | |
| void | correctBadPixels (ref double[] spectrum) |
| If a spectrometer has bad_pixels configured in the EEPROM, then average over them in the driver. | |
| virtual double[] | getAreaScanLightweight () |
| virtual double[] | getSpectrumRaw (bool skipTrigger=false) |
| just the bytes, ma'am | |
Protected Attributes | |
| bool | accessoryEnabled_ = false |
| object | acquisitionLock = new object() |
| synchronizes getSpectrum, integrationTimeMS, scanAveraging, dark and boxcarHalfWidth | |
| object | adcLock = new object() |
| bool | areaScanEnabled_ = false |
| uint | boxcarHalfWidth_ |
| bool | currentAcquisitionCancelled |
| double[] | dark_ |
| bool | detectorTECEnabled_ |
| float | detectorTECSetpointDegC_ = UNINITIALIZED_TEMPERATURE_DEG_C |
| ushort | detectorTECSetpointRaw_ |
| uint | integrationTimeMS_ |
| bool | lampEnabled_ = false |
| bool | laserEnabled_ |
| bool | laserHasFired_ |
| UInt64 | laserModulationPeriod_ |
| UInt64 | laserModulationPulseWidth_ |
| float | laserPowerSetpointMW_ = 0 |
| byte | laserTemperatureSetpointRaw_ |
| Logger | logger = Logger.getInstance() |
| double[] | reference_ |
| uint | scanAveraging_ = 1 |
| TRIGGER_SOURCE | triggerSource_ = TRIGGER_SOURCE.INTERNAL |
Package Functions | |
| byte[] | getCmd (Opcodes opcode, int len, ushort wIndex=0, int fullLen=0) |
| Execute a request-response control transaction using the given opcode. | |
| byte[] | getCmd2 (Opcodes opcode, int len, ushort wIndex=0, int fakeBufferLengthARM=0) |
| Execute a request-response transfer with a "second-tier" request. | |
| virtual bool | open () |
| bool | sendCmd (Opcodes opcode, ushort wValue=0, ushort wIndex=0, byte[] buf=null) |
| send a single control transfer command (response not checked) | |
| bool | sendCmd2 (Opcodes opcode, ushort wIndex=0, byte[] buf=null) |
| send a single 2nd-tier control transfer command (response not checked) | |
| Spectrometer (UsbRegistry usbReg) | |
Package Attributes | |
| Dictionary< Opcodes, byte > | cmd = OpcodeHelper.getInstance().getDict() |
| bool | shuttingDown = false |
| SpectrometerUptime | uptime |
Properties | |
| virtual bool | accessoryEnabled [get, set] |
| Determines whether or not the Gen1.5 accessory connector's features can be used. | |
| int | acquireCount = 0 [get, protected set] |
| Allows application to track how many ACQUIRE_SPECTRUM commands have been sent to the spectrometer (including throwaways and retries). | |
| uint? | acquisitionTimeoutMS [get, set] |
| Convenience accessor to set an explicit acquisition timeout. | |
| uint | acquisitionTimeoutRelativeMS [set] |
| Allows the NEXT acquisition timeout to be set relative to "now" as an offiset in milliseconds. | |
| DateTime? | acquisitionTimeoutTimestamp = null [get, set] |
| Allows the NEXT acquisition timeout to be set to an explicit objective future timestamp. | |
| ushort | actualFrames [get] |
| How many frames have been read since last power cycle (has overflow) | |
| uint | actualIntegrationTimeUS [get] |
| Return integration time + clock-out time (and laser pulse time if externally triggered). | |
| ushort | adcRaw [get] |
| virtual bool | areaScanEnabled [get, set] |
| Configure detector for 2D image mode. | |
| bool | autoTrigger [get, set] |
| Whether the driver should automatically send a software trigger on calls to getSpectrum() when triggerSource is set to INTERNAL. (defaults true) | |
| virtual bool | batteryCharging [get] |
| virtual float | batteryPercentage [get] |
| uint | batteryStateRaw [get] |
| virtual uint | boxcarHalfWidth [get, set] |
| Perform post-acquisition high-frequency smoothing by averaging together "n" pixels to either side of each acquired pixel; zero to disable (default). | |
| virtual bool | continuousAcquisitionEnable [get, set] |
| After the first trigger is received, no further triggers are required; spectrometer will enter free-running mode. | |
| virtual byte | continuousFrames [get, set] |
| When not using "continous acquisitions" with external triggers, how many spectra to acquire per trigger event. | |
| virtual double[] | dark [get, set] |
| Perform automatic dark subtraction by setting this property to an acquired dark spectrum; leave "null" to disable. | |
| virtual float | detectorGain [get, set] |
| Maps to an FPGA register inside the spectrometer used to scale pixels read from the ADC to optimize dynamic range. | |
| virtual float | detectorGainOdd [get, set] |
| (InGaAs-only) Companion property to detectorGain, which on InGaAs detectors applies only to even-numbered pixels. | |
| virtual short | detectorOffset [get, set] |
| Maps to an FPGA register inside the spectrometer used to offset the pixels (dark baseline) read from the ADC to optimize dynamic range. | |
| virtual short | detectorOffsetOdd [get, set] |
| (InGaAs-only) Companion property to detectorOffset, which on InGaAs detectors applies only to even-numbered pixels. | |
| ushort | detectorSensingThreshold [get, set] |
| bool | detectorSensingThresholdEnabled [get, set] |
| virtual UInt16 | detectorStartLine [get, set] |
| virtual UInt16 | detectorStopLine [get, set] |
| virtual bool | detectorTECEnabled [get, set] |
| virtual float | detectorTECSetpointDegC [get, set] |
| virtual ushort | detectorTECSetpointRaw [get, set] |
| double | detectorTemperatureCacheTimeMS = 1000 [get, set] |
| virtual float | detectorTemperatureDegC [get] |
| virtual ushort | detectorTemperatureRaw [get] |
| EEPROM | eeprom [get, protected set] |
| configuration settings stored in the spectrometer's EEPROM | |
| bool | errorOnTimeout = true [get, set] |
| Whether an ERROR should be logged on a timeout event (default true) | |
| virtual float | excitationWavelengthNM [get, set] |
| FeatureIdentification | featureIdentification [get, set] |
| metadata inferred from the spectrometer's USB PID | |
| virtual string | firmwareRevision [get] |
| FPGAOptions | fpgaOptions [get, private set] |
| set of compilation options used to compile the FPGA firmware in this spectrometer | |
| virtual string | fpgaRevision [get] |
| FRAM | fram [get, protected set] |
| virtual bool | hasLaser [get] |
| bool | hasMarker [get, set] |
| Some spectrometers send a start-of-frame marker in the first pixel of the spectrum. | |
| bool | hasSecondaryADC = false [get, set] |
| This should be replaced with an FGPACompilationFlag or EEPROM field at some point. | |
| virtual bool | highGainModeEnabled [get, set] |
| HORIZONTAL_BINNING | horizontalBinning [get, set] |
| string | id [get] |
| couples serial number with channel position | |
| virtual uint | integrationTimeMS [get, set] |
| Current integration time in milliseconds. | |
| virtual bool | isARM [get] |
| bool | isGen15 [get] |
| Whether the spectrometer uses a "Gen 1.5" accessory connector. | |
| virtual bool | isInGaAs [get] |
| bool | isOCT = false [get, protected set] |
| Optical Coherence Tomography (OCT) spectrometers differ from "standard" spectrometers in several respects, such as producing both 2D and 3D imagery. | |
| bool | isSiG [get] |
| bool | isSPI = false [get, protected set] |
| Whether the spectrometer uses Serial Peripheral Interface (as opposed to USB for instance). | |
| bool | isStroker = false [get, protected set] |
| Stroker is a legacy board firmware with older PID (not 0x1000, 0x2000 or 0x4000), doesn't conform to Feature Identification Device (FID) Protocol, and lacking an EEPROM. | |
| virtual bool | lampEnabled [get, set] |
| Whether the lamp attached via Gen 1.5 attachment has been requested to be turned on by the software and firmware. | |
| virtual bool | laserEnabled [get, set] |
| Whether the laser has been REQUESTED TO FIRE by the software and firmware. | |
| virtual bool | laserFiring [get] |
| Whether the laser is ACTUALLY FIRING, according to the laser driver and laser interlock board. | |
| virtual bool | laserInterlockEnabled [get] |
| True if the laser can fire (interlock circuit is CLOSED), false if the laser cannot fire (interlock circuit is OPEN). | |
| UInt64 | laserModulationDuration [get, set] |
| If you only want the laser to be modulated for a portion of each acquisition (rare), how long in microseconds should the laser be modulated during each integration. | |
| bool | laserModulationEnabled [get, set] |
| bool | laserModulationLinkedToIntegrationTime [get, set] |
| virtual UInt64 | laserModulationPeriod [get, set] |
| When defining the laser modulation duty cycle, the length (period) of the duty cycle in microsec. | |
| UInt64 | laserModulationPulseDelay [get, set] |
| If you want the laser modulation to start part-way through an acquisition, this defines the delay in microseconds from the beginning of the integration until laser modulation begins. | |
| virtual UInt64 | laserModulationPulseWidth [get, set] |
| When defining the laser modulation duty cycle, the length (width) of the period during which the laser is enabled. | |
| virtual LaserPowerResolution | laserPowerResolution = LaserPowerResolution.LASER_POWER_RESOLUTION_1000 [get, set] |
| virtual float | laserPowerSetpointMW [get, set] |
| Use this to set the laser output power in milliWatts. | |
| bool | laserRampingEnabled [get, set] |
| disabled to deconflict area scan | |
| virtual float | laserTemperatureDegC [get] |
| convert the raw laser temperature reading into degrees centigrade | |
| virtual ushort | laserTemperatureRaw [get] |
| Synonym for primaryADC. | |
| virtual byte | laserTemperatureSetpointRaw [get, set] |
| FACTORY ONLY. | |
| double[] | lastSpectrum [get, protected set] |
| Useful if you lost the results of getSpectrum, or if you want to peek into ongoing multi-acquisition tasks like scan averaging or optimization. | |
| uint | lineLength [get] |
| int | linesPerFrame [get, protected set] |
| string | model [get] |
| spectrometer model | |
| bool | multiChannelSelected [get, set] |
| Multichannel convenience accessor (default false) | |
| bool | optActualIntegrationTime [get] |
| bool | optAreaScan [get] |
| Whether area scan mode is supported. | |
| bool | optCFSelect [get] |
| Internal firmware name for the highGainModeEnabled feature available on InGaAs detectors. | |
| FPGA_DATA_HEADER | optDataHeaderTag [get] |
| bool | optHorizontalBinning [get] |
| FPGA_INTEG_TIME_RES | optIntegrationTimeResolution [get] |
| FPGA_LASER_CONTROL | optLaserControl [get] |
| FPGA_LASER_TYPE | optLaserType [get] |
| double[] | pixelAxis [get] |
| convenience accesor for pixel axis (lazy-loaded), for parallelism with wavelengths and wavenumbers | |
| uint | pixels [get, protected set] |
| how many pixels does the spectrometer have (spectrum length) | |
| ushort | primaryADC [get] |
| bool | ramanIntensityCorrectionEnabled [get, set] |
| Whether to correct the y-axis using SRM-derived correction factors, stored as coefficients on the spectrometer. | |
| virtual double[] | reference [get, set] |
| Simplify reference-based techniques (absorbance, reflectance, transmission etc) by allowing a reference to be stored with the Spectrometer, similar to dark. | |
| virtual uint | scanAveraging [get, set] |
| How many acquisitions to average together (0 or 1 for no averaging). (default 1) | |
| bool | scanAveragingIsContinuous [get, set] |
| Whether the "scanAveraging" property should automatically configure continuousAcquisitionEnable and continuousFrames. (default false) | |
| virtual ushort | secondaryADC [get] |
| This is provided for spectrometers with a secondary ADC connected to an external laser, photodiode or what-have-you. Attempts to read it on spectrometers where it has not been configured can result in indeterminate behavior; therefore, hasSecondaryADC is provided to allow callers to selectively enable this function if they believe they are using supported hardware. | |
| byte | selectedADC [get, set] |
| virtual string | serialNumber [get] |
| spectrometer serial number | |
| int | shiftedMarkerCount = 0 [get, private set] |
| For spectrometer firmware providing "start of spectrum markers", provides a count of how many INCORRECT markers were found in the MOST RECENT spectrum. | |
| int | spectrumCount = 0 [get, protected set] |
| Allows application to track how many successful (non-null) calls have been made to getSpectrum (whether averaged or otherwise). | |
| bool | throwawayADCRead = true [get, set] |
| Whether the driver should automatically perform a throwaway ADC read when changing the selected ADC. (defaults true) | |
| bool | throwawayAfterIntegrationTime [get, set] |
| Whether the driver should automatically generate a throwaway "stability" measurement after changing integration time. (defaults false) | |
| uint | triggerDelay [get, set] |
| A configurable delay from when an inbound trigger signal is received by the spectrometer, until the triggered acquisition actually starts. | |
| EXTERNAL_TRIGGER_OUTPUT | triggerOutput [get, set] |
| virtual TRIGGER_SOURCE | triggerSource [get, set] |
| Whether acquisitions are triggered "internally" (via the ACQUIRE opcode sent by software) or "externally" (via an electrical signal wired to the accessory connector). | |
| string | uniqueKey [get, set] |
| bool | untetheredAcquisitionEnabled = false [get, set] |
| Untethered operation requires an argument to ACQUIRE, and polls before reading spectrum. | |
| bool | useReadoutMutex [get, set] |
| Whether to synchronize all spectral reads with a class-level (static) mutex. | |
| double[] | wavelengths [get, protected set] |
| pre-populated array of wavelengths (nm) by pixel, generated from eeprom.wavecalCoeffs | |
| double[] | wavenumbers [get, protected set] |
| pre-populated array of Raman shifts in wavenumber (1/cm) by pixel, generated from wavelengths[] and excitationNM | |
Properties inherited from WasatchNET.ISpectrometer | |
| bool | accessoryEnabled [get, set] |
| Determines whether or not the Gen1.5 accessory connector's features can be used. | |
| ushort | actualFrames [get] |
| How many frames have been read since last power cycle (has overflow) | |
| uint | actualIntegrationTimeUS [get] |
| Return integration time + clock-out time (and laser pulse time if externally triggered). | |
| bool | areaScanEnabled [get, set] |
| Configure detector for 2D image mode. | |
| bool | batteryCharging [get] |
| float | batteryPercentage [get] |
| uint | batteryStateRaw [get] |
| uint | boxcarHalfWidth [get, set] |
| Perform post-acquisition high-frequency smoothing by averaging together "n" pixels to either side of each acquired pixel; zero to disable (default). | |
| bool | continuousAcquisitionEnable [get, set] |
| After the first trigger is received, no further triggers are required; spectrometer will enter free-running mode. | |
| byte | continuousFrames [get, set] |
| When not using "continous acquisitions" with external triggers, how many spectra to acquire per trigger event. | |
| double[] | dark [get, set] |
| Perform automatic dark subtraction by setting this property to an acquired dark spectrum; leave "null" to disable. | |
| float | detectorGain [get, set] |
| Maps to an FPGA register inside the spectrometer used to scale pixels read from the ADC to optimize dynamic range. | |
| float | detectorGainOdd [get, set] |
| (InGaAs-only) Companion property to detectorGain, which on InGaAs detectors applies only to even-numbered pixels. | |
| short | detectorOffset [get, set] |
| Maps to an FPGA register inside the spectrometer used to offset the pixels (dark baseline) read from the ADC to optimize dynamic range. | |
| short | detectorOffsetOdd [get, set] |
| (InGaAs-only) Companion property to detectorOffset, which on InGaAs detectors applies only to even-numbered pixels. | |
| ushort | detectorSensingThreshold [get, set] |
| bool | detectorSensingThresholdEnabled [get, set] |
| bool | detectorTECEnabled [get, set] |
| float | detectorTECSetpointDegC [get, set] |
| ushort | detectorTECSetpointRaw [get, set] |
| double | detectorTemperatureCacheTimeMS [get, set] |
| float | detectorTemperatureDegC [get] |
| ushort | detectorTemperatureRaw [get] |
| EEPROM | eeprom [get] |
| configuration settings stored in the spectrometer's EEPROM | |
| float | excitationWavelengthNM [get, set] |
| FeatureIdentification | featureIdentification [get] |
| metadata inferred from the spectrometer's USB PID | |
| string | firmwareRevision [get] |
| FPGAOptions | fpgaOptions [get] |
| set of compilation options used to compile the FPGA firmware in this spectrometer | |
| string | fpgaRevision [get] |
| bool | hasLaser [get] |
| bool | hasSecondaryADC [get, set] |
| This should be replaced with an FGPACompilationFlag or EEPROM field at some point. | |
| bool | highGainModeEnabled [get, set] |
| uint | integrationTimeMS [get, set] |
| Current integration time in milliseconds. | |
| bool | isARM [get] |
| bool | isGen15 [get] |
| bool | isInGaAs [get] |
| bool | isSiG [get] |
| bool | isSPI [get] |
| bool | lampEnabled [get, set] |
| Whether the lamp attached via Gen 1.5 attachment has been requested to be turned on by the software and firmware. | |
| bool | laserEnabled [get, set] |
| Whether the laser has been REQUESTED TO FIRE by the software and firmware. | |
| bool | laserFiring [get] |
| Whether the laser is ACTUALLY FIRING, according to the laser driver and laser interlock board. | |
| bool | laserInterlockEnabled [get] |
| True if the laser can fire (interlock circuit is CLOSED), false if the laser cannot fire (interlock circuit is OPEN). | |
| UInt64 | laserModulationDuration [get, set] |
| If you only want the laser to be modulated for a portion of each acquisition (rare), how long in microseconds should the laser be modulated during each integration. | |
| bool | laserModulationEnabled [get, set] |
| bool | laserModulationLinkedToIntegrationTime [get, set] |
| UInt64 | laserModulationPeriod [get, set] |
| When defining the laser modulation duty cycle, the length (period) of the duty cycle in microsec. | |
| UInt64 | laserModulationPulseDelay [get, set] |
| If you want the laser modulation to start part-way through an acquisition, this defines the delay in microseconds from the beginning of the integration until laser modulation begins. | |
| UInt64 | laserModulationPulseWidth [get, set] |
| When defining the laser modulation duty cycle, the length (width) of the period during which the laser is enabled. | |
| Spectrometer.LaserPowerResolution | laserPowerResolution [get, set] |
| bool | laserRampingEnabled [get, set] |
| float | laserTemperatureDegC [get] |
| convert the raw laser temperature reading into degrees centigrade | |
| ushort | laserTemperatureRaw [get] |
| Synonym for primaryADC. | |
| byte | laserTemperatureSetpointRaw [get, set] |
| FACTORY ONLY. | |
| uint | lineLength [get] |
| string | model [get] |
| spectrometer model | |
| bool | optActualIntegrationTime [get] |
| bool | optAreaScan [get] |
| Whether area scan mode is supported. | |
| bool | optCFSelect [get] |
| Internal firmware name for the highGainModeEnabled feature available on InGaAs detectors. | |
| FPGA_DATA_HEADER | optDataHeaderTag [get] |
| bool | optHorizontalBinning [get] |
| FPGA_INTEG_TIME_RES | optIntegrationTimeResolution [get] |
| FPGA_LASER_CONTROL | optLaserControl [get] |
| FPGA_LASER_TYPE | optLaserType [get] |
| uint | pixels [get] |
| how many pixels does the spectrometer have (spectrum length) | |
| ushort | primaryADC [get] |
| bool | ramanIntensityCorrectionEnabled [get, set] |
| uint | scanAveraging [get, set] |
| How many acquisitions to average together (zero for no averaging) | |
| ushort | secondaryADC [get] |
| This is provided for spectrometers with a secondary ADC connected to an external laser, photodiode or what-have-you. Attempts to read it on spectrometers where it has not been configured can result in indeterminate behavior; therefore, hasSecondaryADC is provided to allow callers to selectively enable this function if they believe they are using supported hardware. | |
| string | serialNumber [get] |
| spectrometer serial number | |
| uint | triggerDelay [get, set] |
| A configurable delay from when an inbound trigger signal is received by the spectrometer, until the triggered acquisition actually starts. | |
| EXTERNAL_TRIGGER_OUTPUT | triggerOutput [get, set] |
| TRIGGER_SOURCE | triggerSource [get, set] |
| Whether acquisitions are triggered "internally" (via the ACQUIRE opcode sent by software) or "externally" (via an electrical signal wired to the accessory connector). | |
| double[] | wavelengths [get] |
| pre-populated array of wavelengths (nm) by pixel, generated from eeprom.wavecalCoeffs | |
| double[] | wavenumbers [get] |
| pre-populated array of Raman shifts in wavenumber (1/cm) by pixel, generated from wavelengths[] and excitationNM | |
Private Member Functions | |
| void | configureContinuousAcquisition () |
| uint[] | correctIngaasEvenOdd (uint[] spectrum) |
| int | generateTimeoutMS () |
| string | generateUniqueKey (UsbRegistry usbRegistry) |
| This generates a string identifier for the spectrometer which should be enough to distinguish it from others with the same VID/PID using nothing but UsbRegistry information (e.g. bus address). Note that this is to be used for recognizing previously-opened spectrometers BEFORE reading their EEPROM. | |
| void | performThrowawaySpectrum () |
| Generate a throwaway spectrum, such as following a change in integration time on spectrometers requiring such. | |
| uint[] | readImage (UsbEndpointReader spectralReader, int pixelsPerEndpoint) |
| uint[] | readSubspectrum (UsbEndpointReader spectralReader, int pixelsPerEndpoint) |
| uint[] | readSubspectrumLightweight (UsbEndpointReader spectralReader, int pixelsPerEndpoint) |
| uint[] | readSubspectrumStroker (UsbEndpointReader spectralReader, int pixelsPerEndpoint) |
| string | stringifyPacket (UsbSetupPacket packet) |
| ushort | swapBytes (ushort raw) |
| Although most values read from the spectrometer are little-endian by design, a few are big-endian. | |
| bool | waitForUntetheredData () |
| |
| void | waitForUsbAvailable () |
Static Private Attributes | |
| static Mutex | readoutMutex = new Mutex() |
Encapsulates a logical Wasatch Photonics spectrometer for communication.
For WP spectrometer API, see ENG-0001 "WP Raman USB Interface Specification r1.4"
NOT rigorously tested for thread-safety. It MAY be thread-safe, it WILL be thread-safe, but currently it is not GUARANTEED thread-safe.
Currently the only supported bus is USB (using LibUsbDotNet). There are relatively few accesses to the raw USB objects in this implementation, so it should be fairly easy to refactor to support Bluetooth, Ethernet etc when I get test units.
<todo> Should really just add getAreaScan() method, which correctly does everything for whatever spectrometer is connected, returning the 2D array. </todo>
When setting laser power as a percentage (see setLaserPowerPercentage), this enum determines the possible resolution (granularity) of the selectable power.
| Enumerator | |
|---|---|
| LASER_POWER_RESOLUTION_100 | |
| LASER_POWER_RESOLUTION_1000 | |
| LASER_POWER_RESOLUTION_MANUAL | |
|
inlinepackage |
| void WasatchNET.Spectrometer.cancelCurrentAcquisition | ( | ) |
|
inlinevirtual |
Reimplemented in WasatchNET.SPISpectrometer.
|
inlinevirtual |
Implements WasatchNET.ISpectrometer.
Reimplemented in WasatchNET.BoulderSpectrometer, WasatchNET.HOCTSpectrometer, WasatchNET.MockSpectrometer, and WasatchNET.SPISpectrometer.
|
inlineprivate |
|
inlineprotected |
If a spectrometer has bad_pixels configured in the EEPROM, then average over them in the driver.
|
inlineprivate |
| double[] WasatchNET.Spectrometer.correctRamanIntensity | ( | double[] | spectrum | ) |
Performs SRM correction on the given spectrum using the ROI and coefficients on EEPROM. Non-ROI pixels are not corrected. If ROI or relative intensity coefficients appear invalid, original spectrum is returned.
|
inline |
|
inline |
|
inline |
|
inlineprivate |
|
inlineprivate |
This generates a string identifier for the spectrometer which should be enough to distinguish it from others with the same VID/PID using nothing but UsbRegistry information (e.g. bus address). Note that this is to be used for recognizing previously-opened spectrometers BEFORE reading their EEPROM.
| usbRegistry |
|
inlineprotectedvirtual |
|
inlinepackage |
Execute a request-response control transaction using the given opcode.
| opcode | the opcode of the desired request |
| len | the number of needed return bytes |
| wIndex | an optional numeric argument used by some opcodes |
| fullLen | the actual number of expected return bytes (not all needed) |
not sure fullLen is actually required...testing
|
inlinepackage |
Execute a request-response transfer with a "second-tier" request.
| opcode | the wValue to send along with the "second-tier" command |
| len | how many bytes of response are expected |
|
inline |
|
inlinevirtual |
Reimplemented in WasatchNET.HOCTSpectrometer, and WasatchNET.MockSpectrometer.
|
inlinevirtual |
Take a single complete spectrum, including any configured scan averaging, boxcar, dark subtraction, inversion, binning, and optionally relative intensity correction.
| forceNew | not used in base class (provided for specialized subclasses) |
Implements WasatchNET.ISpectrometer.
Reimplemented in WasatchNET.BoulderSpectrometer, WasatchNET.HOCTSpectrometer, WasatchNET.MockSpectrometer, and WasatchNET.SPISpectrometer.
|
inlineprotectedvirtual |
just the bytes, ma'am
| skipTrigger | allows getSpectrum to suppress SW triggers when scanAveraging, on scans after the first, if scanAveragingIsContinuous |
Reimplemented in WasatchNET.BoulderSpectrometer, WasatchNET.MockSpectrometer, and WasatchNET.SPISpectrometer.
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
|
inlinepackagevirtual |
Reimplemented in WasatchNET.BoulderSpectrometer, WasatchNET.HOCTSpectrometer, WasatchNET.MockSpectrometer, and WasatchNET.SPISpectrometer.
|
inlineprivate |
Generate a throwaway spectrum, such as following a change in integration time on spectrometers requiring such.
If the caller doesn't want to block on this, they can always change integrationTimeMS within a Task.Run closure.
<todo> Consider simply disabling this feature (returning from this function) if autoTrigger is disabled or using HW triggering. In such cases, if the user wants a throwaway, they can generate it themselves. </todo>
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlineprivate |
|
inlinevirtual |
Implements WasatchNET.ISpectrometer.
Reimplemented in WasatchNET.MockSpectrometer.
|
inlinevirtual |
Implements WasatchNET.ISpectrometer.
|
inline |
|
inlinepackage |
send a single control transfer command (response not checked)
| opcode | the desired command |
| wValue | an optional secondary argument used by most commands |
| wIndex | an optional tertiary argument used by some commands |
| buf | a data buffer used by some commands |
<todo>should support return code checking...most cmd opcodes return a success/failure byte</todo>
|
inlinepackage |
send a single 2nd-tier control transfer command (response not checked)
| opcode | the desired command |
| wIndex | an optional secondary argument used by some 2nd-tier commands |
| buf | a data buffer used by some commands |
<todo>should support return code checking...most cmd opcodes return a success/failure byte</todo>
|
inline |
|
inline |
|
inline |
Put the ARM microcontroller into DFU mode for firmware update.
Will not work on FX2. Cannot be "undone" from software (power-cycle the spectrometer to reset out of DFU mode). Not recommended for the faint of heart.
Implements WasatchNET.ISpectrometer.
|
inlinevirtual |
| perc | a normalized floating-point percentage from 0.0 to 1.0 (100%) |
Not implemented as a property because it truly isn't; it's a complex combination of actual spectrometer properties.
Technically you don't need to call this function at all, and can set the laserModulationPulseWidth, laserModulationPulsePeriod and laserModulationEnabled properties directly if you wish.
Alternately, you can use the laserPowerSetpointMW property to set laser power in mW, provided a suitable laser power calibration is loaded onto the EEPROM.
Implements WasatchNET.ISpectrometer.
Reimplemented in WasatchNET.BoulderSpectrometer, WasatchNET.MockSpectrometer, and WasatchNET.SPISpectrometer.
|
inlineprivate |
|
inlineprivate |
Although most values read from the spectrometer are little-endian by design, a few are big-endian.
| raw | input value in one endian |
|
inline |
|
inlineprivate |
|
inlineprivate |
|
private |
|
protected |
|
protected |
synchronizes getSpectrum, integrationTimeMS, scanAveraging, dark and boxcarHalfWidth
| int WasatchNET.Spectrometer.acquisitionMaxRetries = 2 |
If a call to Spectrometer.getSpectrum() fails, how many internal (within WasatchNET) retries should be attempted (includes re-sending an ACQUIRE opcode).
|
private |
|
protected |
|
protected |
|
private |
|
private |
|
private |
|
private |
|
protected |
|
package |
|
private |
synchronizes getCmd, getCmd2, sendCmd
|
private |
|
private |
|
protected |
|
protected |
| int WasatchNET.Spectrometer.delayAfterBulkEndpointErrorMS = 100 |
If there is an error reading one of the bulk endpoints, pause this many milliseconds in hopes of the bus resetting itself (does not automatically retry).
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
protected |
|
protected |
|
protected |
|
private |
|
private |
|
static |
|
private |
| bool WasatchNET.Spectrometer.fastAreaScan = false |
|
private |
|
private |
|
private |
|
private |
|
private |
|
static |
|
protected |
|
protected |
|
protected |
|
protected |
|
private |
|
private |
|
private |
|
protected |
|
private |
|
protected |
|
protected |
|
protected |
| float WasatchNET.Spectrometer.lastDetectorTemperatureDegC = UNINITIALIZED_TEMPERATURE_DEG_C |
A cached value of the last-measured detector temperature. This is automatically updated following spectral reads if readTemperatureAfterSpectrum is set.
|
private |
|
static |
for Stroker Area Scan
|
private |
|
protected |
| int WasatchNET.Spectrometer.multiChannelPosition = -1 |
If the spectrometer is deployed in a multi-channel configuration, this provides a place to store an integral position in the Spectrometer object. (defaults to -1, an invalid position)
This may be populated from EEPROM.UserText or other sources. This value is not used by anything except MultiChannelWrapper and end-user code.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
staticprivate |
| bool WasatchNET.Spectrometer.readTemperatureAfterSpectrum = false |
If enabled, Wasatch.NET will automatically read the detector temperature following every successful call to getSpectrum(). That temperature can then be read from lastDetectorTemperatureDegC, without inducing any spectrometer communications.
Many customer applications wish to monitor detector temperature. However, attempting to read temperature asynchronously from the spectrometer over USB can complicate timing in the midst of acquisitions. This provides a controlled process to obtain fairly- current temperature without adding interrupts to the USB communciation cycle. (It's also very similar to what ENLIGHTEN does)
|
protected |
|
protected |
|
private |
|
private |
|
package |
|
private |
|
private |
|
static |
|
private |
|
private |
|
private |
|
protected |
|
static |
|
package |
|
private |
|
private |
|
private |
|
private |
|
getset |
Determines whether or not the Gen1.5 accessory connector's features can be used.
<todo> Cache getter and use actual command once implemented...for now it only exists in software </todo>
Implements WasatchNET.ISpectrometer.
|
getprotected set |
Allows application to track how many ACQUIRE_SPECTRUM commands have been sent to the spectrometer (including throwaways and retries).
|
getset |
Convenience accessor to set an explicit acquisition timeout.
|
set |
Allows the NEXT acquisition timeout to be set relative to "now" as an offiset in milliseconds.
|
getset |
Allows the NEXT acquisition timeout to be set to an explicit objective future timestamp.
|
get |
How many frames have been read since last power cycle (has overflow)
Implements WasatchNET.ISpectrometer.
|
get |
Return integration time + clock-out time (and laser pulse time if externally triggered).
Implements WasatchNET.ISpectrometer.
|
getprotected |
<warning> The photodiode (calling this as secondary ADC) should NOT swap the byte order! Does laserTemperatureRaw require the byte order to be swapped?!? </warning>
protected because caller should access via primaryADC or secondaryADC
|
getset |
Configure detector for 2D image mode.
Not supported on all spectrometers.
Wasatch spectrometers normally "vertically bins" pixel columns on the detector, outputting the spectrum as a one-dimensional array of intensities by pixel.
For production alignment, an "area scan" imaging mode is provided to output each row on the detector as a separate line, so client software can reconstruct a 2D image of the light patterns spread across the detector. In this mode, the intensity value of the first pixel of each line is overwritten by the row index, to ensure the 2D image is received and displayed correctly.
Implements WasatchNET.ISpectrometer.
|
getset |
Whether the driver should automatically send a software trigger on calls to getSpectrum() when triggerSource is set to INTERNAL. (defaults true)
This is provided in case the caller wishes to call sendSWTrigger() explicitly, for instance to send software triggers to a series of devices at once, before beginning reads on any of them.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
getset |
Perform post-acquisition high-frequency smoothing by averaging together "n" pixels to either side of each acquired pixel; zero to disable (default).
Implements WasatchNET.ISpectrometer.
|
getset |
After the first trigger is received, no further triggers are required; spectrometer will enter free-running mode.
Implements WasatchNET.ISpectrometer.
|
getset |
When not using "continous acquisitions" with external triggers, how many spectra to acquire per trigger event.
Implements WasatchNET.ISpectrometer.
|
getset |
Perform automatic dark subtraction by setting this property to an acquired dark spectrum; leave "null" to disable.
Implements WasatchNET.ISpectrometer.
|
getset |
Maps to an FPGA register inside the spectrometer used to scale pixels read from the ADC to optimize dynamic range.
Not normally changed by customer code. Values are normally read from the EEPROM and written back to the spectrometer's FPGA by the driver at initialization.
Altering this value may degrade spectrometer performance.
Implements WasatchNET.ISpectrometer.
|
getset |
(InGaAs-only) Companion property to detectorGain, which on InGaAs detectors applies only to even-numbered pixels.
Implements WasatchNET.ISpectrometer.
|
getset |
Maps to an FPGA register inside the spectrometer used to offset the pixels (dark baseline) read from the ADC to optimize dynamic range.
Not normally changed by customer code. Values are normally read from the EEPROM and written back to the spectrometer's FPGA by the driver at initialization.
Altering this value may degrade spectrometer performance.
Implements WasatchNET.ISpectrometer.
|
getset |
(InGaAs-only) Companion property to detectorOffset, which on InGaAs detectors applies only to even-numbered pixels.
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
|
getset |
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Caches results so it won't query the spectrometer faster than 1Hz
Implements WasatchNET.ISpectrometer.
|
getprotected set |
configuration settings stored in the spectrometer's EEPROM
Implements WasatchNET.ISpectrometer.
|
getset |
Whether an ERROR should be logged on a timeout event (default true)
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
metadata inferred from the spectrometer's USB PID
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
getprivate set |
set of compilation options used to compile the FPGA firmware in this spectrometer
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
getprotected set |
|
get |
Implements WasatchNET.ISpectrometer.
|
getset |
Some spectrometers send a start-of-frame marker in the first pixel of the spectrum.
|
getset |
This should be replaced with an FGPACompilationFlag or EEPROM field at some point.
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
|
get |
couples serial number with channel position
|
getset |
Current integration time in milliseconds.
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Whether the spectrometer uses a "Gen 1.5" accessory connector.
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
getprotected set |
Optical Coherence Tomography (OCT) spectrometers differ from "standard" spectrometers in several respects, such as producing both 2D and 3D imagery.
|
get |
Implements WasatchNET.ISpectrometer.
|
getprotected set |
Whether the spectrometer uses Serial Peripheral Interface (as opposed to USB for instance).
Implements WasatchNET.ISpectrometer.
|
getprotected set |
Stroker is a legacy board firmware with older PID (not 0x1000, 0x2000 or 0x4000), doesn't conform to Feature Identification Device (FID) Protocol, and lacking an EEPROM.
|
getset |
Whether the lamp attached via Gen 1.5 attachment has been requested to be turned on by the software and firmware.
Implements WasatchNET.ISpectrometer.
|
getset |
Whether the laser has been REQUESTED TO FIRE by the software and firmware.
Implements WasatchNET.ISpectrometer.
|
get |
Whether the laser is ACTUALLY FIRING, according to the laser driver and laser interlock board.
Requires FeatureMask.HAS_INTERLOCK_FEEDBACK.
Implements WasatchNET.ISpectrometer.
|
get |
True if the laser can fire (interlock circuit is CLOSED), false if the laser cannot fire (interlock circuit is OPEN).
Requires FeatureMask.HAS_INTERLOCK_FEEDBACK.
Implements WasatchNET.ISpectrometer.
|
getset |
If you only want the laser to be modulated for a portion of each acquisition (rare), how long in microseconds should the laser be modulated during each integration.
Value is in microseconds, range 40bit.
It is unclear from documentation if, at the end of this duration, the LASER turns off (zero power), or MODULATION turns off (i.e. reverts to full power).
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
When defining the laser modulation duty cycle, the length (period) of the duty cycle in microsec.
Warning: Laser modulation commands are normally internally set by the function setLaserPowerPercentage().
Value is in microseconds, range 40bit.</remarks>
Implements WasatchNET.ISpectrometer.
|
getset |
If you want the laser modulation to start part-way through an acquisition, this defines the delay in microseconds from the beginning of the integration until laser modulation begins.
Warning: Laser modulation commands are normally internally set by the function setLaserPowerPercentage().
Value is in microseconds, range 40bit.
It is unclear from documentation whether MODULATION starts after the given delay, or the LASER is enabled after the delay.
Implements WasatchNET.ISpectrometer.
|
getset |
When defining the laser modulation duty cycle, the length (width) of the period during which the laser is enabled.
Warning: Laser modulation commands are normally internally set by the function setLaserPowerPercentage().
Value is in microseconds, range 40bit.
Example: if period was 100us, and pulseWidth was 20us, then the laser would fire 1/5 of the time and therefore operating
at 20% power.
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Use this to set the laser output power in milliWatts.
You should only attempt to set this property if you have already verified EEPROM.hasLaserPowerCalibration().
You should only attempt to read this property AFTER setting a value; the getter simply returns the most recently successfully set setpoint.
Setting this property will yield undefined results if no laser power calibration is provided in the spectrometer, but never outside the physical PWM duty cycle bounds (0, 100%).
EEPROM.hasLaserPowerCalibration
|
getset |
disabled to deconflict area scan
Implements WasatchNET.ISpectrometer.
|
get |
convert the raw laser temperature reading into degrees centigrade
https://www.ipslasers.com/data-sheets/SM-TO-56-Data-Sheet-IPS.pdf
Laser temperature conversion doesn't use EEPROM coeffs at all. Most Wasatch Raman systems use an IPS Wavelength-Stabilized TO-56 laser, which internally uses a Betatherm 10K3CG3 thermistor.
The official conversion from thermistor resistance (in ohms) to degC is:
1 / ( C1
273.15
Where: C1 = 0.00113 C2 = 0.000234 C3 = 8.78e-8
Early Dash / ENLIGHTEN implementations used a simpler curve-fit which yielded nearly identical performance.
Implements WasatchNET.ISpectrometer.
|
get |
|
getset |
FACTORY ONLY.
WARNING: raising this value above 63 will "increase temperature AND volatility", while lowering this value below 63 will "decrease temperature WHILE increasing volatility".
During factory turning of the potentiometer on the laser driver controller board, this function is used to temporarily offset the TEC DAC setpoint from its default power-up value of 63.
End-users should not adjust this value at runtime, as the potentiometer has already been locked-down at a point optimized for laser power stability over temperature; any changes to this value from the default value of 63 will only increase the chances of power instability, including mode-hopping and hysteresis effects.
See RamanSpecCal's LaserTemperatureTest documentation for additional information.
Note that input values will automatically be capped at 7-bit (0, 127), the operative range of the laser TEC DAC.
Also note that although this property includes the word "temperature" because the setpoint relates to and will change the laser's central temperature, you cannot set a specific temperature setpoint in degC, as the final temperature is generated in hardware as a combination of the DAC setpoint value and the physical potentiometer.
Implements WasatchNET.ISpectrometer.
|
getprotected set |
Useful if you lost the results of getSpectrum, or if you want to peek into ongoing multi-acquisition tasks like scan averaging or optimization.
|
get |
Implements WasatchNET.ISpectrometer.
|
getprotected set |
|
get |
spectrometer model
Implements WasatchNET.ISpectrometer.
|
getset |
Multichannel convenience accessor (default false)
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Whether area scan mode is supported.
Implements WasatchNET.ISpectrometer.
|
get |
Internal firmware name for the highGainModeEnabled feature available on InGaAs detectors.
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
get |
convenience accesor for pixel axis (lazy-loaded), for parallelism with wavelengths and wavenumbers
|
getprotected set |
how many pixels does the spectrometer have (spectrum length)
Implements WasatchNET.ISpectrometer.
|
get |
Implements WasatchNET.ISpectrometer.
|
getset |
Whether to correct the y-axis using SRM-derived correction factors, stored as coefficients on the spectrometer.
This y-axis correction is only considered to be valid for raman spectrometers.
If a user plans on using dark correction, the dark should be collected BEFORE raman correction is enabled, and if the dark needs to be retaken, the correction should be toggled around the collection.
So, the general flow for dark and y-axis corrected sample collection should be as follows: Take Dark -> Enable Correction -> Take Raman Sample(s) -> Disable Correction -> Take Dark -> Repeat
Implements WasatchNET.ISpectrometer.
|
getset |
Simplify reference-based techniques (absorbance, reflectance, transmission etc) by allowing a reference to be stored with the Spectrometer, similar to dark.
Unlike dark, which will be automatically subtracted from Raw to form Processed, no automatic processing is performed with the Reference, as different techniques use it differently. This is a convenience attribute for application programmers.
|
getset |
How many acquisitions to average together (0 or 1 for no averaging). (default 1)
Note that while SW triggering supports 2^16 scans to average, HW triggering (necessarily using continuousFrames) is limited to 255.
Implements WasatchNET.ISpectrometer.
|
getset |
Whether the "scanAveraging" property should automatically configure continuousAcquisitionEnable and continuousFrames. (default false)
EXPERIMENTAL – NOT RECOMMENDED FOR PRODUCTION APPLICATIONS.
Setting false will automatically reset continuousAcquisitionEnable and continuousFrames to default (off) values.
|
get |
This is provided for spectrometers with a secondary ADC connected to an external laser, photodiode or what-have-you. Attempts to read it on spectrometers where it has not been configured can result in indeterminate behavior; therefore, hasSecondaryADC is provided to allow callers to selectively enable this function if they believe they are using supported hardware.
Implements WasatchNET.ISpectrometer.
|
getsetprotected |
|
get |
spectrometer serial number
Implements WasatchNET.ISpectrometer.
|
getprivate set |
For spectrometer firmware providing "start of spectrum markers", provides a count of how many INCORRECT markers were found in the MOST RECENT spectrum.
|
getprotected set |
Allows application to track how many successful (non-null) calls have been made to getSpectrum (whether averaged or otherwise).
|
getsetprivate |
Whether the driver should automatically perform a throwaway ADC read when changing the selected ADC. (defaults true)
|
getset |
Whether the driver should automatically generate a throwaway "stability" measurement after changing integration time. (defaults false)
<todo> Change such that only used if the trigger source is internal (SW-triggered) and autoTrigger is enabled (both the default). </todo>
|
getset |
A configurable delay from when an inbound trigger signal is received by the spectrometer, until the triggered acquisition actually starts.
Default value is 0us.
Unit is in 0.5 microseconds (500ns), so value of 25 would represent 12.5us.
Value is 24bit, so max value is 16777216 (8.388608 sec).
As part of triggering, only currently supported on ARM.
Implements WasatchNET.ISpectrometer.
|
getset |
Implements WasatchNET.ISpectrometer.
|
getset |
Whether acquisitions are triggered "internally" (via the ACQUIRE opcode sent by software) or "externally" (via an electrical signal wired to the accessory connector).
Implements WasatchNET.ISpectrometer.
|
getset |
|
getset |
Untethered operation requires an argument to ACQUIRE, and polls before reading spectrum.
|
getset |
Whether to synchronize all spectral reads with a class-level (static) mutex.
This doesn't include the sending of ACQUIRE software triggers, just the bulk readouts over Ep2 and Ep6. As USB is fundamentally serial, this probably doesn't change behavior much, but it will ensure whole whole spectra are transferred atomically, even when spanning endpoints.
This is a developmental test feature, and not intended for production applications.
|
getprotected set |
pre-populated array of wavelengths (nm) by pixel, generated from eeprom.wavecalCoeffs
see Util.generateWavelengths
Implements WasatchNET.ISpectrometer.
|
getprotected set |
pre-populated array of Raman shifts in wavenumber (1/cm) by pixel, generated from wavelengths[] and excitationNM
see Util.wavelengthsToWavenumbers
Implements WasatchNET.ISpectrometer.