From 1bfdf69189545699c61e9a3fbeda21363eb99738 Mon Sep 17 00:00:00 2001 From: tangchao Date: Fri, 26 Nov 2021 18:25:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8SeaBreezeWrapper.h=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=B5=B7=E6=B4=8B=E5=85=89=E5=AD=A6=E4=BB=AA=E5=99=A8?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ocean_lib/IrisFiberSpectrometerBase.h | 46 ++-- ocean_lib/ZZ_Types.h | 4 +- ocean_lib/library.cpp | 319 +++++++++++++++++++++----- ocean_lib/library.h | 64 +++--- 4 files changed, 323 insertions(+), 110 deletions(-) diff --git a/ocean_lib/IrisFiberSpectrometerBase.h b/ocean_lib/IrisFiberSpectrometerBase.h index c271a5f..ebf17d7 100644 --- a/ocean_lib/IrisFiberSpectrometerBase.h +++ b/ocean_lib/IrisFiberSpectrometerBase.h @@ -15,28 +15,28 @@ public: //0为无错误,不同错误请返回不同值 virtual int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName) = 0; -// //关闭设备 -// virtual void Close() = 0; -// -// //单次数据采集 -// virtual int SingleShot(DataFrame &dfData) = 0; -// -// //设置曝光时间 -// virtual int SetExposureTime(int iExposureTimeInMS) = 0; -// -// //获取曝光时间设置 -// virtual int GetExposureTime(int &iExposureTimeInMS) = 0; -// -// //设置目标温度 -// virtual int SetDeviceTemperature(float fTemperature) = 0; -// -// //获取温度设置 -// virtual int GetDeviceTemperature(float &fTemperature) = 0; -// -// //获取设备信息 -// virtual int GetDeviceInfo(DeviceInfo &Info) = 0; -// -// //获取设备特征数据 -// virtual int GetDeviceAttribute(DeviceAttribute &Attr) = 0; + //关闭设备 + virtual void Close() = 0; + + //单次数据采集 + virtual int SingleShot(DataFrame &dfData) = 0; + + //设置曝光时间 + virtual int SetExposureTime(int iExposureTimeInMS) = 0; + + //获取曝光时间设置 + virtual int GetExposureTime(int &iExposureTimeInMS) = 0; + + //设置目标温度 + virtual int SetDeviceTemperature(float fTemperature) = 0; + + //获取温度设置 + virtual int GetDeviceTemperature(float &fTemperature) = 0; + + //获取设备信息 + virtual int GetDeviceInfo(DeviceInfo &Info) = 0; + + //获取设备特征数据 + virtual int GetDeviceAttribute(DeviceAttribute &Attr) = 0; }; diff --git a/ocean_lib/ZZ_Types.h b/ocean_lib/ZZ_Types.h index abb4a8b..d7eeb99 100644 --- a/ocean_lib/ZZ_Types.h +++ b/ocean_lib/ZZ_Types.h @@ -22,12 +22,12 @@ namespace ZZ_MISCDEF ZZ_U16 usExposureTimeInMS; ZZ_U16 usData[4096]; float fTemperature; - double dTimes = 0; + double dTimes = 0;// }DataFrame; typedef struct tagDeviceInfo { - std::string strPN; + std::string strPN;// std::string strSN; }DeviceInfo; diff --git a/ocean_lib/library.cpp b/ocean_lib/library.cpp index 120d3f0..c6b412b 100644 --- a/ocean_lib/library.cpp +++ b/ocean_lib/library.cpp @@ -1,79 +1,282 @@ #include "library.h" #include +#include //void hello() { // std::cout << "Hello, World!" << std::endl; //} +//使用头文件:#include "api/SeaBreezeWrapper.h" int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName) { - int number_of_devices; - long *device_ids; - int i; int flag; - int error = 0; - char nameBuffer[80];//tangchao + int error; + char type[16]; + int device_count = 0; + int i; + for(i = 0; i < SEABREEZE_MAX_DEVICES; i++) + { + printf("\nOpening spectrometer %d.\n", i); + flag = seabreeze_open_spectrometer(i, &error); + printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); + if(0 == flag) + { + device_count++; + } + string sn = GetSerialNumber(i); - /* Give the driver a chance to initialize itself */ - sbapi_initialize(); - - printf("Probing for devices...\n"); fflush(stdout); - sbapi_probe_devices(); - - printf("Getting device count...\n"); fflush(stdout); - number_of_devices = sbapi_get_number_of_device_ids(); - std::cout<<"Device count is "<< number_of_devices < 0) { - printf("\tDevice type: [%s]\n", nameBuffer); +//使用头文件:#include "api/seabreezeapi/SeaBreezeAPI.h" +//int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName) +//{ +// int number_of_devices; +// long *device_ids; +// int i; +// int flag; +// int error = 0; +// char nameBuffer[80]; +// char *serialNumber; +// +// +//// /* Give the driver a chance to initialize itself */ +//// sbapi_initialize(); +// +// printf("Probing for devices...\n"); fflush(stdout); +// sbapi_probe_devices(); +// +// printf("Getting device count...\n"); fflush(stdout); +// number_of_devices = sbapi_get_number_of_device_ids(); +// std::cout<<"Device count is "<< number_of_devices < 0) { +// printf("\tDevice type: [%s]\n", nameBuffer); +// } +// +// serialNumber = GetSerialNumber(device_ids[i]); +// serialNumber = GetSerialNumber(device_ids[i]); +// +// printf("\tSerial number tc: [%s]\n", serialNumber); +// +//// /* Open the device */ +//// printf("\tAttempting to open:\n"); +//// flag = sbapi_open_device(device_ids[i], &error); +//// printf("\t\tResult is (%d) [%s]\n", flag, sbapi_get_error_string(error)); +//// +//// // jump to the next iteration if there was a problem +//// if(flag != 0) { +//// continue; +//// } +//// +//// // log deviations +//// unsupportedFeatureCount=0; +//// testFailureCount=0; +//// +//// /* Test the device */ +//// for(test_index = 0; test_index < __test_function_count; test_index++) { +//// /* Invoke each of the test functions against this device */ +//// __test_functions[test_index](device_ids[i], &unsupportedFeatureCount, &testFailureCount); +//// } +//// +//// /* Close the device */ +//// printf("\tAttempting to close:\n"); +//// sbapi_close_device(device_ids[i], &error); +//// printf("\t\tResult is (%d) [%s]\n", flag, sbapi_get_error_string(error)); +//// printf("%d: Device 0x%02lX: \n\tNumber of unsupported features = %d\n\tNumber of test failures = %d\n", i, device_ids[i], unsupportedFeatureCount, testFailureCount); +// } +// +// flag = sbapi_get_device_type(device_ids[i], &error, nameBuffer, 79); +// +// return 1; +//} + +//关闭设备 +void OceanOptics_lib::Close() +{ + int flag; + int error; + + flag = seabreeze_close_spectrometer(m_iSpectralmeterHandle, &error); + printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); +} + +//单次数据采集 +int OceanOptics_lib::SingleShot(DataFrame &dfData) +{ + int error; + int flag; + int spec_length; + double *spectrum = 0; + + printf("\n\nGetting formatted spectrum length.\n"); + spec_length = seabreeze_get_formatted_spectrum_length(m_iSpectralmeterHandle, &error); + printf("...Result is (%d) [%s]\n", spec_length, get_error_string(error)); + + if(spec_length > 0) { + spectrum = (double *)calloc((size_t)spec_length, sizeof(double)); + + printf("\nGetting a formatted spectrum.\n"); + flag = seabreeze_get_formatted_spectrum(m_iSpectralmeterHandle, &error, spectrum, spec_length); + printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); + printf("\tPixel value 20 is %1.2f\n", spectrum[20]); + + for(int tmp = 0; tmp 0) { + wls = (double *)calloc((size_t)spec_length, sizeof(double)); + + printf("\nGetting wavelengths.\n"); + flag = seabreeze_get_wavelengths(m_iSpectralmeterHandle, &error, wls, spec_length); + printf("...Result is (%d) [%s]\n", flag, get_error_string(error)); + printf("\tPixel 20 is wavelength %1.2f nm\n", wls[20]); + + for(int tmp = 0; tmp 0) { printf("\tSerial number: [%s]\n", serial_number); } + + string sn = serial_number; + + return sn; } diff --git a/ocean_lib/library.h b/ocean_lib/library.h index b9e6c2b..863404f 100644 --- a/ocean_lib/library.h +++ b/ocean_lib/library.h @@ -1,53 +1,59 @@ #ifndef OCEAN_LIB_LIBRARY_H #define OCEAN_LIB_LIBRARY_H -#include -#include -#include +#include +#include +#include #include #include "api/SeaBreezeWrapper.h" #include "IrisFiberSpectrometerBase.h" -#include "api/seabreezeapi/SeaBreezeAPI.h" +//#include "api/seabreezeapi/SeaBreezeAPI.h" //void hello(); +using namespace std; class OceanOptics_lib:public CIrisFSBase { + +private: + int m_iSpectralmeterHandle; + DeviceInfo m_deviceInfo; public: //鍒濆鍖栬澶 //姝ゅstring涓烘寚鏄庤繛鎺ュ摢涓猳cean鍏夎氨浠殑鍙傛暟锛屽彲鑷鏇存崲涓哄叾浠朿/c++鏍囧噯绫诲瀷 //0涓烘棤閿欒锛屼笉鍚岄敊璇杩斿洖涓嶅悓鍊 int Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName); -// -// //鍏抽棴璁惧 -// void Close(); -// -// //鍗曟鏁版嵁閲囬泦 -// int SingleShot(DataFrame &dfData); -// -// //璁剧疆鏇濆厜鏃堕棿 -// int SetExposureTime(int iExposureTimeInMS); -// -// //鑾峰彇鏇濆厜鏃堕棿璁剧疆 -// int GetExposureTime(int &iExposureTimeInMS); -// -// //璁剧疆鐩爣娓╁害 -// int SetDeviceTemperature(float fTemperature); -// -// //鑾峰彇娓╁害璁剧疆 -// int GetDeviceTemperature(float &fTemperature); -// -// //鑾峰彇璁惧淇℃伅 -// int GetDeviceInfo(DeviceInfo &Info); -// -// //鑾峰彇璁惧鐗瑰緛鏁版嵁 -// int GetDeviceAttribute(DeviceAttribute &Attr); + + //鍏抽棴璁惧 + void Close(); + + //鍗曟鏁版嵁閲囬泦 + int SingleShot(DataFrame &dfData); + + //璁剧疆鏇濆厜鏃堕棿 + int SetExposureTime(int iExposureTimeInMS); + + //鑾峰彇鏇濆厜鏃堕棿璁剧疆 + int GetExposureTime(int &iExposureTimeInMS); + + //璁剧疆鐩爣娓╁害 + int SetDeviceTemperature(float fTemperature); + + //鑾峰彇娓╁害璁剧疆 + int GetDeviceTemperature(float &fTemperature); + + //鑾峰彇璁惧淇℃伅 + int GetDeviceInfo(DeviceInfo &Info);//ok + + //鑾峰彇璁惧鐗瑰緛鏁版嵁 + int GetDeviceAttribute(DeviceAttribute &Attr); //tc static const char* get_error_string(int error); - void read_serial_number_test(int index); + string GetSerialNumber(int index); + };