From f0ecbb871066df76cc5fe7be00d6917c07755d0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BB=BB=E7=AB=8B=E6=96=B0?=
Date: Wed, 12 Jan 2022 14:30:11 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=BD=8D=E7=BD=AE?=
=?UTF-8?q?=E5=AE=9A=E6=A0=87=E7=A8=8B=E5=BA=8F=20=E5=8F=8A=E4=BD=8D?=
=?UTF-8?q?=E7=BD=AE=E7=A7=BB=E5=8A=A8=E7=9B=B8=E5=85=B3=E7=A8=8B=E5=BA=8F?=
=?UTF-8?q?=E6=BA=90=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
html/config/calibrate.php | 45 +
html/config/location.php | 48 +
html/config/position.html | 15 +
othersoft/install.sh | 15 +
othersoft/movingliner/CMakeLists.txt | 32 +
othersoft/movingliner/DeviceSettings.ini | 27 +
othersoft/movingliner/main.cpp | 52 +
.../source/LinearShutter/AbstractPort.h | 16 +
.../source/LinearShutter/VSMD12XControl.cpp | 1416 ++++++++++
.../source/LinearShutter/VSMD12XControl.h | 146 +
.../source/LinearShutter/VSMD12XMiscDefines.h | 108 +
.../source/LinearShutter/ZZ_SeiralPort.cpp | 147 +
.../source/LinearShutter/ZZ_SeiralPort.h | 26 +
.../source/LinearShutter/ZZ_Types.h | 297 ++
.../movingliner/source/LinearShutter/pch.h | 28 +
.../source/Settings/SystemConfigger.cpp | 191 ++
.../source/Settings/SystemConfigger.h | 57 +
.../project/LocationCali/CMakeLists.txt | 46 +
.../project/LocationCali/SeaBreeze.dll | Bin 0 -> 2670080 bytes
.../project/LocationCali/SeaBreeze.lib | Bin 0 -> 129806 bytes
.../shuttercali/project/LocationCali/main.cpp | 202 ++
.../source/FS/ATPControl_Serial_QT.cpp | 591 ++++
.../source/FS/ATPControl_Serial_QT.h | 84 +
.../source/FS/ATPDataFileProcessor.cpp | 0
.../source/FS/ATPDataFileProcessor.h | 1 +
.../source/FS/IrisFiberSpectrometerBase.h | 42 +
othersoft/shuttercali/source/FS/ZZ_Types.h | 297 ++
.../source/LinearShutter/AbstractPort.h | 16 +
.../source/LinearShutter/VSMD12XControl.cpp | 1415 ++++++++++
.../source/LinearShutter/VSMD12XControl.h | 146 +
.../source/LinearShutter/VSMD12XMiscDefines.h | 108 +
.../source/LinearShutter/ZZ_SeiralPort.cpp | 147 +
.../source/LinearShutter/ZZ_SeiralPort.h | 26 +
.../shuttercali/source/LinearShutter/pch.h | 28 +
othersoft/shuttercali/source/Logger/Logger.h | 90 +
.../source/OSIF/DLib/SeaBreeze.dll | Bin 0 -> 2670080 bytes
.../source/OSIF/DLib/SeaBreeze.lib | Bin 0 -> 129806 bytes
.../source/OSIF/include/api/DeviceFactory.h | 63 +
.../source/OSIF/include/api/DllDecl.h | 56 +
.../OSIF/include/api/SeaBreezeWrapper.h | 864 ++++++
.../AcquisitionDelayFeatureAdapter.h | 63 +
.../ContinuousStrobeFeatureAdapter.h | 56 +
.../seabreezeapi/DataBufferFeatureAdapter.h | 63 +
.../include/api/seabreezeapi/DeviceAdapter.h | 308 ++
.../api/seabreezeapi/EEPROMFeatureAdapter.h | 57 +
.../seabreezeapi/FeatureAdapterInterface.h | 57 +
.../api/seabreezeapi/FeatureAdapterTemplate.h | 87 +
.../api/seabreezeapi/FeatureFamilies.h | 200 ++
.../api/seabreezeapi/IrradCalFeatureAdapter.h | 62 +
.../seabreezeapi/LightSourceFeatureAdapter.h | 69 +
.../NonlinearityCoeffsFeatureAdapter.h | 57 +
.../seabreezeapi/OpticalBenchFeatureAdapter.h | 62 +
.../seabreezeapi/PixelBinningFeatureAdapter.h | 68 +
.../api/seabreezeapi/ProtocolFamilies.h | 87 +
.../RawUSBBusAccessFeatureAdapter.h | 57 +
.../api/seabreezeapi/RevisionFeatureAdapter.h | 58 +
.../include/api/seabreezeapi/SeaBreezeAPI.h | 2481 +++++++++++++++++
.../api/seabreezeapi/SeaBreezeAPIConstants.h | 55 +
.../seabreezeapi/SerialNumberFeatureAdapter.h | 58 +
.../api/seabreezeapi/ShutterFeatureAdapter.h | 56 +
.../seabreezeapi/SpectrometerFeatureAdapter.h | 74 +
.../SpectrumProcessingFeatureAdapter.h | 60 +
.../StrayLightCoeffsFeatureAdapter.h | 57 +
.../seabreezeapi/StrobeLampFeatureAdapter.h | 56 +
.../seabreezeapi/TemperatureFeatureAdapter.h | 58 +
.../ThermoElectricCoolerFeatureAdapter.h | 61 +
.../source/OSIF/include/common/ByteVector.h | 63 +
.../source/OSIF/include/common/Data.h | 62 +
.../source/OSIF/include/common/DoubleVector.h | 62 +
.../source/OSIF/include/common/FloatVector.h | 62 +
.../source/OSIF/include/common/Log.h | 132 +
.../source/OSIF/include/common/SeaBreeze.h | 45 +
.../source/OSIF/include/common/U32Vector.h | 77 +
.../source/OSIF/include/common/UShortVector.h | 64 +
.../OSIF/include/common/UnitDescriptor.h | 46 +
.../source/OSIF/include/common/buses/Bus.h | 66 +
.../OSIF/include/common/buses/BusFamilies.h | 86 +
.../OSIF/include/common/buses/BusFamily.h | 54 +
.../buses/DeviceLocationProberInterface.h | 58 +
.../common/buses/DeviceLocatorInterface.h | 82 +
.../include/common/buses/TransferHelper.h | 58 +
.../buses/network/IPv4NetworkProtocol.h | 75 +
.../buses/network/IPv4SocketDeviceLocator.h | 66 +
.../common/buses/network/TCPIPv4SocketBus.h | 75 +
.../network/TCPIPv4SocketTransferHelper.h | 52 +
.../common/buses/rs232/RS232DeviceLocator.h | 65 +
.../common/buses/rs232/RS232Interface.h | 63 +
.../common/buses/rs232/RS232TransferHelper.h | 65 +
.../common/buses/usb/USBDeviceLocator.h | 59 +
.../include/common/buses/usb/USBInterface.h | 64 +
.../common/buses/usb/USBTransferHelper.h | 66 +
.../OSIF/include/common/devices/Device.h | 129 +
.../common/exceptions/BusConnectException.h | 49 +
.../include/common/exceptions/BusException.h | 50 +
.../common/exceptions/BusTransferException.h | 48 +
.../exceptions/FeatureControlException.h | 47 +
.../common/exceptions/FeatureException.h | 50 +
.../FeatureProtocolNotFoundException.h | 48 +
.../exceptions/IllegalArgumentException.h | 50 +
.../common/exceptions/NumberFormatException.h | 49 +
.../exceptions/ProtocolBusMismatchException.h | 49 +
.../common/exceptions/ProtocolException.h | 51 +
.../exceptions/ProtocolFormatException.h | 50 +
.../exceptions/ProtocolTransactionException.h | 51 +
.../OSIF/include/common/features/Feature.h | 71 +
.../include/common/features/FeatureFamily.h | 56 +
.../include/common/features/FeatureImpl.h | 88 +
.../source/OSIF/include/common/globals.h | 65 +
.../OSIF/include/common/protocols/Exchange.h | 59 +
.../OSIF/include/common/protocols/Protocol.h | 62 +
.../include/common/protocols/ProtocolFamily.h | 55 +
.../include/common/protocols/ProtocolHelper.h | 60 +
.../include/common/protocols/ProtocolHint.h | 73 +
.../include/common/protocols/Transaction.h | 82 +
.../OSIF/include/common/protocols/Transfer.h | 93 +
.../include/native/network/Inet4Address.h | 62 +
.../OSIF/include/native/network/Socket.h | 80 +
.../include/native/network/SocketException.h | 44 +
.../native/network/SocketTimeoutException.h | 45 +
.../native/network/UnknownHostException.h | 44 +
.../native/network/posix/NativeSocketPOSIX.h | 71 +
.../network/windows/NativeSocketWindows.h | 73 +
.../OSIF/include/native/rs232/NativeRS232.h | 61 +
.../source/OSIF/include/native/rs232/RS232.h | 66 +
.../native/rs232/windows/NativeRS232Windows.h | 55 +
.../OSIF/include/native/system/NativeSystem.h | 53 +
.../OSIF/include/native/system/System.h | 51 +
.../OSIF/include/native/usb/NativeUSB.h | 226 ++
.../source/OSIF/include/native/usb/USB.h | 84 +
.../OSIF/include/native/usb/USBDiscovery.h | 64 +
.../include/native/usb/winusb/WindowsGUID.h | 47 +
.../OceanOptics/buses/network/BlazeTCPIPv4.h | 46 +
.../OceanOptics/buses/network/JazTCPIPv4.h | 47 +
.../buses/rs232/OOIRS232Interface.h | 59 +
.../vendors/OceanOptics/buses/usb/ApexUSB.h | 48 +
.../vendors/OceanOptics/buses/usb/BlazeUSB.h | 48 +
.../buses/usb/BlazeUSBTransferHelper.h | 61 +
.../OceanOptics/buses/usb/FlameNIRUSB.h | 47 +
.../OceanOptics/buses/usb/HR2000PlusUSB.h | 49 +
.../vendors/OceanOptics/buses/usb/HR2000USB.h | 48 +
.../vendors/OceanOptics/buses/usb/HR4000USB.h | 48 +
.../vendors/OceanOptics/buses/usb/JazUSB.h | 48 +
.../OceanOptics/buses/usb/Maya2000ProUSB.h | 48 +
.../OceanOptics/buses/usb/Maya2000USB.h | 48 +
.../OceanOptics/buses/usb/MayaLSLUSB.h | 48 +
.../OceanOptics/buses/usb/NIRQuest256USB.h | 48 +
.../OceanOptics/buses/usb/NIRQuest512USB.h | 48 +
.../usb/OOIUSB4KSpectrumTransferHelper.h | 61 +
.../buses/usb/OOIUSBControlTransferHelper.h | 47 +
.../buses/usb/OOIUSBEndpointMaps.h | 123 +
.../OceanOptics/buses/usb/OOIUSBInterface.h | 76 +
.../OceanOptics/buses/usb/OOIUSBProductID.h | 56 +
.../buses/usb/OOIUSBSpectrumTransferHelper.h | 47 +
.../buses/usb/OOIUSBTrivialTransferHelper.h | 46 +
.../OceanOptics/buses/usb/QE65000USB.h | 48 +
.../vendors/OceanOptics/buses/usb/QEProUSB.h | 48 +
.../vendors/OceanOptics/buses/usb/STSUSB.h | 48 +
.../vendors/OceanOptics/buses/usb/SparkUSB.h | 48 +
.../vendors/OceanOptics/buses/usb/TorusUSB.h | 48 +
.../OceanOptics/buses/usb/USB2000PlusUSB.h | 48 +
.../OceanOptics/buses/usb/USB2000USB.h | 48 +
.../OceanOptics/buses/usb/USB4000USB.h | 48 +
.../OceanOptics/buses/usb/VentanaUSB.h | 48 +
.../vendors/OceanOptics/devices/Apex.h | 48 +
.../vendors/OceanOptics/devices/Blaze.h | 48 +
.../vendors/OceanOptics/devices/FlameNIR.h | 47 +
.../vendors/OceanOptics/devices/HR2000.h | 49 +
.../vendors/OceanOptics/devices/HR2000Plus.h | 48 +
.../vendors/OceanOptics/devices/HR4000.h | 48 +
.../include/vendors/OceanOptics/devices/Jaz.h | 48 +
.../vendors/OceanOptics/devices/Maya2000.h | 48 +
.../vendors/OceanOptics/devices/Maya2000Pro.h | 48 +
.../vendors/OceanOptics/devices/MayaLSL.h | 48 +
.../vendors/OceanOptics/devices/NIRQuest256.h | 48 +
.../vendors/OceanOptics/devices/NIRQuest512.h | 48 +
.../vendors/OceanOptics/devices/QE65000.h | 48 +
.../vendors/OceanOptics/devices/QEPro.h | 48 +
.../include/vendors/OceanOptics/devices/STS.h | 48 +
.../vendors/OceanOptics/devices/Spark.h | 48 +
.../vendors/OceanOptics/devices/Torus.h | 48 +
.../vendors/OceanOptics/devices/USB2000.h | 48 +
.../vendors/OceanOptics/devices/USB2000Plus.h | 48 +
.../vendors/OceanOptics/devices/USB4000.h | 48 +
.../vendors/OceanOptics/devices/Ventana.h | 53 +
.../AcquisitionDelayFeature.h | 81 +
.../AcquisitionDelayFeatureInterface.h | 67 +
.../AcquisitionDelayFeature_FPGA.h | 79 +
.../STSAcquisitionDelayFeature.h | 60 +
.../ContinuousStrobeFeature.h | 59 +
.../ContinuousStrobeFeatureInterface.h | 55 +
.../ContinuousStrobeFeature_FPGA.h | 59 +
.../data_buffer/DataBufferFeatureBase.h | 80 +
.../data_buffer/DataBufferFeatureInterface.h | 75 +
.../data_buffer/QEProDataBufferFeature.h | 49 +
.../features/eeprom_slots/EEPROMSlotFeature.h | 62 +
.../eeprom_slots/EEPROMSlotFeatureBase.h | 75 +
.../eeprom_slots/EEPROMSlotFeatureInterface.h | 60 +
.../NonlinearityEEPROMSlotFeature.h | 55 +
.../SaturationEEPROMSlotFeature.h | 59 +
.../SaturationEEPROMSlotFeatureBase.h | 67 +
.../SaturationEEPROMSlotFeature_MayaPro.h | 57 +
.../SaturationEEPROMSlotFeature_NIRQuest.h | 57 +
.../SerialNumberEEPROMSlotFeature.h | 55 +
.../StrayLightEEPROMSlotFeature.h | 55 +
.../WavelengthEEPROMSlotFeature.h | 61 +
.../WavelengthEEPROMSlotFeature_QE65000.h | 54 +
.../fpga_register/FPGARegisterFeature.h | 57 +
.../FPGARegisterFeatureInterface.h | 53 +
.../features/irradcal/IrradCalFeature.h | 71 +
.../irradcal/IrradCalFeatureInterface.h | 62 +
.../light_source/LightSourceFeatureBase.h | 76 +
.../light_source/LightSourceFeatureImpl.h | 57 +
.../LightSourceFeatureInterface.h | 72 +
.../features/light_source/StrobeLampFeature.h | 55 +
.../light_source/StrobeLampFeatureInterface.h | 51 +
.../light_source/VentanaLightSourceFeature.h | 49 +
.../nonlinearity/NonlinearityCoeffsFeature.h | 57 +
.../NonlinearityCoeffsFeatureInterface.h | 50 +
.../optical_bench/OpticalBenchFeature.h | 70 +
.../OpticalBenchFeatureInterface.h | 62 +
.../PixelBinningFeatureInterface.h | 61 +
.../pixel_binning/STSPixelBinningFeature.h | 89 +
.../raw_bus_access/RawUSBBusAccessFeature.h | 55 +
.../RawUSBBusAccessFeatureInterface.h | 52 +
.../features/revision/RevisionFeature.h | 59 +
.../revision/RevisionFeatureInterface.h | 52 +
.../serial_number/SerialNumberFeature.h | 58 +
.../SerialNumberFeatureInterface.h | 53 +
.../features/shutter/ShutterFeature.h | 56 +
.../shutter/ShutterFeatureInterface.h | 50 +
.../spectrometer/ApexSpectrometerFeature.h | 52 +
.../spectrometer/BlazeSpectrometerFeature.h | 56 +
.../FlameNIRSpectrometerFeature.h | 53 +
.../GainAdjustedSpectrometerFeature.h | 56 +
.../HR2000PlusSpectrometerFeature.h | 51 +
.../spectrometer/HR2000SpectrometerFeature.h | 51 +
.../spectrometer/HR4000SpectrometerFeature.h | 51 +
.../spectrometer/JazSpectrometerFeature.h | 52 +
.../Maya2000ProSpectrometerFeature.h | 53 +
.../Maya2000SpectrometerFeature.h | 51 +
.../spectrometer/MayaLSLSpectrometerFeature.h | 52 +
.../NIRQuest256SpectrometerFeature.h | 46 +
.../NIRQuest512SpectrometerFeature.h | 46 +
.../NIRQuestSpectrometerFeature.h | 54 +
.../spectrometer/OOISpectrometerFeature.h | 111 +
.../OOISpectrometerFeatureInterface.h | 95 +
.../ProgrammableSaturationFeature.h | 60 +
.../ProgrammableSaturationFeatureBase.h | 66 +
.../ProgrammableSaturationFeatureImpl.h | 61 +
.../ProgrammableSaturationFeatureInterface.h | 53 +
.../spectrometer/QE65000SpectrometerFeature.h | 57 +
.../spectrometer/QEProSpectrometerFeature.h | 55 +
.../spectrometer/STSSpectrometerFeature.h | 74 +
.../spectrometer/SparkSpectrometerFeature.h | 62 +
.../spectrometer/SpectrometerTriggerMode.h | 70 +
.../USB2000PlusSpectrometerFeature.h | 53 +
.../spectrometer/USB2000SpectrometerFeature.h | 51 +
.../spectrometer/USB4000SpectrometerFeature.h | 52 +
.../spectrometer/VentanaSpectrometerFeature.h | 55 +
.../SpectrumProcessingFeature.h | 68 +
.../SpectrumProcessingFeatureInterface.h | 59 +
.../stray_light/StrayLightCoeffsFeature.h | 57 +
.../StrayLightCoeffsFeatureInterface.h | 50 +
.../features/temperature/TemperatureFeature.h | 65 +
.../temperature/TemperatureFeatureInterface.h | 54 +
.../QEProThermoElectricFeature.h | 55 +
.../ThermoElectricFeatureBase.h | 84 +
.../ThermoElectricFeatureInterface.h | 64 +
.../thermoelectric/ThermoElectricQEFeature.h | 68 +
.../VentanaThermoElectricFeature.h | 63 +
.../features/wavecal/WaveCalFeature.h | 59 +
.../wavecal/WaveCalFeatureInterface.h | 50 +
.../AcquisitionDelayProtocolInterface.h | 64 +
.../ContinuousStrobeProtocolInterface.h | 58 +
.../interfaces/DataBufferProtocolInterface.h | 77 +
.../interfaces/EEPROMProtocolInterface.h | 63 +
.../FPGARegisterProtocolInterface.h | 62 +
.../interfaces/IrradCalProtocolInterface.h | 82 +
.../interfaces/LightSourceProtocolInterface.h | 95 +
.../NonlinearityCoeffsProtocolInterface.h | 61 +
.../OpticalBenchProtocolInterface.h | 73 +
.../PixelBinningProtocolInterface.h | 87 +
.../ProgrammableSaturationProtocolInterface.h | 50 +
.../interfaces/RevisionProtocolInterface.h | 65 +
.../SerialNumberProtocolInterface.h | 63 +
.../interfaces/ShutterProtocolInterface.h | 60 +
.../SpectrometerProtocolInterface.h | 64 +
.../SpectrumProcessingProtocolInterface.h | 67 +
.../StrayLightCoeffsProtocolInterface.h | 61 +
.../interfaces/StrobeLampProtocolInterface.h | 54 +
.../interfaces/TemperatureProtocolInterface.h | 65 +
.../ThermoElectricProtocolInterface.h | 73 +
.../interfaces/WaveCalProtocolInterface.h | 62 +
.../protocols/obp/constants/OBPMessageTypes.h | 166 ++
.../protocols/obp/exchanges/OBPCommand.h | 53 +
.../OBPContinuousStrobeEnableExchange.h | 46 +
.../OBPContinuousStrobePeriodExchange.h | 46 +
.../exchanges/OBPDataBufferClearExchange.h | 46 +
.../exchanges/OBPGetAllTemperaturesExchange.h | 45 +
.../obp/exchanges/OBPGetBoxcarWidthExchange.h | 45 +
.../OBPGetDataBufferCapacityExchange.h | 49 +
.../OBPGetDataBufferElementCountExchange.h | 49 +
.../OBPGetDataBufferMaximumCapacityExchange.h | 49 +
.../OBPGetDefaultPixelBinningExchange.h | 46 +
.../OBPGetFirmwareRevisionExchange.h | 45 +
.../OBPGetHardwareRevisionExchange.h | 45 +
.../obp/exchanges/OBPGetIrradCalExchange.h | 45 +
.../OBPGetIrradCollectionAreaExchange.h | 45 +
.../exchanges/OBPGetMaxPixelBinningExchange.h | 46 +
.../OBPGetNonlinearityCoeffExchange.h | 47 +
.../OBPGetNonlinearityCoeffsCountExchange.h | 45 +
.../OBPGetOpticalBenchCoatingExchange.h | 45 +
...OpticalBenchFiberDiameterMicronsExchange.h | 45 +
.../OBPGetOpticalBenchFilterExchange.h | 45 +
.../OBPGetOpticalBenchGratingExchange.h | 45 +
.../exchanges/OBPGetOpticalBenchIDExchange.h | 45 +
.../OBPGetOpticalBenchSerialNumberExchange.h | 45 +
...PGetOpticalBenchSlitWidthMicronsExchange.h | 45 +
.../exchanges/OBPGetPixelBinningExchange.h | 46 +
.../obp/exchanges/OBPGetSaturationExchange.h | 49 +
.../exchanges/OBPGetScansToAverageExchange.h | 45 +
.../exchanges/OBPGetSerialNumberExchange.h | 45 +
.../OBPGetSerialNumberMaximumLengthExchange.h | 45 +
.../exchanges/OBPGetStrayLightCoeffExchange.h | 47 +
.../OBPGetStrayLightCoeffsCountExchange.h | 45 +
.../OBPGetTemperatureCountExchange.h | 45 +
.../obp/exchanges/OBPGetTemperatureExchange.h | 47 +
.../OBPGetThermoElectricTemperatureExchange.h | 45 +
.../obp/exchanges/OBPGetWaveCalExchange.h | 48 +
.../exchanges/OBPIntegrationTimeExchange.h | 51 +
.../obp/exchanges/OBPLampEnableCommand.h | 50 +
.../exchanges/OBPLightSourceEnableCommand.h | 49 +
.../exchanges/OBPLightSourceEnabledQuery.h | 53 +
.../OBPLightSourceIntensityCommand.h | 50 +
.../exchanges/OBPLightSourceIntensityQuery.h | 53 +
.../protocols/obp/exchanges/OBPMessage.h | 105 +
.../protocols/obp/exchanges/OBPQuery.h | 53 +
.../OBPReadRawSpectrum32AndMetadataExchange.h | 59 +
.../exchanges/OBPReadRawSpectrumExchange.h | 55 +
.../OBPReadSpectrum32AndMetadataExchange.h | 54 +
.../obp/exchanges/OBPReadSpectrumExchange.h | 48 +
.../OBPReadSpectrumWithGainExchange.h | 53 +
...estBufferedSpectrum32AndMetadataExchange.h | 45 +
.../exchanges/OBPRequestRawSpectrumExchange.h | 45 +
.../exchanges/OBPRequestSpectrumExchange.h | 45 +
.../OBPSetAcquisitionDelayExchange.h | 50 +
.../obp/exchanges/OBPSetBoxcarWidthExchange.h | 46 +
.../OBPSetDataBufferCapacityExchange.h | 48 +
.../OBPSetDefaultPixelBinningExchange.h | 47 +
.../obp/exchanges/OBPSetIrradCalExchange.h | 46 +
.../OBPSetIrradCollectionAreaExchange.h | 46 +
.../exchanges/OBPSetPixelBinningExchange.h | 46 +
.../exchanges/OBPSetScansToAverageExchange.h | 46 +
.../OBPSetThermoElectricEnableExchange.h | 46 +
.../OBPSetThermoElectricSetpointExchange.h | 46 +
.../obp/exchanges/OBPShutterExchange.h | 46 +
.../protocols/obp/exchanges/OBPTransaction.h | 84 +
.../obp/exchanges/OBPTriggerModeExchange.h | 47 +
.../protocols/obp/hints/OBPControlHint.h | 45 +
.../protocols/obp/hints/OBPSpectrumHint.h | 45 +
.../obp/impls/OBPAcquisitionDelayProtocol.h | 51 +
.../obp/impls/OBPContinuousStrobeProtocol.h | 60 +
.../obp/impls/OBPDataBufferProtocol.h | 71 +
.../protocols/obp/impls/OBPIrradCalProtocol.h | 63 +
.../obp/impls/OBPLightSourceProtocol.h | 86 +
.../impls/OBPLightSourceProtocol_Ventana.h | 66 +
.../obp/impls/OBPNonlinearityCoeffsProtocol.h | 51 +
.../obp/impls/OBPOpticalBenchProtocol.h | 63 +
.../obp/impls/OBPPixelBinningProtocol.h | 84 +
.../impls/OBPProgrammableSaturationProtocol.h | 53 +
.../protocols/obp/impls/OBPRevisionProtocol.h | 54 +
.../obp/impls/OBPSerialNumberProtocol.h | 53 +
.../protocols/obp/impls/OBPShutterProtocol.h | 54 +
.../obp/impls/OBPSpectrometerProtocol.h | 79 +
.../obp/impls/OBPSpectrumProcessingProtocol.h | 57 +
.../obp/impls/OBPStrayLightCoeffsProtocol.h | 51 +
.../obp/impls/OBPStrobeLampProtocol.h | 51 +
.../obp/impls/OBPTemperatureProtocol.h | 56 +
.../obp/impls/OBPThermoElectricProtocol.h | 57 +
.../protocols/obp/impls/OBPWaveCalProtocol.h | 52 +
.../protocols/obp/impls/OceanBinaryProtocol.h | 51 +
.../ooi/constants/FPGARegisterCodes.h | 81 +
.../protocols/ooi/constants/OpCodes.h | 83 +
.../protocols/ooi/constants/QETECConstants.h | 36 +
.../ooi/exchanges/FPGARegisterReadExchange.h | 45 +
.../ooi/exchanges/FPGARegisterWriteExchange.h | 45 +
.../ooi/exchanges/FPGASpectrumExchange.h | 50 +
.../ooi/exchanges/FlameNIRSpectrumExchange.h | 59 +
.../ooi/exchanges/HRFPGASpectrumExchange.h | 50 +
.../ooi/exchanges/IntegrationTimeExchange.h | 54 +
.../ooi/exchanges/JazSpectrumExchange.h | 57 +
.../ooi/exchanges/MayaProSpectrumExchange.h | 58 +
.../ooi/exchanges/NIRQuestSpectrumExchange.h | 57 +
.../ooi/exchanges/OOI2KSpectrumExchange.h | 52 +
.../ooi/exchanges/OOIIrradCalExchange.h | 51 +
.../ooi/exchanges/OOIReadIrradCalExchange.h | 53 +
.../ooi/exchanges/OOIWriteIrradCalExchange.h | 54 +
.../ooi/exchanges/QESpectrumExchange.h | 50 +
.../ooi/exchanges/ReadEEPROMSlotExchange.h | 46 +
.../ooi/exchanges/ReadSpectrumExchange.h | 48 +
.../exchanges/ReadTECQETemperatureExchange.h | 49 +
.../exchanges/ReadTECTemperatureExchange.h | 45 +
.../ooi/exchanges/RequestSpectrumExchange.h | 45 +
.../ooi/exchanges/StrobeEnableExchange.h | 54 +
.../ooi/exchanges/TECEnableExchange.h | 52 +
.../ooi/exchanges/TECQEEnableExchange.h | 58 +
.../ooi/exchanges/TriggerModeExchange.h | 54 +
.../ooi/exchanges/USBFPGASpectrumExchange.h | 57 +
.../ooi/exchanges/WriteEEPROMSlotExchange.h | 43 +
.../exchanges/WriteTECQESetPointExchange.h | 58 +
.../ooi/exchanges/WriteTECSetPointExchange.h | 52 +
.../protocols/ooi/hints/ControlHint.h | 45 +
.../protocols/ooi/hints/SpectrumHint.h | 45 +
.../ooi/impls/FPGARegisterProtocol.h | 52 +
.../protocols/ooi/impls/OOIEEPROMProtocol.h | 53 +
.../protocols/ooi/impls/OOIIrradCalProtocol.h | 63 +
.../protocols/ooi/impls/OOIProtocol.h | 51 +
.../ooi/impls/OOISpectrometerProtocol.h | 79 +
.../ooi/impls/OOIStrobeLampProtocol.h | 55 +
.../protocols/ooi/impls/OOITECProtocol.h | 65 +
.../vendors/OceanOptics/utils/Polynomial.h | 111 +
.../source/Settings/SystemConfigger.cpp | 191 ++
.../source/Settings/SystemConfigger.h | 57 +
.../source/Thread/AbstractFSController.cpp | 74 +
.../source/Thread/AbstractFSController.h | 38 +
.../source/Thread/MainDataGrabber.cpp | 140 +
.../source/Thread/MainDataGrabber.h | 48 +
.../source/ZZ_SDK/ZZ_Math_HDRONLY.h | 84 +
othersoft/shuttercali/source/pch.h | 28 +
.../source_rlx/sensor/OptoSkyManager.cpp | 82 +
.../source_rlx/sensor/OptoSkyManager.h | 50 +
.../source_rlx/sensor/OptoSkyType.cpp | 204 ++
.../source_rlx/sensor/OptoSkyType.h | 77 +
.../source_rlx/sensor/OptoskyCommunicater.cpp | 0
.../source_rlx/sensor/SeaBreeze.dll | Bin 0 -> 2671104 bytes
.../source_rlx/sensor/SensorBase.cpp | 14 +
.../source_rlx/sensor/SensorBase.h | 132 +
.../source_rlx/sensor/SensorMannager.cpp | 238 ++
.../source_rlx/sensor/SensorMannager.h | 78 +
.../source_rlx/sensor/SensorOptoSky.cpp | 306 ++
.../source_rlx/sensor/SensorOptoSky.h | 81 +
.../source_rlx/sensor/SensorQExPRO.cpp | 327 +++
.../source_rlx/sensor/SensorQExPRO.h | 63 +
.../shuttercali/source_rlx/sensor/TCPServer.h | 301 ++
.../shuttercali/source_rlx/sensor/logout.cpp | 63 +
.../shuttercali/source_rlx/sensor/logout.h | 16 +
446 files changed, 34544 insertions(+)
create mode 100644 html/config/calibrate.php
create mode 100644 html/config/location.php
create mode 100644 html/config/position.html
create mode 100644 othersoft/install.sh
create mode 100644 othersoft/movingliner/CMakeLists.txt
create mode 100644 othersoft/movingliner/DeviceSettings.ini
create mode 100644 othersoft/movingliner/main.cpp
create mode 100644 othersoft/movingliner/source/LinearShutter/AbstractPort.h
create mode 100644 othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp
create mode 100644 othersoft/movingliner/source/LinearShutter/VSMD12XControl.h
create mode 100644 othersoft/movingliner/source/LinearShutter/VSMD12XMiscDefines.h
create mode 100644 othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.cpp
create mode 100644 othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.h
create mode 100644 othersoft/movingliner/source/LinearShutter/ZZ_Types.h
create mode 100644 othersoft/movingliner/source/LinearShutter/pch.h
create mode 100644 othersoft/movingliner/source/Settings/SystemConfigger.cpp
create mode 100644 othersoft/movingliner/source/Settings/SystemConfigger.h
create mode 100644 othersoft/shuttercali/project/LocationCali/CMakeLists.txt
create mode 100644 othersoft/shuttercali/project/LocationCali/SeaBreeze.dll
create mode 100644 othersoft/shuttercali/project/LocationCali/SeaBreeze.lib
create mode 100644 othersoft/shuttercali/project/LocationCali/main.cpp
create mode 100644 othersoft/shuttercali/source/FS/ATPControl_Serial_QT.cpp
create mode 100644 othersoft/shuttercali/source/FS/ATPControl_Serial_QT.h
create mode 100644 othersoft/shuttercali/source/FS/ATPDataFileProcessor.cpp
create mode 100644 othersoft/shuttercali/source/FS/ATPDataFileProcessor.h
create mode 100644 othersoft/shuttercali/source/FS/IrisFiberSpectrometerBase.h
create mode 100644 othersoft/shuttercali/source/FS/ZZ_Types.h
create mode 100644 othersoft/shuttercali/source/LinearShutter/AbstractPort.h
create mode 100644 othersoft/shuttercali/source/LinearShutter/VSMD12XControl.cpp
create mode 100644 othersoft/shuttercali/source/LinearShutter/VSMD12XControl.h
create mode 100644 othersoft/shuttercali/source/LinearShutter/VSMD12XMiscDefines.h
create mode 100644 othersoft/shuttercali/source/LinearShutter/ZZ_SeiralPort.cpp
create mode 100644 othersoft/shuttercali/source/LinearShutter/ZZ_SeiralPort.h
create mode 100644 othersoft/shuttercali/source/LinearShutter/pch.h
create mode 100644 othersoft/shuttercali/source/Logger/Logger.h
create mode 100644 othersoft/shuttercali/source/OSIF/DLib/SeaBreeze.dll
create mode 100644 othersoft/shuttercali/source/OSIF/DLib/SeaBreeze.lib
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/DeviceFactory.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/DllDecl.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/SeaBreezeWrapper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/AcquisitionDelayFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/ContinuousStrobeFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/DataBufferFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/DeviceAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/EEPROMFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/FeatureAdapterInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/FeatureAdapterTemplate.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/FeatureFamilies.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/IrradCalFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/LightSourceFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/NonlinearityCoeffsFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/OpticalBenchFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/PixelBinningFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/ProtocolFamilies.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/RawUSBBusAccessFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/RevisionFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/SeaBreezeAPI.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/SeaBreezeAPIConstants.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/SerialNumberFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/ShutterFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/SpectrometerFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/SpectrumProcessingFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/StrayLightCoeffsFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/StrobeLampFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/TemperatureFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/api/seabreezeapi/ThermoElectricCoolerFeatureAdapter.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/ByteVector.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/Data.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/DoubleVector.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/FloatVector.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/Log.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/SeaBreeze.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/U32Vector.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/UShortVector.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/UnitDescriptor.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/Bus.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/BusFamilies.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/BusFamily.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/DeviceLocationProberInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/DeviceLocatorInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/TransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/network/IPv4NetworkProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/network/IPv4SocketDeviceLocator.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/network/TCPIPv4SocketBus.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/network/TCPIPv4SocketTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/rs232/RS232DeviceLocator.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/rs232/RS232Interface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/rs232/RS232TransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/usb/USBDeviceLocator.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/usb/USBInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/buses/usb/USBTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/devices/Device.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/BusConnectException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/BusException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/BusTransferException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/FeatureControlException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/FeatureException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/FeatureProtocolNotFoundException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/IllegalArgumentException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/NumberFormatException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/ProtocolBusMismatchException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/ProtocolException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/ProtocolFormatException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/exceptions/ProtocolTransactionException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/features/Feature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/features/FeatureFamily.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/features/FeatureImpl.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/globals.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/Exchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/Protocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/ProtocolFamily.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/ProtocolHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/ProtocolHint.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/Transaction.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/common/protocols/Transfer.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/Inet4Address.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/Socket.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/SocketException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/SocketTimeoutException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/UnknownHostException.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/posix/NativeSocketPOSIX.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/network/windows/NativeSocketWindows.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/rs232/NativeRS232.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/rs232/RS232.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/rs232/windows/NativeRS232Windows.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/system/NativeSystem.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/system/System.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/usb/NativeUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/usb/USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/usb/USBDiscovery.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/native/usb/winusb/WindowsGUID.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/network/BlazeTCPIPv4.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/network/JazTCPIPv4.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/rs232/OOIRS232Interface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/ApexUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/BlazeUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/BlazeUSBTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/FlameNIRUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/HR2000PlusUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/HR2000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/HR4000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/JazUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/Maya2000ProUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/Maya2000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/MayaLSLUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/NIRQuest256USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/NIRQuest512USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSB4KSpectrumTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBControlTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBEndpointMaps.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBProductID.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBSpectrumTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/OOIUSBTrivialTransferHelper.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/QE65000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/QEProUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/STSUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/SparkUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/TorusUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/USB2000PlusUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/USB2000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/USB4000USB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/buses/usb/VentanaUSB.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Apex.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Blaze.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/FlameNIR.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/HR2000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/HR2000Plus.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/HR4000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Jaz.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Maya2000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Maya2000Pro.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/MayaLSL.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/NIRQuest256.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/NIRQuest512.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/QE65000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/QEPro.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/STS.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Spark.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Torus.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/USB2000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/USB2000Plus.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/USB4000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/devices/Ventana.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/acquisition_delay/AcquisitionDelayFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/acquisition_delay/AcquisitionDelayFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/acquisition_delay/AcquisitionDelayFeature_FPGA.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/acquisition_delay/STSAcquisitionDelayFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/continuous_strobe/ContinuousStrobeFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/continuous_strobe/ContinuousStrobeFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/continuous_strobe/ContinuousStrobeFeature_FPGA.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/data_buffer/DataBufferFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/data_buffer/DataBufferFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/data_buffer/QEProDataBufferFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/EEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/EEPROMSlotFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/EEPROMSlotFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/NonlinearityEEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/SaturationEEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/SaturationEEPROMSlotFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/SaturationEEPROMSlotFeature_MayaPro.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/SaturationEEPROMSlotFeature_NIRQuest.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/SerialNumberEEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/StrayLightEEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/WavelengthEEPROMSlotFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/eeprom_slots/WavelengthEEPROMSlotFeature_QE65000.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/fpga_register/FPGARegisterFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/fpga_register/FPGARegisterFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/irradcal/IrradCalFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/irradcal/IrradCalFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/LightSourceFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/LightSourceFeatureImpl.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/LightSourceFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/StrobeLampFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/StrobeLampFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/light_source/VentanaLightSourceFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/nonlinearity/NonlinearityCoeffsFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/nonlinearity/NonlinearityCoeffsFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/optical_bench/OpticalBenchFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/optical_bench/OpticalBenchFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/pixel_binning/PixelBinningFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/pixel_binning/STSPixelBinningFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/raw_bus_access/RawUSBBusAccessFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/raw_bus_access/RawUSBBusAccessFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/revision/RevisionFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/revision/RevisionFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/serial_number/SerialNumberFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/serial_number/SerialNumberFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/shutter/ShutterFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/shutter/ShutterFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/ApexSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/BlazeSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/FlameNIRSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/GainAdjustedSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/HR2000PlusSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/HR2000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/HR4000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/JazSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/Maya2000ProSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/Maya2000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/MayaLSLSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/NIRQuest256SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/NIRQuest512SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/NIRQuestSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/OOISpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/OOISpectrometerFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/ProgrammableSaturationFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/ProgrammableSaturationFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/ProgrammableSaturationFeatureImpl.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/ProgrammableSaturationFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/QE65000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/QEProSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/STSSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/SparkSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/SpectrometerTriggerMode.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/USB2000PlusSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/USB2000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/USB4000SpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrometer/VentanaSpectrometerFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrum_processing/SpectrumProcessingFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/spectrum_processing/SpectrumProcessingFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/stray_light/StrayLightCoeffsFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/stray_light/StrayLightCoeffsFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/temperature/TemperatureFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/temperature/TemperatureFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/thermoelectric/QEProThermoElectricFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/thermoelectric/ThermoElectricFeatureBase.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/thermoelectric/ThermoElectricFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/thermoelectric/ThermoElectricQEFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/thermoelectric/VentanaThermoElectricFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/wavecal/WaveCalFeature.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/features/wavecal/WaveCalFeatureInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/AcquisitionDelayProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/ContinuousStrobeProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/DataBufferProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/EEPROMProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/FPGARegisterProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/IrradCalProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/LightSourceProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/NonlinearityCoeffsProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/OpticalBenchProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/PixelBinningProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/ProgrammableSaturationProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/RevisionProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/SerialNumberProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/ShutterProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/SpectrometerProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/SpectrumProcessingProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/StrayLightCoeffsProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/StrobeLampProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/TemperatureProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/ThermoElectricProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/interfaces/WaveCalProtocolInterface.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/constants/OBPMessageTypes.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPCommand.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPContinuousStrobeEnableExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPContinuousStrobePeriodExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPDataBufferClearExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetAllTemperaturesExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetBoxcarWidthExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetDataBufferCapacityExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetDataBufferElementCountExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetDataBufferMaximumCapacityExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetDefaultPixelBinningExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetFirmwareRevisionExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetHardwareRevisionExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetIrradCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetIrradCollectionAreaExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetMaxPixelBinningExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetNonlinearityCoeffExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetNonlinearityCoeffsCountExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchCoatingExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchFiberDiameterMicronsExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchFilterExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchGratingExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchIDExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchSerialNumberExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetOpticalBenchSlitWidthMicronsExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetPixelBinningExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetSaturationExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetScansToAverageExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetSerialNumberExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetSerialNumberMaximumLengthExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetStrayLightCoeffExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetStrayLightCoeffsCountExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetTemperatureCountExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetTemperatureExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetThermoElectricTemperatureExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPGetWaveCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPIntegrationTimeExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPLampEnableCommand.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPLightSourceEnableCommand.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPLightSourceEnabledQuery.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPLightSourceIntensityCommand.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPLightSourceIntensityQuery.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPMessage.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPQuery.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPReadRawSpectrum32AndMetadataExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPReadRawSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPReadSpectrum32AndMetadataExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPReadSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPReadSpectrumWithGainExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPRequestBufferedSpectrum32AndMetadataExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPRequestRawSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPRequestSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetAcquisitionDelayExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetBoxcarWidthExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetDataBufferCapacityExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetDefaultPixelBinningExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetIrradCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetIrradCollectionAreaExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetPixelBinningExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetScansToAverageExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetThermoElectricEnableExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPSetThermoElectricSetpointExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPShutterExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPTransaction.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/exchanges/OBPTriggerModeExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/hints/OBPControlHint.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/hints/OBPSpectrumHint.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPAcquisitionDelayProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPContinuousStrobeProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPDataBufferProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPIrradCalProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPLightSourceProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPLightSourceProtocol_Ventana.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPNonlinearityCoeffsProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPOpticalBenchProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPPixelBinningProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPProgrammableSaturationProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPRevisionProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPSerialNumberProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPShutterProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPSpectrometerProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPSpectrumProcessingProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPStrayLightCoeffsProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPStrobeLampProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPTemperatureProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPThermoElectricProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OBPWaveCalProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/obp/impls/OceanBinaryProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/constants/FPGARegisterCodes.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/constants/OpCodes.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/constants/QETECConstants.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/FPGARegisterReadExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/FPGARegisterWriteExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/FPGASpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/FlameNIRSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/HRFPGASpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/IntegrationTimeExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/JazSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/MayaProSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/NIRQuestSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/OOI2KSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/OOIIrradCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/OOIReadIrradCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/OOIWriteIrradCalExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/QESpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/ReadEEPROMSlotExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/ReadSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/ReadTECQETemperatureExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/ReadTECTemperatureExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/RequestSpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/StrobeEnableExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/TECEnableExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/TECQEEnableExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/TriggerModeExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/USBFPGASpectrumExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/WriteEEPROMSlotExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/WriteTECQESetPointExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/exchanges/WriteTECSetPointExchange.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/hints/ControlHint.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/hints/SpectrumHint.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/FPGARegisterProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOIEEPROMProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOIIrradCalProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOIProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOISpectrometerProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOIStrobeLampProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/protocols/ooi/impls/OOITECProtocol.h
create mode 100644 othersoft/shuttercali/source/OSIF/include/vendors/OceanOptics/utils/Polynomial.h
create mode 100644 othersoft/shuttercali/source/Settings/SystemConfigger.cpp
create mode 100644 othersoft/shuttercali/source/Settings/SystemConfigger.h
create mode 100644 othersoft/shuttercali/source/Thread/AbstractFSController.cpp
create mode 100644 othersoft/shuttercali/source/Thread/AbstractFSController.h
create mode 100644 othersoft/shuttercali/source/Thread/MainDataGrabber.cpp
create mode 100644 othersoft/shuttercali/source/Thread/MainDataGrabber.h
create mode 100644 othersoft/shuttercali/source/ZZ_SDK/ZZ_Math_HDRONLY.h
create mode 100644 othersoft/shuttercali/source/pch.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/OptoSkyManager.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/OptoSkyManager.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/OptoSkyType.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/OptoSkyType.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/OptoskyCommunicater.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SeaBreeze.dll
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorBase.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorBase.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorMannager.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorMannager.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorOptoSky.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorOptoSky.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorQExPRO.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/SensorQExPRO.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/TCPServer.h
create mode 100644 othersoft/shuttercali/source_rlx/sensor/logout.cpp
create mode 100644 othersoft/shuttercali/source_rlx/sensor/logout.h
diff --git a/html/config/calibrate.php b/html/config/calibrate.php
new file mode 100644
index 0000000..d9edfc3
--- /dev/null
+++ b/html/config/calibrate.php
@@ -0,0 +1,45 @@
+";
+//$cmd = 'ping 127.0.0.1';
+
+system("sudo pkill ocean_optics_calibration_console");
+system("sudo gpio write 1 1");
+$cmd="";
+
+
+
+
+if ($a==1)
+{
+ $cmd = 'sudo /home/pi/bin/ocean_optics_calibration_console -t 30 -slfs ocean_optics.lmp --cfon FSNsdfsd'.$a.'.data -p '.$a;
+}
+else
+{
+ $cmd = 'sudo /home/pi/bin/ocean_optics_calibration_console -t 30 -slfs 4000nit.dat --cfon FSNsdfsd'.$a.'.data -p '.$a;
+}
+
+
+
+
+while(@ ob_end_flush());
+
+$proc = popen($cmd, 'r');
+
+
+while(!feof($proc)){
+ echo fread($proc, 4096);
+ @ flush();
+}
+echo 'FINISH!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!';
+echo '鍥炲埌棣栭〉';
\ No newline at end of file
diff --git a/html/config/location.php b/html/config/location.php
new file mode 100644
index 0000000..4dd8476
--- /dev/null
+++ b/html/config/location.php
@@ -0,0 +1,48 @@
+瀹氭爣
';
+echo '鍥炲埌棣栭〉';
+
+/*
+$i = 100;
+while ($i<1000) {
+ ++$i;
+ //閮ㄥ垎娴忚鍣ㄩ渶瑕佸唴瀹硅揪鍒颁竴瀹氶暱搴︿簡鎵嶈緭鍑
+ if ($i === 103) {
+ echo"hello word".$i."
";;
+ } else {
+ echo"hello word".$i."
";;
+ }
+ sleep(1);
+
+}
+*/
diff --git a/html/config/position.html b/html/config/position.html
new file mode 100644
index 0000000..c13621f
--- /dev/null
+++ b/html/config/position.html
@@ -0,0 +1,15 @@
+
+
+
+
+ Title
+
+
+浣嶇疆1
+浣嶇疆2
+浣嶇疆3
+浣嶇疆4
+浣嶇疆5
+浣嶇疆try
+
+
\ No newline at end of file
diff --git a/othersoft/install.sh b/othersoft/install.sh
new file mode 100644
index 0000000..d205631
--- /dev/null
+++ b/othersoft/install.sh
@@ -0,0 +1,15 @@
+mkdir build
+cd build
+mkdir movingliner
+cd movingliner
+cmake ../../movingliner
+make -j4
+mkdir /home/pi/bin
+cp ./movingliner /home/pi/bin
+echo beging build shuttercali
+cd ../
+mkdir shuttercali
+cd shuttercali
+cmake ../../shuttercali
+make -j4
+cp ./shuttercali /home/pi/bin
diff --git a/othersoft/movingliner/CMakeLists.txt b/othersoft/movingliner/CMakeLists.txt
new file mode 100644
index 0000000..afdac17
--- /dev/null
+++ b/othersoft/movingliner/CMakeLists.txt
@@ -0,0 +1,32 @@
+cmake_minimum_required(VERSION 3.0)
+project(movingliner)
+IF (WIN32)
+
+ #MESSAGE(STATUS "Now is windows")
+
+ENDIF ()
+set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} C:/Qt/Qt5.12.7/5.12.7/mingw73_64)
+#set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} C:/Qt/Qt5.9.0/5.9/msvc2017_64/ )
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+set(QT Core Gui Network WebSockets SerialPort Widgets)
+
+find_package(Qt5 REQUIRED ${QT})
+include_directories("source/LinearShutter")
+add_executable(movingliner
+ main.cpp
+ source/LinearShutter/VSMD12XControl.cpp
+ source/LinearShutter/VSMD12XControl.h
+ source/LinearShutter/ZZ_SeiralPort.cpp
+ source/LinearShutter/ZZ_SeiralPort.h
+
+ )
+qt5_use_modules(movingliner ${QT})
+
+
+
+
+
diff --git a/othersoft/movingliner/DeviceSettings.ini b/othersoft/movingliner/DeviceSettings.ini
new file mode 100644
index 0000000..2f87a5b
--- /dev/null
+++ b/othersoft/movingliner/DeviceSettings.ini
@@ -0,0 +1,27 @@
+[DEVICE INFO]
+TotalSpectrometer=1
+[FS2]
+Model=ISIF
+Port=/dev/ttyS1
+UID=QEP02975
+[FS1]
+Model=OSIFAlpha
+Port=-1
+UID=QEP02975
+AEMax=0.85
+AEMin=0.80
+Depth=200000
+[FS3]
+Model=Null
+[LINEAR SHUTTER]
+Port=COM12
+Type=1
+DCID=1
+TotalPosition=5
+Position0=10000
+Position1=91947
+Position2=219299
+Position3=347535
+Position4=474904
+[HUMITURE]
+Port=/dev/ttyUSB3
\ No newline at end of file
diff --git a/othersoft/movingliner/main.cpp b/othersoft/movingliner/main.cpp
new file mode 100644
index 0000000..279f59b
--- /dev/null
+++ b/othersoft/movingliner/main.cpp
@@ -0,0 +1,52 @@
+#include
+#include
+#include
+#include "qtextstream.h"
+QTextStream cout1(stdout, QIODevice::WriteOnly);
+void logout(QString str){
+ std::cout<";
+ std::fflush(stdout);
+}
+int main(int argc, char *argv[]) {
+ int aaa=1000;
+ QString str(argv[1]);
+ QCoreApplication a(argc, argv);
+ CVSMD12XControl Motercontrol;
+ QString m_qstrDeviceConfigFilePath;
+ // cout1<<"adfasdfsadfsd"<"<value("LINEAR SHUTTER/Position"+str).toLongLong();
+ if (positon==0)
+ {
+ logout("Can not Find the position<\/b>");
+ return 0;
+ }
+ cout1<<"Find Configfile in "< The Port of Motor is "<value("LINEAR SHUTTER/Port").toString()<<"
"<value("LINEAR SHUTTER/Position"+str).toLongLong()<<"
"<"<value("LINEAR SHUTTER/Port").toString()
+ Motercontrol.ILMES_InitializeComm(m_qsDeviceConfig->value("LINEAR SHUTTER/Port").toString());
+ ControllerParams cpTest;
+ Motercontrol.ILMES_InitializeParams(cpTest);
+
+
+
+
+ logout("Moving to Zero");
+ Motercontrol.StartBackZero();
+ //std::cout<<"beging to move position";
+ logout("Moving to The Position");
+ Motercontrol.MoveTo(positon);
+
+ logout("Finish the Task!!!<\/b>
Thanks For Using<\/b>");
+ return 0;
+ // return QCoreApplication::exec();
+}
diff --git a/othersoft/movingliner/source/LinearShutter/AbstractPort.h b/othersoft/movingliner/source/LinearShutter/AbstractPort.h
new file mode 100644
index 0000000..0c0118b
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/AbstractPort.h
@@ -0,0 +1,16 @@
+#pragma once
+#include "VSMD12XMiscDefines.h"
+#include
+class CAbstractPort
+{
+public:
+ virtual void InitPort(PortInfo portinfo) = 0;
+ virtual bool SetPort() = 0;
+ virtual bool Open() = 0;
+ virtual void Close() = 0;
+
+ virtual std::string ReadAll(int waite=5000) = 0;
+ virtual int Write(const std::string strSend) = 0;
+
+};
+
diff --git a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp
new file mode 100644
index 0000000..520e487
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.cpp
@@ -0,0 +1,1416 @@
+#include "pch.h"
+#include "VSMD12XControl.h"
+#include "ZZ_SeiralPort.h"
+#include
+#define sprintf_s snprintf
+CVSMD12XControl::CVSMD12XControl()
+{
+ m_iProtocolType = 0;
+ m_iCID = 1;
+ m_bIsSyncMove = 0;
+ m_piPositionInPulses = NULL;
+ waitetime = 200;
+ waitetime = 200;
+}
+
+CVSMD12XControl::~CVSMD12XControl()
+{
+ if (m_piPositionInPulses!=NULL)
+ {
+ delete[] m_piPositionInPulses;
+ }
+}
+
+bool CVSMD12XControl::ILMES_InitializeComm(PortInfo portinfo, int iPortType /*= 1*/, int iCID /*= 1*/, bool bSyncMove /*= true*/)
+{
+ SetProtocolType(iPortType);
+ SetCID(iCID);
+ SetSyncMode(bSyncMove);
+
+ return InitAndOpenPort(portinfo);
+}
+bool CVSMD12XControl::ILMES_InitializeComm(QString portName, int bandrate, int iPortType , int iCID , bool bSyncMove )
+{
+ PortInfo pi;
+ pi.FullPortName = portName;
+
+ pi.iBaudRate = bandrate;
+ return ILMES_InitializeComm(pi, iPortType, iCID, bSyncMove);
+
+
+}
+
+bool CVSMD12XControl::ILMES_InitializeParams(ControllerParams cpParams)
+{
+ bool bRes = false;
+
+ bRes = CVSMD12XControl::SetBaudRate(cpParams.bdr);
+ if (!bRes)
+ {
+ qDebug() << "SetBaudRate Err";
+ //return false;
+ }
+
+ bRes = CVSMD12XControl::SetSpeed(cpParams.spd,cpParams.acc,cpParams.dec);
+ if (!bRes)
+ {
+ qDebug() << "SetSpeed Err";
+ //return false;
+ }
+
+ bRes = CVSMD12XControl::SetMicroSteps(cpParams.mcs);
+ if (!bRes)
+ {
+ qDebug() << "SetMicroSteps Err";
+ //return false;
+ }
+
+ bRes = CVSMD12XControl::SetCurrent(cpParams.cra,cpParams.crn,cpParams.crh);
+ if (!bRes)
+ {
+ qDebug() << "SetCurrent Err";
+ //return false;
+ }
+
+ bRes = CVSMD12XControl::SetZeroParams(cpParams.zmd,cpParams.osv, cpParams.snr,cpParams.zsd,cpParams.zsp);
+ if (!bRes)
+ {
+ qDebug() << "SetZeroParams Err";
+ //return false;
+ }
+ return bRes;
+}
+
+void CVSMD12XControl::ILMES_SetPosition(int *piPositionInPulse, size_t szSize)
+{
+ m_piPositionInPulses = new int[szSize];
+ for (size_t i=0;i< szSize;i++)
+ {
+ m_piPositionInPulses[i] = piPositionInPulse[i];
+ }
+}
+
+bool CVSMD12XControl::ILMES_MoveToPos(int iPositionIndex)
+{
+ bool bRes = false;
+ bRes = CVSMD12XControl::StartBackZero();
+ if (!bRes)
+ {
+ qDebug() << "StartBackZero Err";
+ return false;
+ }
+
+ bRes = CVSMD12XControl::MoveTo(m_piPositionInPulses[iPositionIndex]);
+ if (!bRes)
+ {
+ qDebug() << "MoveTo Err";
+ return false;
+ }
+
+ return bRes;
+}
+
+void CVSMD12XControl::SetProtocolType(int iProtocolType /*= 0*/)
+{
+ m_iProtocolType = iProtocolType;
+}
+
+void CVSMD12XControl::SetCID(int iID)
+{
+ m_iCID = iID;
+
+ char cmd[64];
+ sprintf_s(cmd, 64, "%d ", iID);
+ std::string strCID(cmd);
+ m_strCID = strCID;
+ return;
+}
+
+void CVSMD12XControl::SetSyncMode(bool bSyncMove /*= false*/)
+{
+ m_bIsSyncMove = bSyncMove;
+}
+
+bool CVSMD12XControl::InitAndOpenPort(PortInfo portinfo)
+{
+ bool bRes = false;
+ if (portinfo.iPortType==0)
+ {
+ m_pAbsPort = new CZZ_SeiralPort_QT;
+ }
+
+ m_pAbsPort->InitPort(portinfo);
+
+ bRes = m_pAbsPort->SetPort();
+ if (!bRes)
+ {
+ return bRes;
+ }
+ bRes = m_pAbsPort->Open();
+ return bRes;
+}
+
+std::string CVSMD12XControl::ReadReceive()
+{
+ return m_pAbsPort->ReadAll();
+}
+
+int CVSMD12XControl::SendCommand(const std::string strSend)
+{
+ return m_pAbsPort->Write(strSend);
+}
+
+bool CVSMD12XControl::InitController()
+{
+// std::string strTest = "this is a test message.";
+//
+// char *pcTest = new char[strTest.length()];
+// strTest.copy(pcTest, strTest.length(),0);
+//
+// memcpy(pcTest, strTest.c_str(), 23);
+//
+// char *pcTest1 = (char*)strTest.c_str();
+// std::string test=m_pAbsPort->ReadAll();
+ std::string strCMD = "dev\n";
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+ int iRet=m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+ std::string strRecv = m_pAbsPort->ReadAll();
+ ParseReturnedString(strRecv, 0);
+ std::string::size_type szPosition;
+ szPosition = strRecv.find("VSMD", 0);
+ if (szPosition != strRecv.npos)
+ {
+ return true;
+ }
+ return false;
+}
+
+bool CVSMD12XControl::GetStatus(MSInfo &stuMotorParam)
+{
+ std::string strCMD = "cts\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+
+ //QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ ParseReturnedParam(strRecv);
+
+ stuMotorParam = m_stuMSInfo;
+ return true;
+}
+
+bool CVSMD12XControl::Move(int iRelPulse)
+{
+ using namespace ZZ_MISCDEF;
+ char cmd[64];
+ sprintf_s(cmd, 64, "rmv %d\n", iRelPulse);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+ QThread::msleep(200);
+ m_pAbsPort->ReadAll();
+ if (m_bIsSyncMove)
+ {
+ if (iRet != 0)
+ {
+ return false;
+ }
+
+ bool bFlagIsStopped=false;
+ while (!bFlagIsStopped)
+ {
+ QThread::msleep(200);
+ GetStatus(m_stuMSInfo);
+ ZZ_U8 ucFlag = m_stuMSInfo.uiFlags & 0x000000FF;
+ ucFlag = ucFlag & 0x10;
+ if (ucFlag==0x10 && m_stuMSInfo.fVelocity==0)
+ {
+ bFlagIsStopped = true;
+ }
+ }
+ return true;
+ }
+ else
+ {
+ if (iRet == 0)
+ {
+ return true;
+ }
+ return false;
+ }
+
+}
+
+bool CVSMD12XControl::Enable()
+{
+ std::string strCMD = "ena\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+bool CVSMD12XControl::Disable()
+{
+ std::string strCMD = "off\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+
+}
+
+bool CVSMD12XControl::MoveTo(int iAbsPulse)
+{
+ if (iAbsPulse > MAXDISTANCE)
+ {
+ //return false;
+ iAbsPulse = MAXDISTANCE;
+ }
+
+ char cmd[64];
+ sprintf_s(cmd, 64, "pos %d\n", iAbsPulse);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+
+ int iRet = m_pAbsPort->Write(strCMD);
+ if (waitetime!=0)
+ {
+ QThread::msleep(200);
+ }
+
+
+ m_pAbsPort->ReadAll();
+
+ if (m_bIsSyncMove)
+ {
+ if (iRet != 0)
+ {
+ return false;
+ }
+
+ bool bFlagIsStopped = false;
+ while (!bFlagIsStopped)
+ {
+ QThread::msleep(200);
+ GetStatus(m_stuMSInfo);
+ ZZ_U8 ucFlag = m_stuMSInfo.uiFlags & 0x000000FF;
+ ucFlag = ucFlag & 0x10;
+ if (ucFlag == 0x10 && m_stuMSInfo.fVelocity == 0)
+ {
+ bFlagIsStopped = true;
+ }
+ }
+ return true;
+ }
+ else
+ {
+ if (iRet == 0)
+ {
+ return true;
+ }
+ return false;
+ }
+// if (iRet == 0)
+// {
+// return true;
+// }
+// return false;
+// std::string strTest;
+// strTest.resize(7);
+// char test[7];
+// //memcpy(test, strCMD.c_str(), 7);
+// for (size_t i = 0; i < 7; i++)
+// {
+// strTest[i] = cmd[i];
+// }
+}
+
+bool CVSMD12XControl::Move_NoSyn(int iRelPulse)
+{
+ bool a;
+ waitetime = 0;
+ m_bIsSyncMove = false;
+ a = Move(iRelPulse);
+ m_bIsSyncMove = true;
+ waitetime = 200;
+ return a;
+
+}
+
+bool CVSMD12XControl::MoveTo_NoSyn(int iAbsPulse)
+{
+ bool a;
+ waitetime = 0;
+ m_bIsSyncMove = false;
+ a = MoveTo(iAbsPulse);
+ m_bIsSyncMove = true;
+ waitetime =200;
+ return a;
+}
+
+bool CVSMD12XControl::SetLogicZero()
+{
+ std::string strCMD = "org\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+bool CVSMD12XControl::StartBackZero()
+{
+ std::string strCMD = "zero start\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+
+ if (!ParseReturnedString(strRecv, -1))
+ {
+ return false;
+ }
+
+ bool bFlagIsStopped = false;
+ while (!bFlagIsStopped)
+ {
+ QThread::msleep(200);
+ GetStatus(m_stuMSInfo);
+ ZZ_U8 ucFlag = m_stuMSInfo.uiFlags & 0x000000FF;
+ ucFlag = ucFlag & 0x10;
+ if (ucFlag == 0x10 && m_stuMSInfo.fVelocity == 0)
+ {
+ bFlagIsStopped = true;
+ }
+ }
+ return true;
+// return ParseReturnedString(strRecv, -1);
+
+}
+
+bool CVSMD12XControl::StopBackZero()
+{
+ std::string strCMD = "zero stop\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(200);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+bool CVSMD12XControl::SetBaudRate(int iBaudRate)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg bdr=%d\n", iBaudRate);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+int CVSMD12XControl::GetBaudRate()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes= ParseReturnedParam(strRecv);
+ if (bRes=false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.bdr;
+ }
+}
+
+bool CVSMD12XControl::SetMicroSteps(int iMicroSteps)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg mcs=%d\n", iMicroSteps);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+int CVSMD12XControl::GetMicroSteps()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.mcs;
+ }
+}
+
+bool CVSMD12XControl::SetAccSpeed(float fAccSpd)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg acc=%f\n", fAccSpd);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetAccSpeed()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.acc;
+ }
+}
+
+bool CVSMD12XControl::SetRunSpeed(float fRunSpeed)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg spd=%f\n", fRunSpeed);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetRunSpeed()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.spd;
+ }
+}
+
+bool CVSMD12XControl::SetDecSpeed(float fDecSpeed)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg dec=%f\n", fDecSpeed);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetDecSpeed()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.dec;
+ }
+}
+
+bool CVSMD12XControl::SetSpeed(float fRunSpeed, float fAccSpd, float fDecSpeed)
+{
+ char cmd[128];
+ sprintf_s(cmd, 128, "cfg spd=%f acc=%f dec=%f\n", fRunSpeed, fAccSpd, fDecSpeed);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+bool CVSMD12XControl::SetHoldCurrent(float fHoldCurrent)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg crh=%f\n", fHoldCurrent);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetHoldCurrent()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.crh;
+ }
+}
+
+bool CVSMD12XControl::SetAccCurrent(float fAccCurrent)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg cra=%f\n", fAccCurrent);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetAccCurrent()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.cra;
+ }
+}
+
+bool CVSMD12XControl::SetRunCurrent(float fRunCurrent)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg crn=%f\n", fRunCurrent);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+float CVSMD12XControl::GetRunCurrent()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.crn;
+ }
+}
+
+bool CVSMD12XControl::SetCurrent(float fAccCurrent, float fRunCurrent, float fHoldCurrent)
+{
+ char cmd[128];
+ sprintf_s(cmd, 128, "cfg cra=%f crn=%f crh=%f\n", fAccCurrent, fRunCurrent, fHoldCurrent);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+bool CVSMD12XControl::SetS1FETE(ZZ_U8 bS1FETE)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg s1f=%d\n", bS1FETE);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+ZZ_U8 CVSMD12XControl::GetS1FETE()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.s1f;
+ }
+}
+
+bool CVSMD12XControl::SetS1RETE(ZZ_U8 bS1RETE)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg s1r=%d\n", bS1RETE);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+ZZ_U8 CVSMD12XControl::GetS1RETE()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.s1r;
+ }
+}
+
+bool CVSMD12XControl::SetS2FETE(ZZ_U8 bS2FETE)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg s2f=%d\n", bS2FETE);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+ZZ_U8 CVSMD12XControl::GetS2FETE()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.s2f;
+ }
+}
+
+bool CVSMD12XControl::SetS2RETE(ZZ_U8 bS2RETE)
+{
+ char cmd[64];
+ sprintf_s(cmd, 64, "cfg s2r=%d\n", bS2RETE);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ return ParseReturnedString(strRecv, -1);
+}
+
+ZZ_U8 CVSMD12XControl::GetS2RETE()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.s2r;
+ }
+}
+
+bool CVSMD12XControl::SetZeroParams(ZZ_U8 bZeroMode, ZZ_U8 bSwitchOpenVL, ZZ_U8 bZeroSensor, float fZeroVelocity, int iSafePosition)
+{
+ char cmd[128];
+ sprintf_s(cmd, 128, "cfg zmd=%d osv=%d snr=%d zsd=%f zsp=%d\n",
+ (int)bZeroMode, (int)bSwitchOpenVL, (int)bZeroSensor, fZeroVelocity, iSafePosition);
+ std::string strCMD(cmd);
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(800);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+
+ return ParseReturnedString(strRecv, -1);
+}
+
+ZZ_U8 CVSMD12XControl::GetZeroMode()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.zmd;
+ }
+}
+
+ZZ_U8 CVSMD12XControl::GetSwitchOpenVoltageLevel()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.osv;
+ }
+}
+
+ZZ_U8 CVSMD12XControl::GetZeroSensor()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.snr;
+ }
+}
+
+int CVSMD12XControl::GetSafePosition()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.zsp;
+ }
+}
+
+float CVSMD12XControl::GetZeroVelocity()
+{
+ std::string strCMD = "cfg\n";
+
+ if (m_iProtocolType)
+ {
+ strCMD = m_strCID + strCMD;
+ }
+
+ int iRet = m_pAbsPort->Write(strCMD);
+
+ QThread::msleep(500);
+
+ std::string strRecv = m_pAbsPort->ReadAll();
+ bool bRes = ParseReturnedParam(strRecv);
+ if (bRes = false)
+ {
+ return -1;
+ }
+ else
+ {
+ return m_stuControllerParams.zsp;
+ }
+}
+
+bool CVSMD12XControl::ParseReturnedString(std::string &strRecv, int iType)
+{
+ char cHead =(char) 0xFF;
+ if (iType == -1)
+ {
+ if (strRecv[0]== cHead)
+ {
+ return true;
+ }
+ return false;
+ }
+ else if (iType == 0)
+ {
+ if (strRecv.size()<3)
+ {
+ return false;
+ }
+ strRecv.erase(0, 3);
+ strRecv.erase(strRecv.size() - 3, 3);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool CVSMD12XControl::ParseReturnedParam(std::string &strRecv)
+{
+
+
+
+ while (uchar( strRecv[0])!=0xff&&strRecv.size()>0)
+ {
+ //std::cout << strRecv.size() << endl;
+ strRecv.erase(strRecv.begin());
+ //std::cout << strRecv.size() << endl;
+
+ }
+ int ii = 0;
+ while (strRecv.size() < 2)
+ {
+
+ std::string strRecv1 = m_pAbsPort->ReadAll(20);
+ if (strRecv1.size() == 0)
+ {
+ return false;
+
+ }
+ strRecv = strRecv + strRecv1;
+ ii++;
+ if (ii == 2)
+ {
+ return false;
+
+ }
+ }
+ if (strRecv[2]==0x2)
+ {
+ //strRecv.erase(0, 3);
+ //strRecv.erase(strRecv.size() - 3, 3);
+ int i = 0;
+ int izero = 0;
+ while (strRecv.size() != 21)
+ {
+ std::string strRecv1 = "";
+ strRecv1 = m_pAbsPort->ReadAll(20);
+ if (strRecv1.size()==0)
+ {
+ return false;
+
+ }
+ strRecv = strRecv + strRecv1;
+ i++;
+ if (i==5)
+ {
+ return false;
+
+ }
+ if (strRecv.size() > 21)
+ {
+ return false;
+ }
+ //return false;
+ }
+ ZZ_U8 *pbRecv = (ZZ_U8*)strRecv.c_str();
+
+ VSMD_BitShift(&pbRecv[3], &m_unValue);
+ m_stuMSInfo.fVelocity = m_unValue.fValue;
+ VSMD_BitShift(&pbRecv[8], &m_unValue);
+ m_stuMSInfo.iPosition = m_unValue.i32Value;
+ VSMD_BitShift(&pbRecv[13], &m_unValue);
+ m_stuMSInfo.uiFlags = m_unValue.u32Value;
+
+ //delete pbRecv;
+ return true;
+ }
+ else if (strRecv[2] == 0x3)
+ {
+ strRecv[strRecv.size() - 3] = 0;
+ char* pcParam = ((char*)strRecv.c_str())+3;
+
+ while (pcParam)
+ {
+ char* pcNext = VSMD_Split(pcParam, ' ');
+ char* pcValueStr = VSMD_Split(pcParam, '=');
+
+ //
+ if (pcValueStr)
+ {
+ if (strcmp(pcParam, "bdr") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.bdr = iValue;
+ }
+ else if (strcmp(pcParam, "mcs") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.mcs = iValue;
+ }
+ else if (strcmp(pcParam, "spd") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.spd = fValue;
+ }
+ else if (strcmp(pcParam, "acc") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.acc = fValue;
+ }
+ else if (strcmp(pcParam, "dec") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.dec = fValue;
+ }
+ else if (strcmp(pcParam, "cra") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.cra = fValue;
+ }
+ else if (strcmp(pcParam, "crn") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.crn = fValue;
+ }
+ else if (strcmp(pcParam, "crh") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.crh = fValue;
+ }
+ else if (strcmp(pcParam, "s1f") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.s1f = iValue;
+ }
+ else if (strcmp(pcParam, "s1r") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.s1r = iValue;
+ }
+ else if (strcmp(pcParam, "s2f") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.s2f = iValue;
+ }
+ else if (strcmp(pcParam, "s2r") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.s2r = iValue;
+ }
+ else if (strcmp(pcParam, "zmd") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.zmd = iValue;
+ }
+ else if (strcmp(pcParam, "osv") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.osv = iValue;
+ }
+ else if (strcmp(pcParam, "snr") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.snr = iValue;
+ }
+ else if (strcmp(pcParam, "zsd") == 0)
+ {
+ float fValue = (float)atof(pcValueStr);
+ m_stuControllerParams.zsd = fValue;
+ }
+ else if (strcmp(pcParam, "zsp") == 0)
+ {
+ int iValue = atoi(pcValueStr);
+ m_stuControllerParams.zsp = iValue;
+ }
+
+ }
+ pcParam = pcNext;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+void CVSMD12XControl::VSMD_BitShift(ZZ_U8* src, unValue* dst)
+{
+ if (src)
+ {
+ dst->u32Value = src[0];
+
+ dst->u32Value <<= 7;
+ dst->u32Value |= src[1];
+
+ dst->u32Value <<= 7;
+ dst->u32Value |= src[2];
+
+ dst->u32Value <<= 7;
+ dst->u32Value |= src[3];
+
+ dst->u32Value <<= 7;
+ dst->u32Value |= src[4];
+ }
+}
+
+char* CVSMD12XControl::VSMD_Split(char* cStr, char cSplit)
+{
+ if (cStr)
+ {
+ for (char* cPtr = cStr; *cPtr; cPtr++)
+ {
+ if (*cPtr == cSplit)
+ {
+ *cPtr = '\0';
+ cPtr++;
+ return cPtr;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+// int CVSMD12XControl::add(int a, int b)
+// {
+// return a + b;
+// }
diff --git a/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h
new file mode 100644
index 0000000..46e6a5f
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/VSMD12XControl.h
@@ -0,0 +1,146 @@
+#pragma once
+#include "pch.h"
+#include "AbstractPort.h"
+using namespace std;
+// #ifdef IRIS_API_EXPORTS
+//
+// #ifdef __cplusplus
+// #define IRIS_API_FUNC extern "C" __declspec(dllexport)
+// #else
+// #define IRIS_API_FUNC __declspec(dllexport)
+// #endif
+//
+// #else
+//
+// #ifdef __cplusplus
+// #define IRIS_API_FUNC extern "C" __declspec(dllimport)
+// #else
+// #define IRIS_API_FUNC __declspec(dllimport)
+// #endif
+//
+// #endif
+//
+//
+// #ifdef IRIS_API_EXPORTS
+// #define IRIS_API_CLASS __declspec(dllexport)
+// #else
+// #define IRIS_API_CLASS __declspec(dllimport)
+// #endif
+#define MAXDISTANCE 1265000
+class /*IRIS_API_CLASS*/ CVSMD12XControl
+{
+public:
+ CVSMD12XControl();
+ ~CVSMD12XControl();
+private:
+ int *m_piPositionInPulses;
+
+ CAbstractPort *m_pAbsPort;
+ unValue m_unValue;
+ MSInfo m_stuMSInfo;
+ ControllerParams m_stuControllerParams;
+ int m_iProtocolType;
+ int m_iCID;
+ std::string m_strCID;
+public:
+ bool m_bIsSyncMove;
+ //////////////////////////////////////////////////////////////////////////
+ //for IRIS Linear Motor - Electric Shutter
+ //Initialize communication setup iPortType(0:RS232 1:RS485) iCID(For RS485 device) bSyncMove(move mode)
+ bool ILMES_InitializeComm(QString portName,int bandrate=9600, int iPortType = 1, int iCID = 1, bool bSyncMove = true);
+ //Initialize communication setup iPortType(0:RS232 1:RS485) iCID(For RS485 device) bSyncMove(move mode)
+ bool ILMES_InitializeComm(PortInfo portinfo,int iPortType = 1,int iCID = 1, bool bSyncMove = true);
+
+ //Initialize Controller params
+ bool ILMES_InitializeParams(ControllerParams cpParams);
+
+ //Set the light hole position(pulses)
+ void ILMES_SetPosition(int *piPositionInPulse,size_t szSize);
+
+ bool ILMES_MoveToPos(int iPositionIndex);
+
+public:
+ int waitetime;
+ ////init port
+ void SetProtocolType(int iProtocolType = 0);//0:RS232 1:RS485 call before send any command
+ void SetCID(int iID);//set device id when using RS485 protocol call before send any command
+ void SetSyncMode(bool bSyncMove = false);
+ bool InitAndOpenPort(PortInfo portinfo);//Init comport by PortInfo Struct
+
+ //////////////////////////////////////////////////////////////////////////for debug or unsupported function
+ std::string ReadReceive();
+ int SendCommand(const std::string strSend); // return indicates how many char has been sent
+ //////////////////////////////////////////////////////////////////////////motor control
+ ////init&misc
+ bool InitController(); //Init Motor controller hand shake
+
+ bool Enable(); //enbale
+ bool Disable(); //disable
+
+ bool GetStatus(MSInfo &stuMotorParam); //load motor status see MSInfo Struct
+ ////motion control
+ bool Move(int iRelPulse); // relative move mode,pulse (-2147483647~2147483647)
+ bool MoveTo(int iAbsPulse);//absolute mode,pulse (-2147483647~2147483647)
+ bool Move_NoSyn(int iRelPulse); // relative move mode,pulse (-2147483647~2147483647)
+ bool MoveTo_NoSyn(int iAbsPulse);//absolute mode,pulse (-2147483647~2147483647)
+ bool SetLogicZero(); //set logic zero
+
+ bool StartBackZero();//back zero
+ bool StopBackZero();// stop back zero & reset register
+ ////Set&Get
+ bool SetBaudRate(int iBaudRate);//set controller baud rates,default B9600 (2400 ~ 921600)
+ int GetBaudRate(); // -1:should retry;
+
+ bool SetMicroSteps(int iMicroSteps);//set micro steps (0~5)->(1/2/4/8/16/32)
+ int GetMicroSteps();
+
+ bool SetAccSpeed(float fAccSpd);//set acceleration speed in pulse (0 ~ 192000000)
+ float GetAccSpeed();
+
+ bool SetRunSpeed(float fRunSpeed);//set normal running speed in pulse (0 ~ 192000000)
+ float GetRunSpeed();
+
+ bool SetDecSpeed(float fDecSpeed);//set deceleration speed in pulse (0 ~ 192000000)
+ float GetDecSpeed();
+
+ bool SetSpeed(float fRunSpeed, float fAccSpd, float fDecSpeed);//see above three functions
+
+ bool SetHoldCurrent(float fHoldCurrent);//set hold current ( 0 ~ 8.0 )Amp? pay attention to your motor specification.
+ float GetHoldCurrent();
+
+ bool SetAccCurrent(float fAccCurrent);//set acceleration current ( 0 ~ 8.0 )Amp? pay attention to your motor specification.
+ float GetAccCurrent();
+
+ bool SetRunCurrent(float fRunCurrent);//set normal running current ( 0 ~ 8.0 )Amp? pay attention to your motor specification.
+ float GetRunCurrent();
+
+ bool SetCurrent(float fAccCurrent, float fRunCurrent, float fHoldCurrent);//see above three functions
+
+ bool SetS1FETE(ZZ_U8 bS1FETE);//S1 register falling edge trigger event,see enum
+ ZZ_U8 GetS1FETE();
+
+ bool SetS1RETE(ZZ_U8 bS1RETE);//S1 register rising edge trigger event
+ ZZ_U8 GetS1RETE();
+
+ bool SetS2FETE(ZZ_U8 bS2FETE);//S2 register falling edge trigger event
+ ZZ_U8 GetS2FETE();
+
+ bool SetS2RETE(ZZ_U8 bS2RETE);//S2 register rising edge trigger event
+ ZZ_U8 GetS2RETE();
+
+ //(ZeroMode 0:off 1:once 2:once + safe position 3:twice 4:twice + safe position) (OpenVoltageLevel 0:Low Level 1:High Level)
+ //(ZeroSensor 0:S1 1:S2 2:S3 3:S4 4:S5 5:S6)( ZeroVelocity (-192000) ~(192000)pulse)(SafePosition (-2147483647) ~(2147483647))
+ bool SetZeroParams(ZZ_U8 bZeroMode, ZZ_U8 bSwitchOpenVL, ZZ_U8 bZeroSensor, float fZeroVelocity, int iSafePosition);
+ ZZ_U8 GetZeroMode();
+ ZZ_U8 GetSwitchOpenVoltageLevel();
+ ZZ_U8 GetZeroSensor();
+ int GetSafePosition();
+ float GetZeroVelocity();
+
+private:
+ bool ParseReturnedString(std::string &strRecv,int iType);
+ bool ParseReturnedParam(std::string &strRecv);
+ void VSMD_BitShift(ZZ_U8* src, unValue* dst);
+ char* VSMD_Split(char* cStr, char cSplit);
+};
+
diff --git a/othersoft/movingliner/source/LinearShutter/VSMD12XMiscDefines.h b/othersoft/movingliner/source/LinearShutter/VSMD12XMiscDefines.h
new file mode 100644
index 0000000..6de39a7
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/VSMD12XMiscDefines.h
@@ -0,0 +1,108 @@
+#pragma once
+#include "ZZ_Types.h"
+#define MAXBUFFER 10240
+#include
+using namespace ZZ_MISCDEF;
+
+typedef struct tagTransportLayerInfomation
+{
+ //Serial
+ int iPortType;
+ int iPortNumber;
+ int indexBaudRate;
+ int iBaudRate;
+ int indexParity, indexBytesize, indexStopBits; //Mode
+ bool Hw;
+ bool Sw;
+ bool Dtr, Rts;
+ QString FullPortName;
+ tagTransportLayerInfomation() {
+ iPortType = 0;
+ indexParity = 0;
+ iPortNumber = 8;
+ iBaudRate = 9600;
+ indexBytesize = 3;
+ indexStopBits = 0;
+ FullPortName = "";
+ }
+
+ //Bit
+ //Stop
+ //MODEM CONTROL setting
+ //MODEM LINE STATUS
+
+ //TCP UDP
+
+}PortInfo;
+
+typedef struct tagMotorStatusInfo
+{
+ float fVelocity;
+ int iPosition;
+ ZZ_U32 uiFlags;
+}MSInfo;
+
+typedef struct tagControllerParams
+{
+ int bdr; //baud
+ int mcs; //microsteps 0:full 1:half 2:4 3:8 4:16 5:32 6:64 7:128 8:256
+ float spd; //velocity
+ float acc; //acceleration
+ float dec; //deceleration
+ float cra; //acc state current
+ float crn; //normal state current
+ float crh; //hold state current
+ ZZ_U8 s1f;
+ ZZ_U8 s1r;
+ ZZ_U8 s2f;
+ ZZ_U8 s2r;
+ ZZ_U8 zmd; //zero mode
+ ZZ_U8 osv; //open state sensor value
+ ZZ_U8 snr; //zero sensor
+ ZZ_U8 zsp; //zero safe position
+ float zsd; //zero velocity
+ tagControllerParams() {
+ bdr = 9600;
+
+ cra = 0.8;
+ crh = 0.1;
+ crn = 0.8;
+
+ acc = 100000;
+ dec = 100000;
+ spd = 64000;
+
+ osv = 0;
+ snr = 0;
+ zmd = 3;
+ zsp = 20;
+ zsd = 50000;
+
+ mcs = 6;
+ }
+}ControllerParams;
+
+typedef union
+{
+ ZZ_U8 byteValue[4];
+ short i16Value[2];
+ ZZ_U16 u16Value[2];
+ int i32Value;
+ float fValue;
+ ZZ_U32 u32Value;
+}unValue;
+
+enum emVSMDTriggerEvent
+{
+ NoAction =0, //锟睫讹拷锟斤拷锟斤拷只锟斤拷状态位 S1 锟戒化通知锟斤拷
+ ResetZeroPosition, //锟斤拷锟斤拷锟斤拷锟斤拷原锟斤拷位锟斤拷
+ DecSpdStop, //锟斤拷锟斤拷停止
+ DecSpdStopRZP, //锟斤拷锟斤拷停止锟斤拷锟斤拷锟斤拷停止锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷原锟斤拷位锟斤拷
+ Stop, //锟斤拷锟斤拷停止
+ StopRZP, //锟斤拷锟斤拷停止锟斤拷锟斤拷锟斤拷停止锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷原锟斤拷位锟斤拷
+ RunningPosDirect, //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷转锟斤拷锟斤拷锟劫度o拷
+ RunningNegDirect, //锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷转锟斤拷锟斤拷锟劫度o拷
+ OfflineModeOn, //锟斤拷锟斤拷模式锟斤拷锟斤拷
+ OfflineModeOff //锟斤拷锟斤拷模式停止
+};
+
diff --git a/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.cpp b/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.cpp
new file mode 100644
index 0000000..d5767ad
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.cpp
@@ -0,0 +1,147 @@
+#include "pch.h"
+#include "ZZ_SeiralPort.h"
+
+CZZ_SeiralPort_QT::CZZ_SeiralPort_QT()
+{
+ m_pSerialPort = new QSerialPort();
+}
+
+CZZ_SeiralPort_QT::~CZZ_SeiralPort_QT()
+{
+ if (m_pSerialPort != NULL)
+ {
+ delete m_pSerialPort;
+ }
+}
+
+ void CZZ_SeiralPort_QT::InitPort(PortInfo portinfo)
+{
+
+ m_piSettings = portinfo;
+
+
+}
+
+ bool CZZ_SeiralPort_QT::SetPort()
+ {
+ bool bRes = true;
+// int iRes = sio_ioctl(m_piSettings.iPortNumber, m_piSettings.indexBaudRate,
+// m_piSettings.indexParity | m_piSettings.indexBytesize | m_piSettings.indexStopBits);
+// if (iRes != SIO_OK)
+// {
+// bRes = false;
+// }
+ QString qstrPortName;
+ if (m_piSettings.FullPortName!="")
+ {
+ qstrPortName = m_piSettings.FullPortName;
+ qDebug() << m_piSettings.FullPortName;
+ }
+ else {
+ qstrPortName = QString("COM%1").arg(m_piSettings.iPortNumber);
+ }
+ // qstrPortName = "COM4";
+ // QString qstrPortName = m_piSettings.FullPortName;//QString("COM%1").arg(m_piSettings.iPortNumber);
+ m_pSerialPort->setPortName(qstrPortName);
+ m_pSerialPort->setReadBufferSize(512);
+ bRes = m_pSerialPort->setBaudRate(m_piSettings.iBaudRate);
+ return bRes;
+ }
+
+bool CZZ_SeiralPort_QT::Open()
+{
+ bool bRes = true;
+// int iRes = sio_open(m_piSettings.iPortNumber);
+// if (iRes!=SIO_OK)
+// {
+// bRes = false;
+// }
+ bRes = m_pSerialPort->open(QIODevice::ReadWrite);
+ if (!bRes)
+ {
+ qDebug() << "Err:open Failed.Exit Code:1";
+ //std::cout << "Err.open Failed" << std::endl;
+ return bRes;;
+ }
+ return bRes;
+}
+
+void CZZ_SeiralPort_QT::Close()
+{
+ m_pSerialPort->close();
+}
+
+std::string CZZ_SeiralPort_QT::ReadAll(int waite)
+{
+ if (!m_pSerialPort->waitForReadyRead(waite))
+ {
+ return "";
+
+ }
+ if (
+ m_pSerialPort->bytesAvailable() == 0
+ )
+ {
+ return "";
+ }
+
+ qbaRecv.clear();
+
+ qbaRecv = m_pSerialPort->readAll();
+
+
+ std::string strRet(qbaRecv.constData(), qbaRecv.length());
+ return strRet;
+
+// std::string strRet;
+// char cBuf[MAXBUFFER];
+// int iRet = sio_read(m_piSettings.iPortNumber,cBuf, MAXBUFFER);
+// if (iRet==0)
+// {
+// strRet = "";
+//
+// }
+// else
+// {
+// char *pRecv = new char[iRet];
+// memcpy(pRecv, cBuf, iRet);
+// //std::string strRet(pRecv);
+// //delete pRecv;
+// //return strRet;
+//
+// strRet.resize(iRet);
+// for (int i=0;iwrite(qbaTest);
+ m_pSerialPort->waitForBytesWritten(5000);
+ if (qi64Write != qbaTest.size())
+ {
+ qDebug() << "Err:write Failed.Exit Code:1" << qi64Write;
+ return qi64Write;
+ }
+
+ return 0;
+// char* pcSend = (char*)strSend.c_str();
+// int iRet = sio_write(m_piSettings.iPortNumber, pcSend, (int)strSend.length());
+//
+// //delete pcSend;
+// if (iRet!= (int)strSend.length())
+// {
+// return iRet;
+// }
+// else
+// {
+// return 0;
+// }
+// //sio_write();
+}
diff --git a/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.h b/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.h
new file mode 100644
index 0000000..5d7d0f4
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/ZZ_SeiralPort.h
@@ -0,0 +1,26 @@
+#pragma once
+#include "VSMD12XMiscDefines.h"
+#include "AbstractPort.h"
+#include"qobject.h"
+class CZZ_SeiralPort_QT :public CAbstractPort,QObject
+{
+
+private:
+ PortInfo m_piSettings;
+ QByteArray qbaSend, qbaRecv;
+ QSerialPort *m_pSerialPort;
+public:
+ CZZ_SeiralPort_QT();
+ virtual ~CZZ_SeiralPort_QT();
+public:
+ virtual void InitPort(PortInfo portinfo);
+ virtual bool SetPort();
+ virtual bool Open();
+ virtual void Close();
+
+ virtual std::string ReadAll(int waittime = 5000);
+
+ virtual int Write(const std::string strSend);
+
+};
+
diff --git a/othersoft/movingliner/source/LinearShutter/ZZ_Types.h b/othersoft/movingliner/source/LinearShutter/ZZ_Types.h
new file mode 100644
index 0000000..7ad1c54
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/ZZ_Types.h
@@ -0,0 +1,297 @@
+//////////////////////////////////////////////////////////////////////////
+//类型说明文件
+//////////////////////////////////////////////////////////////////////////
+#pragma once
+#include "pch.h"
+#include
+#define MAX_DEVICENUMBER_FS 2
+#define MAX_LINEARSHUTTER_POSITION 12
+namespace ZZ_MISCDEF
+{
+ typedef unsigned char ZZ_U8;
+ typedef unsigned short int ZZ_U16;
+ typedef unsigned long int ZZ_U32;
+
+
+ namespace IRIS
+ {
+ //Fiber Spectrometer
+ namespace FS
+ {
+ typedef struct tagDataFrame
+ {
+ ZZ_U16 usExposureTimeInMS;
+ ZZ_U16 usData[4096];
+ float fTemperature;
+ double dTimes = 0;
+ }DataFrame;
+
+ typedef struct tagDeviceInfo
+ {
+ std::string strPN;
+ std::string strSN;
+ }DeviceInfo;
+
+ typedef struct tagDeviceAttribute
+ {
+ int iPixels;
+ int iMaxIntegrationTimeInMS;
+ int iMinIntegrationTimeInMS;
+ float fWaveLengthInNM[4096];
+
+ }DeviceAttribute;
+ }
+
+ enum DeviceModel
+ {
+ OSIFAlpha=0,
+ OSIFBeta,
+ ISIF,
+ IS1,
+ IS2
+ };
+
+// inline std::string GetDeviceModelName(int iModel)
+// {
+// switch (iModel)
+// {
+// case DeviceModel::OSIFAlpha: return "OSIFAlpha"; break;
+// case DeviceModel::OSIFBeta: return "OSIFBeta"; break;
+// case DeviceModel::ISIF: return "ISIF"; break;
+// case DeviceModel::IS1: return "IS1"; break;
+// case DeviceModel::IS2: return "IS2"; break;
+// default: return "error"; break;
+// }
+// }
+//
+// inline int GetIndex(std::string strDeviceModelName)
+// {
+// if (strDeviceModelName== "OSIFAlpha")
+// {
+// return DeviceModel::OSIFAlpha;
+// }
+// else if (strDeviceModelName == "OSIFBeta")
+// {
+// return DeviceModel::OSIFBeta;
+// }
+// else if (strDeviceModelName == "ISIF")
+// {
+// return DeviceModel::ISIF;
+// }
+// else if (strDeviceModelName == "IS1")
+// {
+// return DeviceModel::IS1;
+// }
+// else if(strDeviceModelName == "IS2")
+// {
+// return DeviceModel::IS2;
+// }
+// else
+// {
+// return -1;
+// }
+// }
+
+ };
+
+ //ATP指令转译
+ namespace ATP
+ {
+ const int MAX_SPECTRUM_SIZE = 4096;
+
+ const int GET_MODULECIRCUIT_TEMP = 0x01;
+ const int GET_PN_NUMBER = 0x03;
+ const int GET_SN_NUMBER = 0x04;
+ const int GET_MANUFACTURE_DATA = 0x06;
+ const int GET_MANUFACTURE_INFO = 0x09;
+ const int GET_PIXEL_LENGTH = 0x0a;
+ const int GET_TEC_TEMP = 0x13;
+ const int SET_TEC_TEMP = 0x12;
+ const int GET_OPTICS_TEMP = 0x35;
+ const int GET_CIRCUITBOARD_TEMP = 0x36;
+ const int SET_INTEGRATION_TIME = 0x14;
+ const int GET_INTEGRATION_TIME = 0x41;
+ const int GET_MAX_INTEGRATION_TIME = 0x42;
+ const int GET_MIN_INTEGRATION_TIME = 0x43;
+ const int ASYNC_COLLECT_DARK = 0x23;
+ const int ASYNC_START_COLLECTION = 0x16;
+ const int ASYNC_READ_DATA = 0x17;
+ const int SET_AVERAGE_NUMBER = 0x28;
+ const int SYNC_GET_DATA = 0x1e;
+ const int SYNC_GET_DARK = 0x2f;
+ const int EXTERNAL_TRIGGER_ENABLE = 0x1f;
+ const int SET_XENON_LAMP_DELAY_TIME = 0x24;
+ const int GET_WAVELENGTH_CALIBRATION_COEF = 0x55;
+ const int GET_STAT_LAMPOUT = 0x60;
+ const int SET_GPIO = 0x61;
+ //const int SYNCHRONIZATION_GET_DARK = 0x23
+
+ //////////////////////////////////////////////////////////////////////////device
+ enum Model
+ {
+ ATP1010 = 0,
+ ATP6500
+ };
+
+ //数据帧描述
+ typedef struct tagATPDataFrame
+ {
+ unsigned short usExposureTime;
+ ZZ_U16 usData[4096];
+ float fTemperature;
+ double dTimes = 0;
+ }ATPDataFrame;
+
+ //设备信息描述
+ typedef struct tagATPDeviceInfo
+ {
+ std::string strPN;
+ std::string strSN;
+ }ATPDeviceInfo;
+
+ //设备特征描述
+ typedef struct tagATPDeviceAttribute
+ {
+ int iPixels;
+ int iMaxIntegrationTime;
+ int iMinIntegrationTime;
+ float fWaveLength[4096];
+
+ }ATPDeviceAttribute;
+ //////////////////////////////////////////////////////////////////////////config file
+
+
+
+ }
+
+ //运行参数
+ namespace ZZ_RUNPARAMS
+ {
+ typedef struct tagFiberSpecContext
+ {
+ ZZ_U8 ucDeviceNumber;
+ ZZ_U8 ucDeviceModel[MAX_DEVICENUMBER_FS];
+ int iInterface[MAX_DEVICENUMBER_FS];
+ std::string strSN[MAX_DEVICENUMBER_FS];
+ }FSContext;
+
+ typedef struct tagLinearShutterContext
+ {
+ ZZ_U8 ucPort;
+ ZZ_U8 ucProtocolType;
+ ZZ_U8 ucCmdID;
+ }LSContext;
+
+ typedef struct tagAcquisitionTimeSettings
+ {
+ QTime qtStartTime;
+ QTime qtStopTime;
+ QTime qtInterval;
+ }AcqTimeSettings;
+
+ typedef struct tagAcquisitionPositionSettings
+ {
+ int iTotalPosition;
+ int iPosition[MAX_LINEARSHUTTER_POSITION];
+ }AcqPosSettings;
+
+ typedef struct tagRunTimeGrabberParams
+ {
+ LSContext lscParam;
+ FSContext fscParams;
+ AcqTimeSettings atsParams;
+ AcqPosSettings apsParams;
+ }RunTimeGrabberParams;
+
+ typedef struct tagATPCalibrationSettings
+ {
+ //Up0 Down1,2,3
+ QString qsISIF_CalibrationFilePath[4];
+ QString qsIS1_CalibrationFilePath[4];
+ }ATPCalibrationSettings;
+ }
+
+ //系统数据文件结构
+ namespace ZZ_DATAFILE
+ {
+ typedef struct tagEnvironmentalContext
+ {
+ QString qstrUTCDateTime;
+ QString qstrLocation;
+ QString qstrGPS_Longtitude;
+ QString qstrGPS_Latitude;
+ QString qstrGPS_Altitude;
+ QString qstrGPS_North;
+ QString qstrCaseTemperature;
+ QString qstrCaseHumidity;
+
+ }EContext;
+
+ typedef struct tagManmadeEnviromentalContext
+ {
+ QString qstrOriFileName;
+ QString qstrInstallationTime;
+ QString qstrISIFCalibrationTime;
+ QString qstrIS1CalibrationTime;
+ QString qstrNameOfMaintenanceStaff;
+ QString qstrPhoneNumberOfMaintenanceStaff;
+ QString qstrDownloadUserID;
+ QString qstrDownlaodAddress;
+ QString qstrHTTPServer;
+ }MEContext;
+
+
+ typedef struct tagIS1Information
+ {
+ QString qstrSN_ATP;
+ QString qstrSN_IRIS;
+
+ QString qstrCalFile_U0;
+ QString qstrCalFile_D1;
+ QString qstrCalFile_D2;
+ QString qstrCalFile_D3;
+
+ int iPixelCount;
+
+ int iExposureTimeInMS_U0;
+ int iExposureTimeInMS_D1;
+ int iExposureTimeInMS_D2;
+ int iExposureTimeInMS_D3;
+
+ float fTemperature_U0;
+ float fTemperature_D1;
+ float fTemperature_D2;
+ float fTemperature_D3;
+ }IS1Info;
+
+ typedef struct tagISIFInformation
+ {
+ QString qstrSN_ATP;
+ QString qstrSN_IRIS;
+
+ QString qstrCalFile_U0;
+ QString qstrCalFile_D1;
+ QString qstrCalFile_D2;
+ QString qstrCalFile_D3;
+
+ int iPixelCount;
+
+ int iExposureTimeInMS_U0;
+ int iExposureTimeInMS_D1;
+ int iExposureTimeInMS_D2;
+ int iExposureTimeInMS_D3;
+
+ float fTemperature_U0;
+ float fTemperature_D1;
+ float fTemperature_D2;
+ float fTemperature_D3;
+ }ISIFInfo;
+
+ typedef struct tagATPDataHeader
+ {
+
+
+ }ATPDataHeader;
+ }
+
+};
diff --git a/othersoft/movingliner/source/LinearShutter/pch.h b/othersoft/movingliner/source/LinearShutter/pch.h
new file mode 100644
index 0000000..d5ac3af
--- /dev/null
+++ b/othersoft/movingliner/source/LinearShutter/pch.h
@@ -0,0 +1,28 @@
+#pragma once
+#include
+////////////////////////////setings
+#include
+#include
+////////////////////////////Basic
+#include
+#include
+#include
+#include
+#include
+////////////////////////////Thread
+#include
+#include
+#include
+////////////////////////////json
+#include
+#include
+#include
+#include
+#include
+////////////////////////////time
+#include
+#include
+#include
+////////////////////////////Serial I/O
+#include
+#include
\ No newline at end of file
diff --git a/othersoft/movingliner/source/Settings/SystemConfigger.cpp b/othersoft/movingliner/source/Settings/SystemConfigger.cpp
new file mode 100644
index 0000000..46e8800
--- /dev/null
+++ b/othersoft/movingliner/source/Settings/SystemConfigger.cpp
@@ -0,0 +1,191 @@
+#include "SystemConfigger.h"
+
+
+ ZZ_SysConfigger::ZZ_SysConfigger(QObject *parent /*= nullptr*/)
+ {
+#ifdef _DEBUG
+ m_qstrDeviceConfigFilePath = "E:/WorkSpace/TowerOptoSifAndSpectral/config/DeviceSettings.ini";
+ m_qstrJSONConfigFilePath = "E:/WorkSpace/TowerOptoSifAndSpectral/config/config.json";
+#else
+ m_qstrJSONConfigFilePath = ("/home/data/Setting/config.json");
+#endif // DEBUG
+
+ m_qsDeviceConfig = NULL;
+ }
+
+ ZZ_SysConfigger::~ZZ_SysConfigger()
+ {
+ if (qfJConfig.isOpen())
+ {
+ qfJConfig.close();
+ }
+ }
+
+ int ZZ_SysConfigger::Initialize()
+ {
+ //////////////////////////////////////////////////////////////////////////load device settings
+ using namespace ZZ_MISCDEF;
+ QMetaEnum enumDeviceModel = QMetaEnum::fromType();
+
+ if (m_qsDeviceConfig!=NULL)
+ {
+ delete m_qsDeviceConfig;
+ }
+ m_qsDeviceConfig = new QSettings(m_qstrDeviceConfigFilePath, QSettings::IniFormat);
+ m_struDeviceContext.ucDeviceNumber = m_qsDeviceConfig->value(QString("DEVICE INFO/TotalSpectrometer"),-1).toInt();
+ if (m_struDeviceContext.ucDeviceNumber == -1)
+ {
+ qDebug() << "DEVICE INFO TotalSpectrometer Value Err.";
+ return 3;
+ }
+ for (ZZ_U8 i=0;i< m_struDeviceContext.ucDeviceNumber;i++)
+ {
+ QString qstrTemp= m_qsDeviceConfig->value(QString("FS%1/Model").arg(i+1), "Null").toString();
+ m_struDeviceContext.ucDeviceModel[i]= enumDeviceModel.keysToValue(qstrTemp.toLatin1().data());
+
+ int iInterface= m_qsDeviceConfig->value(QString("FS%1/Port").arg(i + 1), -2).toInt();
+ m_struDeviceContext.iInterface[i] = iInterface;
+
+ qstrTemp = m_qsDeviceConfig->value(QString("FS%1/UID").arg(i + 1), "Null").toString();
+ m_struDeviceContext.strSN[i] = qstrTemp.toStdString();
+ }
+
+ m_struAcqPosition.iTotalPosition = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/TotalPosition"), -1).toInt();
+ if (m_struAcqPosition.iTotalPosition == -1)
+ {
+ qDebug() << "LINEAR SHUTTER TotalPosition Value Err.";
+ return 4;
+ }
+
+ for (ZZ_U8 i = 0; i < m_struAcqPosition.iTotalPosition; i++)
+ {
+ int iPosition = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/Position%1").arg(i), -2).toInt();
+ m_struAcqPosition.iPosition[i] = iPosition;
+ }
+
+
+
+ //////////////////////////////////////////////////////////////////////////load json settings
+ qfJConfig.setFileName(m_qstrJSONConfigFilePath);
+ bool bRes = qfJConfig.open(QIODevice::ReadOnly);
+ if (!bRes)
+ {
+ qDebug() << "QFile open config file Err.";
+ return 1;
+ }
+
+ m_qbaJData = qfJConfig.readAll();
+ m_qjdJDoc= QJsonDocument::fromJson(m_qbaJData, &m_qjpeJErr);
+ if (m_qjpeJErr.error != QJsonParseError::NoError)
+ {
+ qDebug() << m_qjpeJErr.errorString();
+ return 2;
+ }
+ m_qjoJObj = m_qjdJDoc.object();
+ return 0;
+ }
+
+ int ZZ_SysConfigger::GetGrabberRunParams(RunTimeGrabberParams &struGrabberRTParams)
+ {
+ struGrabberRTParams.atsParams = m_struAcqTime;
+ struGrabberRTParams.fscParams = m_struDeviceContext;
+ return 0;
+ }
+
+ int ZZ_SysConfigger::LoadSettingsFromFile_IS1()
+ {
+ m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString();
+ m_struIS1Info.qstrCalFile_D1 = m_qjoJObj.value("IS1DownCalFile1").toString();
+ m_struIS1Info.qstrCalFile_D2 = m_qjoJObj.value("IS1DownCalFile2").toString();
+ m_struIS1Info.qstrCalFile_D3 = m_qjoJObj.value("IS1DownCalFile3").toString();
+
+
+ return 0;
+ }
+
+ int ZZ_SysConfigger::LoadSettingsFromFile_iSIF()
+ {
+ m_struISIFInfo.qstrCalFile_U0 = m_qjoJObj.value("SIFUpCalFile").toString();
+ m_struISIFInfo.qstrCalFile_D1 = m_qjoJObj.value("SIFDownCalFile1").toString();
+ m_struISIFInfo.qstrCalFile_D2 = m_qjoJObj.value("SIFDownCalFile2").toString();
+ m_struISIFInfo.qstrCalFile_D3 = m_qjoJObj.value("SIFDownCalFile3").toString();
+ return 0;
+ }
+
+ int ZZ_SysConfigger::LoadSettingsFromFile_System()
+ {
+ // QString qstr = m_qjoJObj.value("IntervalTime").toString();
+ m_struAcqTime.qtStartTime=QTime::fromString(m_qjoJObj.value("BeginTime").toString(), "hh:mm");
+ if (!m_struAcqTime.qtStartTime.isValid())
+ {
+ qDebug() << "Invalid BeginTime";
+ return 1;
+ }
+
+#ifdef _DEBUG
+ m_struAcqTime.qtInterval = QTime::fromString(m_qjoJObj.value("IntervalTime").toString(), "ss");
+ if (!m_struAcqTime.qtInterval.isValid())
+ {
+ qDebug() << "Invalid IntervalTime";
+ return 1;
+ }
+#else
+ m_struAcqTime.qtInterval = QTime::fromString(m_qjoJObj.value("IntervalTime").toString(), "mm");
+ if (!m_struAcqTime.qtInterval.isValid())
+ {
+ qDebug() << "Invalid IntervalTime";
+ return 1;
+ }
+#endif
+
+ m_struAcqTime.qtStopTime = QTime::fromString(m_qjoJObj.value("EndTime").toString(), "hh:mm");
+ if (!m_struAcqTime.qtStopTime.isValid())
+ {
+ qDebug() << "Invalid EndTime";
+ return 1;
+ }
+
+ return 0;
+ }
+
+ int ZZ_SysConfigger::LoadSettingsFromFile_MISC()
+ {
+ m_struEC.qstrLocation = m_qjoJObj.value("Location").toString();
+ m_struEC.qstrGPS_Altitude = m_qjoJObj.value("GPS_Altitude").toString();
+ m_struEC.qstrGPS_Latitude = m_qjoJObj.value("GPS_Latitude").toString();
+ m_struEC.qstrGPS_Longtitude = m_qjoJObj.value("GPS_Longtitude").toString();
+ m_struEC.qstrGPS_North = m_qjoJObj.value("GPS_North").toString();
+
+ m_struMEC.qstrInstallationTime = m_qjoJObj.value("InstallationTime").toString();
+ m_struMEC.qstrISIFCalibrationTime = m_qjoJObj.value("ISIFCalibrationTime").toString();
+ m_struMEC.qstrIS1CalibrationTime = m_qjoJObj.value("IS1CalibrationTime").toString();
+ m_struMEC.qstrNameOfMaintenanceStaff = m_qjoJObj.value("NameOfMaintenanceStaff").toString();
+ m_struMEC.qstrPhoneNumberOfMaintenanceStaff = m_qjoJObj.value("PhoneNumberOfMaintenanceStaff").toString();
+ m_struMEC.qstrDownloadUserID = m_qjoJObj.value("DownloadUserID").toString();
+ m_struMEC.qstrDownlaodAddress = m_qjoJObj.value("DownlaodAddress").toString();
+
+
+
+ return 0;
+ }
+
+ int ZZ_SysConfigger::LoadSettings_Test()
+ {
+ QFile qfTest(m_qstrJSONConfigFilePath);
+
+ qfTest.open(QFile::ReadOnly);
+
+ QByteArray qbJData = qfTest.readAll();
+
+ QJsonParseError jerr;
+ QJsonDocument jdoc(QJsonDocument::fromJson(qbJData, &jerr));
+ if (jerr.error!= QJsonParseError::NoError)
+ {
+ qDebug() << jerr.errorString();
+ }
+
+ QJsonObject rootobj = jdoc.object();
+ QStringList key = rootobj.keys();
+ QString qtest1 = rootobj.value(rootobj.keys().at(15)).toString();
+ return 0;
+ }
diff --git a/othersoft/movingliner/source/Settings/SystemConfigger.h b/othersoft/movingliner/source/Settings/SystemConfigger.h
new file mode 100644
index 0000000..6f237a2
--- /dev/null
+++ b/othersoft/movingliner/source/Settings/SystemConfigger.h
@@ -0,0 +1,57 @@
+#pragma once
+#include "pch.h"
+#include "ZZ_Types.h"
+using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
+using namespace ZZ_MISCDEF::ZZ_DATAFILE;
+
+class ZZ_SysConfigger :public QObject
+{
+ Q_OBJECT
+
+public:
+ ZZ_SysConfigger(QObject *parent = nullptr);
+ virtual ~ZZ_SysConfigger();
+public:
+ int Initialize();
+ int GetGrabberRunParams(RunTimeGrabberParams &struGrabberRTParams);
+
+ int LoadSettingsFromFile_IS1();
+ int LoadSettingsFromFile_iSIF();
+ int LoadSettingsFromFile_System();
+ int LoadSettingsFromFile_MISC();
+ int LoadSettings_Test();
+public:
+ enum ConfiggerDeviceModel
+ {
+ OSIFAlpha = 0,
+ OSIFBeta,
+ ISIF,
+ IS1,
+ IS2,
+ Null
+ };
+ Q_ENUM(ConfiggerDeviceModel);
+ //////////////////////////////////////////////////////////////////////////run-time settings
+ AcqTimeSettings m_struAcqTime;
+ FSContext m_struDeviceContext;
+ AcqPosSettings m_struAcqPosition;
+ //////////////////////////////////////////////////////////////////////////
+ EContext m_struEC;
+ MEContext m_struMEC;
+ IS1Info m_struIS1Info;
+ ISIFInfo m_struISIFInfo;
+
+private:
+ QString m_qstrDeviceConfigFilePath;
+ QString m_qstrJSONConfigFilePath;
+ QFile qfJConfig/*,qfDeviceConfig*/;
+ QSettings *m_qsDeviceConfig;
+
+ QByteArray m_qbaJData;
+ QJsonParseError m_qjpeJErr;
+ QJsonObject m_qjoJObj;
+ QJsonDocument m_qjdJDoc;
+
+
+
+};
\ No newline at end of file
diff --git a/othersoft/shuttercali/project/LocationCali/CMakeLists.txt b/othersoft/shuttercali/project/LocationCali/CMakeLists.txt
new file mode 100644
index 0000000..3f78fd7
--- /dev/null
+++ b/othersoft/shuttercali/project/LocationCali/CMakeLists.txt
@@ -0,0 +1,46 @@
+cmake_minimum_required(VERSION 3.3)
+
+project(shutter_calibrate)
+set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} C:/Qt/Qt5.12.7/5.12.7/mingw73_64)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTORCC ON)
+set(QT Core Gui Network WebSockets SerialPort Widgets)
+set(CMAKE_CXX_STANDARD 14)
+find_package(Qt5 REQUIRED ${QT})
+
+
+file(GLOB_RECURSE HDR_LIST "../../source/*.h")
+file(GLOB_RECURSE SRC_LIST "../../source/*.cpp")
+file(GLOB_RECURSE HDR_LIST1 "../../source_rlx/*.h")
+file(GLOB_RECURSE SRC_LIST1 "../../source_rlx/*.cpp")
+
+include_directories("../../source")
+include_directories("../../source/FS")
+include_directories("../../source/Logger")
+include_directories("../../source/ZZ_SDK")
+include_directories("../../source/Settings")
+include_directories("../../source/Thread")
+include_directories("../../source/LinearShutter")
+include_directories("../../source_rlx/ShutterCali")
+include_directories("../../source_rlx/sensor")
+include_directories("../../source/OSIF/include")
+include_directories("D:/02Raspberry/2020-12-17/SeaBreeze/include")
+link_directories("D:/02Raspberry/2020-12-17/SeaBreeze/lib")
+link_directories("/home/pi/SeaBrease/lib")
+add_executable( shutter_calibrate main.cpp
+ ${HDR_LIST}
+ ${SRC_LIST}
+ ${HDR_LIST1}
+ ${SRC_LIST1}
+)
+qt5_use_modules(shutter_calibrate ${QT})
+target_link_libraries(shutter_calibrate SeaBreeze)
+IF (WIN32)
+target_link_libraries(shutter_calibrate SeaBreeze)
+ELSE ()
+target_link_libraries(shutter_calibrate seabreeze usb stdc++ m)
+ENDIF ()
+set_target_properties(shutter_calibrate PROPERTIES AUTOMOC ON)
+
+
diff --git a/othersoft/shuttercali/project/LocationCali/SeaBreeze.dll b/othersoft/shuttercali/project/LocationCali/SeaBreeze.dll
new file mode 100644
index 0000000000000000000000000000000000000000..66bc74c7275bdbbb154cba9fe216d8e8b13f5bd0
GIT binary patch
literal 2670080
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