2021-11-25 18:50:24 +08:00
# include "library.h"
# include <iostream>
2021-11-26 18:25:26 +08:00
# include <cstring>
2021-11-25 18:50:24 +08:00
//void hello() {
// std::cout << "Hello, World!" << std::endl;
//}
2021-11-26 18:25:26 +08:00
//ʹ <> <CAB9> ͷ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> #include "api/SeaBreezeWrapper.h"
2021-11-25 18:50:24 +08:00
int OceanOptics_lib : : Initialize ( bool bIsUSBMode , ZZ_U8 ucPortNumber , std : : string strDeviceName )
{
int flag ;
2021-11-26 18:25:26 +08:00
int error ;
char type [ 16 ] ;
int device_count = 0 ;
int i ;
2021-11-25 18:50:24 +08:00
2021-11-26 18:25:26 +08:00
for ( i = 0 ; i < SEABREEZE_MAX_DEVICES ; i + + )
{
printf ( " \n Opening 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 ) ;
2021-11-25 18:50:24 +08:00
2021-11-26 18:25:26 +08:00
if ( strcmp ( sn . c_str ( ) , strDeviceName . c_str ( ) ) = = 0 )
{
m_iSpectralmeterHandle = i ;
printf ( " \n find!!!!!!!!!!!! \n " ) ;
break ;
}
2021-11-25 18:50:24 +08:00
}
2021-11-26 18:25:26 +08:00
// 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);
// }
2021-11-25 18:50:24 +08:00
2021-11-26 18:25:26 +08:00
return 1 ;
}
2021-11-25 18:50:24 +08:00
2021-11-26 18:25:26 +08:00
//ʹ <> <CAB9> ͷ<EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> #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;
2021-11-25 18:50:24 +08:00
//
//
2021-11-26 18:25:26 +08:00
//// /* 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);
//
2021-11-25 18:50:24 +08:00
//
2021-11-26 18:25:26 +08:00
// 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);
2021-11-25 18:50:24 +08:00
// }
//
2021-11-26 18:25:26 +08:00
// 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;
//}
//<2F> ر<EFBFBD> <D8B1> 豸
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 ) ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݲɼ<DDB2>
int OceanOptics_lib : : SingleShot ( DataFrame & dfData )
{
int error ;
int flag ;
int spec_length ;
double * spectrum = 0 ;
printf ( " \n \n Getting 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 ( " \n Getting 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 ( " \t Pixel 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 ) ;
2021-11-25 18:50:24 +08:00
}
2021-11-26 18:25:26 +08:00
return 1 ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ع<EFBFBD> ʱ<EFBFBD> <CAB1>
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 ;
}
//<2F> <> ȡ<EFBFBD> ع<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
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 ;
}
//<2F> <> <EFBFBD> <EFBFBD> Ŀ<EFBFBD> <C4BF> <EFBFBD> ¶<EFBFBD>
int OceanOptics_lib : : SetDeviceTemperature ( float fTemperature )
{
int error ;
printf ( " \n Setting TEC temperature to -5C \n " ) ;
seabreeze_set_tec_temperature ( m_iSpectralmeterHandle , & error , fTemperature ) ;
printf ( " ...Result is [%s] \n " , get_error_string ( error ) ) ;
printf ( " \n Setting TEC enable to true \n " ) ;
seabreeze_set_tec_enable ( m_iSpectralmeterHandle , & error , 1 ) ;
printf ( " ...Result is [%s] \n " , get_error_string ( error ) ) ;
return 1 ;
}
//<2F> <> ȡ<EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <EFBFBD> <EFBFBD>
int OceanOptics_lib : : GetDeviceTemperature ( float & fTemperature )
{
double temp ;
int error ;
// usleep(1000000);
printf ( " \n Getting 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 ;
}
//<2F> <> ȡ<EFBFBD> 豸<EFBFBD> <E8B1B8> Ϣ
int OceanOptics_lib : : GetDeviceInfo ( DeviceInfo & Info )
{
string sn = GetSerialNumber ( m_iSpectralmeterHandle ) ;
Info . strSN = sn ;
return 1 ;
}
//<2F> <> ȡ<EFBFBD> 豸<EFBFBD> <E8B1B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
int OceanOptics_lib : : GetDeviceAttribute ( DeviceAttribute & Attr )
{
int error ;
int flag ;
int spec_length ;
double * wls = 0 ;
printf ( " \n \n Getting 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 ( " \n Getting wavelengths. \n " ) ;
flag = seabreeze_get_wavelengths ( m_iSpectralmeterHandle , & error , wls , spec_length ) ;
printf ( " ...Result is (%d) [%s] \n " , flag , get_error_string ( error ) ) ;
printf ( " \t Pixel 20 is wavelength %1.2f nm \n " , wls [ 20 ] ) ;
for ( int tmp = 0 ; tmp < spec_length ; tmp + + )
{
Attr . fWaveLengthInNM [ tmp ] = wls [ tmp ] ;
}
free ( wls ) ;
}
2021-11-25 18:50:24 +08:00
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 ;
}
2021-11-26 18:25:26 +08:00
string OceanOptics_lib : : GetSerialNumber ( int index )
2021-11-25 18:50:24 +08:00
{
2021-11-26 18:25:26 +08:00
static char serial_number [ 32 ] ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> static<69> <63> <EFBFBD> ˱<EFBFBD> <CBB1> <EFBFBD> <EFBFBD> ᶨ<EFBFBD> <E1B6A8> <EFBFBD> <EFBFBD> stack<63> <6B> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> غ<D8BA> <F3A3ACBE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2021-11-25 18:50:24 +08:00
int flag ;
int error ;
printf ( " \n \n Getting 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 ( " \t Serial number: [%s] \n " , serial_number ) ;
}
2021-11-26 18:25:26 +08:00
string sn = serial_number ;
return sn ;
2021-11-25 18:50:24 +08:00
}