#include "library.h" #include #include OceanOptics_lib::OceanOptics_lib() { m_iSpectralmeterHandle=-100; } OceanOptics_lib::~OceanOptics_lib() { } //使用头文件:#include "api/SeaBreezeWrapper.h" int OceanOptics_lib::Initialize(bool bIsUSBMode,ZZ_U8 ucPortNumber,std::string strDeviceName) { int flag; 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("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); if(0 == flag) { device_count++; } else { continue; } string sn = GetSerialNumber(i); if(strcmp(sn.c_str(),strDeviceName.c_str())==0) { m_iSpectralmeterHandle = i; // printf("\nfind!!!!!!!!!!!!\n"); break; } else { // printf("\nClosing spectrometer %d.\n", i); flag = seabreeze_close_spectrometer(i, &error); // printf("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); } } if(m_iSpectralmeterHandle==-100) { // printf("\nNo!!!!!!!!!!!!\n"); return 1; } seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); long test = seabreeze_get_buffer_capacity_minimum(m_iSpectralmeterHandle, &error); seabreeze_set_buffer_capacity(m_iSpectralmeterHandle, &error, test); // printf("seabreeze_set_trigger_mode: Result is [%s]\n", get_error_string(error)); //设置初始积分时间 long minimum_time; minimum_time = seabreeze_get_min_integration_time_microsec(m_iSpectralmeterHandle, &error); //printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); bool ret = isSuccess((char*)get_error_string(error)); if (!ret) { // printf("\n-------------------没成功!!!!!!!!!!!!!!!!!!\n"); return 1; } if(minimum_time < 0) { /* If there was an error, reset to a time that is supported widely. */ minimum_time = 15000; return 1; } SetExposureTime(minimum_time/1000); return 0; } //使用头文件:#include "api/SeaBreezeWrapper.h" int OceanOptics_lib::Initialize() { int flag; 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("Open spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); if(0 == flag) { m_iSpectralmeterHandle = i; break; } else { continue; } } if(m_iSpectralmeterHandle==-100) { printf("\nNo!!!!!!!!!!!!\n"); return 1; } seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); seabreeze_set_trigger_mode(m_iSpectralmeterHandle, &error, 0); long test = seabreeze_get_buffer_capacity_minimum(m_iSpectralmeterHandle, &error); printf("seabreeze_get_buffer_capacity_minimum: Result is [%s]\n", get_error_string(error)); seabreeze_set_buffer_capacity(m_iSpectralmeterHandle, &error, test); printf("seabreeze_set_buffer_capacity: Result is [%s]\n", get_error_string(error)); // printf("seabreeze_set_trigger_mode: Result is [%s]\n", get_error_string(error)); //设置初始积分时间 long minimum_time; minimum_time = seabreeze_get_min_integration_time_microsec(m_iSpectralmeterHandle, &error); //printf("...Minimum is %ld microseconds, result is [%s]\n", minimum_time, get_error_string(error)); bool ret = isSuccess((char*)get_error_string(error)); if (!ret) { // printf("\n-------------------没成功!!!!!!!!!!!!!!!!!!\n"); return 1; } if(minimum_time < 0) { /* If there was an error, reset to a time that is supported widely. */ minimum_time = 15000; return 1; } SetExposureTime(minimum_time/1000); return 0; } //使用头文件:#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("Close spectrometer result is (%d) [%s]\n", flag, get_error_string(error)); } //单次数据采集 int OceanOptics_lib::SingleShot(DataFrame &dfData) { if(m_iSpectralmeterHandle==-100) { printf("\nNo!!!!!!!!!!!!\n"); return 1; } int error; int flag; int spec_length; double *spectrum = 0; bool ret; // printf("\n\nGetting formatted spectrum length.\n"); spec_length = seabreeze_get_formatted_spectrum_length(m_iSpectralmeterHandle, &error); //printf("Get formatted spectrum_length result is (%d) [%s]\n", spec_length, get_error_string(error)); ret = isSuccess((char*)get_error_string(error)); if (!ret) { return 1; } if(spec_length > 0) { spectrum = (double *)calloc((size_t)spec_length, sizeof(double)); seabreeze_clear_buffer(m_iSpectralmeterHandle, &error); auto startTime = std::chrono::high_resolution_clock::now(); flag = seabreeze_get_formatted_spectrum(m_iSpectralmeterHandle, &error, spectrum, spec_length); auto endTime = std::chrono::high_resolution_clock::now(); std::chrono::duration fp_ms = endTime - startTime; std::cout <<"采集耗时为:"<< fp_ms.count()/1000 <<"s."<< std::endl; // printf("Get formatted spectrum result is (%d) [%s]\n", flag, get_error_string(error)); // printf("\tPixel value 20 is %1.2f\n", spectrum[20]); ret = isSuccess((char*)get_error_string(error)); if (!ret) { return 1; } 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("Get wavelengths result is (%d) [%s]\n", flag, get_error_string(error)); // printf("\tPixel 20 is wavelength %1.2f nm\n", wls[20]); bool ret = isSuccess((char*)get_error_string(error)); if (!ret) { return 1; } for(int tmp = 0; tmp 0) { printf("\tSerial number: [%s]\n", serial_number); } string sn = serial_number; return sn; }