Files
oceanControlLib/ocean_lib/library.cpp

309 lines
8.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "library.h"
#include <iostream>
#include <cstring>
//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 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("...Result is (%d) [%s]\n", flag, get_error_string(error));
if(0 == flag)
{
device_count++;
}
string sn = GetSerialNumber(i);
if(strcmp(sn.c_str(),strDeviceName.c_str())==0)
{
m_iSpectralmeterHandle = i;
printf("\nfind!!!!!!!!!!!!\n");
break;
}
}
// for(i = 0; i < device_count; i++)
// {
// printf("\nGetting device %d name.\n", i);
// seabreeze_get_model(i, &error, type, sizeof(type));
// printf("...Result is (%s) [%s]\n", type, get_error_string(error));
//
// GetSerialNumber(i);
// }
return 1;
}
//使用头文件:#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 <<std::endl;
// if(0 == number_of_devices) {
// return 0;
// }
//
// printf("Getting device IDs...\n");
// device_ids = (long *)calloc(number_of_devices, sizeof(long));
// number_of_devices = sbapi_get_device_ids(device_ids, number_of_devices);
// printf("Got %d device ID%s.\n", number_of_devices, number_of_devices == 1 ? "" : "s"); fflush(stdout);
//
//
// for(i = 0; i < number_of_devices; i++)
// {
// printf("%d: Device 0x%02lX:\n", i, device_ids[i]);
//// printf("\tGetting device type...\n");
// flag = sbapi_get_device_type(device_ids[i], &error, nameBuffer, 79);
//// printf("\t\tResult is (%d) [%s]\n", flag, sbapi_get_error_string(error));
// if(flag > 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<spec_length; tmp++)
{
dfData.usData[tmp]=spectrum[tmp];
}
int exposureTimeInMS;
GetExposureTime(exposureTimeInMS);
dfData.usExposureTimeInMS = exposureTimeInMS;
float temperature;
GetDeviceTemperature(temperature);
dfData.fTemperature = temperature;
free(spectrum);
}
return 1;
}
//设置曝光时间
int OceanOptics_lib::SetExposureTime(int iExposureTimeInMS)
{
int flag;
int error;
seabreeze_set_integration_time_microsec(m_iSpectralmeterHandle, &error, iExposureTimeInMS);
printf("...Result is [%s]\n", get_error_string(error));
return 1;
}
//获取曝光时间设置
int OceanOptics_lib::GetExposureTime(int &iExposureTimeInMS)
{
long minimum_time;
int error;
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));
if(minimum_time < 0) {
/* If there was an error, reset to a time that is supported widely. */
minimum_time = 15000;
}
iExposureTimeInMS = minimum_time;
return 1;
}
//设置目标温度
int OceanOptics_lib::SetDeviceTemperature(float fTemperature)
{
int error;
printf("\nSetting TEC temperature to -5C\n");
seabreeze_set_tec_temperature(m_iSpectralmeterHandle, &error, fTemperature);
printf("...Result is [%s]\n", get_error_string(error));
printf("\nSetting TEC enable to true\n");
seabreeze_set_tec_enable(m_iSpectralmeterHandle, &error, 1);
printf("...Result is [%s]\n", get_error_string(error));
return 1;
}
//获取温度设置
int OceanOptics_lib::GetDeviceTemperature(float &fTemperature)
{
double temp;
int error;
// usleep(1000000);
printf("\nGetting TEC temperature\n");
temp = seabreeze_read_tec_temperature(m_iSpectralmeterHandle, &error);
printf("...Result is %1.2f C [%s]\n", temp, get_error_string(error));
fTemperature = temp;
return 1;
}
//获取设备信息
int OceanOptics_lib::GetDeviceInfo(DeviceInfo &Info)
{
string sn = GetSerialNumber(m_iSpectralmeterHandle);
Info.strSN = sn;
return 1;
}
//获取设备特征数据
int OceanOptics_lib::GetDeviceAttribute(DeviceAttribute &Attr)
{
int error;
int flag;
int spec_length;
double *wls = 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));
Attr.iPixels = spec_length;
Attr.iMinIntegrationTimeInMS = 0;
Attr.iMaxIntegrationTimeInMS = 60000;
if(spec_length > 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<spec_length; tmp++)
{
Attr.fWaveLengthInNM[tmp]=wls[tmp];
}
free(wls);
}
return 1;
}
const char* OceanOptics_lib::get_error_string(int error)
{
static char buffer[32];
seabreeze_get_error_string(error, buffer, sizeof(buffer));
return buffer;
}
string OceanOptics_lib::GetSerialNumber(int index)
{
static char serial_number[32];//如果不加static此变量会定义在stack区函数返回后就无用了
int flag;
int error;
printf("\n\nGetting serial number.\n");
flag = seabreeze_get_serial_number(index, &error, serial_number, 32);
printf("...Result is (%d) [%s]\n", flag, get_error_string(error));
serial_number[31] = '\0';
if(flag > 0) {
printf("\tSerial number: [%s]\n", serial_number);
}
string sn = serial_number;
return sn;
}