#pragma once
#include "UAVrtp.h"
// #ifdef DEVICEMANAGE_EXPORTS
// #include "UserConfigInfo.h"
// #include "OneChannelConfigInfo.h"
// #include "OneDeviceComptonSuppressSetting.h"
// #endif
#ifdef DEVICEMANAGE_EXPORTS
#define DEVICEMANAGE_API(type) extern "C" _declspec(dllexport) type _stdcall
#else
#define DEVICEMANAGE_API(type) extern "C" _declspec(dllexport) type _stdcall
#endif
// #include "OneComptonResultDataExport.h"
#ifdef __cplusplus
extern "C" {
#endif
enum eMCSystemType
{
eReserve,
eHPGEDEFAULE = 1,
eCombineDevice = 2,
eProxyDevice = 3,
eRoundMC = 10,
eRoundMCV1 = 11, // 第二通道计数
eRoundMCHightThroughtput = 12, // 圆筒多道高计数率
eFP5XMC = 13,
eDMCA2023 = 14,
eHPGEMC = 30,
eMulParamMC = 50,
eDP3402PLUSMC = 51,
eMulParam863MC = 60,
eNeutronCount = 70,
eAnalogMC = 80,
eAnalogDigtalMC = 81,
eHightThroughtMC=90,
eHightThroughtMCCh2 = 91,
eGeneralMC = 92,
eAlphaMC = 93,
eHVDevice = 100,
};
// 添加新的采样率后,需要注意在DeviceInfo.cpp中添加对应的索引
// 添加新的采样率后,需要注意在DeviceInfo.h 中修改SampleRateInMbpsToSampleRate修改
enum eSampleRate
{
eNone,
e80M,
e250M,
e500M,
e50M,
e200M,
e1G,
e125M,
};
#pragma pack(push,1)
struct sDeviceInfo
{
char GUID[64];
char SystemVersion[16];
char CommVersion[16];
eMCSystemType type;
char MacAddr[32];
char FilePath[MAX_PATH];
unsigned char reserve[60];
};
class ChannelOpInfo
{
public:
BOOL canop;
double adcperiod;
eSampleRate samplerate;
double lmperiod;
int adcmaxvalue;
double adcvoltageinmv;
};
typedef struct sDeviceDataPtr
{
int totalNum;
void *pData[64];
}sDeviceDataPtr;
class DeviceData
{
public:
int len = 1024*1024;
BYTE pdata[1024*1024];
};
enum eDeviceManageOperate
{
eAddDevice,
eRemoveDevice,
};
enum eDeviceType
{
// 硬件设备
eHardwareDevice,
// 回放设备
eReplayDevice,
// 文件设备
eFileDevice,
// 硬件组合设备
eHardwareCombineDevice,
// 回放组合设备
eReplayCombineDevice,
// 代理设备
eDTProxyDevice,
};
enum eSprtOptType
{
eAdd,
eDec,
};
enum eDisplaSprtInfoType;
typedef struct sOneSprtOptInfo
{
void *pdev;
int bdidx;
int chidx;
eSprtOptType opttype;
eDisplaSprtInfoType sprttype;
}sOneSprtOptInfo;
class OneNeutronData
{
public:
int chnum;
__int64 measuretime;
__int64 lowercount;
__int64 betweencount;
__int64 ttlcount;
unsigned char reserve[32];
};
#ifndef DEVICEMANAGE_EXPORTS
#define ALIAS_NALE_LEN 64
enum eTransferMode
{
eSpecturmMode,
eFormWaveMode,
eADCMode,
eListMode,
eABMode,
};
enum eAutoSteadyStatus
{
a, // 未开启,
b, // 稳谱中,
c, // 稳谱完成,
d, // 不支持,
e, // 校准中,
f, // 稳谱失败,
g, // 校准失败,
h, // 等待中,
};
typedef struct sAutoSteadyParam
{
BOOL bEnable;
eAutoSteadyStatus status;
float offset; // 10
float a;
float b;
float c;
unsigned short maxchanneldivfactor;
unsigned short peakchannel; // 26
unsigned short steadyPeriodInSec; // 28
unsigned short peakhalfwidth; // 30
double dc;
}sAutoSteadyParam;
class UserConfigInfo
{
public:
char m_cAliasName[ALIAS_NALE_LEN];
char _strMCName[32];
int _iBDNum;
int _iChNum;
BOOL _bDisplayOrgCptSprt;
BOOL _bDisplayComptonCptSprt;
BOOL _bDisplayAntiComptonCptSprt;
BOOL _bDisplayLMSprt;
BOOL _bDisplayRiseTimeSprt;
BOOL _bDisplayFallTimeSprt;
__int64 _i64AdjustTickCount;
__int64 _i64MinAllowTickCount;
__int64 _i64MaxAllowTickCount;
BOOL _bDisplayConfig;
BOOL _bSaveLMData;
BOOL _bWork;
sAutoSteadyParam asp;
char m_cReserve[16];
};
class OneChannelConfigInfo
{
public:
void *__vfp;
///
/// 数据传输模式
///
eTransferMode m_eTransferModel = eSpecturmMode;
///
/// 硬件增益
///
int m_iDeviceGain = 1;
///
/// 硬件增益
///
int m_iDeviceGainSelectIndex = 1;
///
/// 软件增益
///
int m_iSoftGain = 3000;
///
/// 时间常数
///
double m_dConstTime = 45;
///
/// 成形时间
///
int m_iFormTime = 3;
///
/// 快通道触发阈值
///
double m_iFastChannelTrigerValue = 10;
///
/// 多道分辨率
///
int m_iChannelNum = 1024;
int m_iHighVoltage = 0;
// sParamConfig ParamConfig;
///
/// 输入12V信号衰减控制(1个ASCii字符表示)。‘0’表示关闭,‘1’表示启用衰减,偏移量2
///
int m_iInputVoltageDesc = 0;
///
/// CR微分模式启用(1个ASCii字符表示)。‘0’表示关闭,‘1’表示启用CR微分,偏移量3。对于复位型前放其输出的为阶梯信号,此时应启用CR微分,否则可不启用
///
int m_iCRDivMode = 0;
///
/// 输入信号正负极性选择(1个ASCii字符表示)。‘0’表示负信号,‘1’表示正信号,偏移量4
///
int m_iInputSignalPostive = 0;
///
/// 第一位为符号位,后四位为数值,以mV为单位,譬如’+0200’表示直流偏移200mV, 地址偏移量5-9
///
int m_iCurrentOffset = 0;
///
/// 最大能量范围,以keV为单位(5个ASCII字符) 譬如’04000’,表示最大能量范围为4MeV。设置为全零‘00000’则表示关闭自动稳谱功能。
///
int m_iMaxEnergy = 0;
///
/// Am峰面积寻峰法的面积比例 例如:‘15’表示截取峰顶高度15%的面积用于面积法寻峰
///
int m_iAMPeakDiv = 0;
///
/// K-40与Am-241的峰位校正系数 例如:‘24513’表示K-40与Am-241的峰位换算系数为24.513
///
short m_iHVDelt = 0;
short m_iHVCtrl = 0;
int m_iGetSpecturmPeirod = 1;
__int64 m_iTotalMeasureTime = 10;
int m_iTotalMeasureCount = 1;
int m_iTrapeTopShitBit = 0;
int m_iRiseTime = 2;
int m_iTopTime = 2;
BOOL m_bICRCorrect = FALSE;
int m_iCRZAValue = 0;
int m_iZAEnable = 30;
BYTE reserve[128];
UserConfigInfo m_pUserConfigInfo;
};
#endif
typedef void(__stdcall *ONFINDDEVICEFINISHED)(int ret, sDeviceList* pDeviceList);
typedef void(__stdcall *ONUPDATEONEDEVICEBOARDDATA)(void* pHandle, sDeviceDataPtr *pdata);
typedef void(__stdcall *ONUPDATEONEDEVICECOMPTOMSUPRESSDATA)(void* pHandle,void *pComptonSet, sDeviceDataPtr *pdata);
typedef void(__stdcall *ONDEVICEMANAGECHANGED)(eDeviceManageOperate op, int ret, sDeviceList *pDeviceList);
typedef void(__stdcall *ONUPDATE_NEUTRONDATA)(void* pHandle, int ret, OneNeutronData* pData, int iLen);
typedef void(__stdcall *ONUPDATE_DEVICE_CONFIG)(void* pHandle, int bdnum,int chnum, void* pData, int iLen,void *pData2, int iLen2);
typedef void(__stdcall *ONUPDATE_PRESENT_CONFIG)(void* pHandle, int bdnum, int chnum);
// 更新设备配置结构信息
typedef void(__stdcall *ONUPDATE_DEVICE_STRUCT)(void* pHandle,void *pParent,int maxParentNum,void *pChild,int MaxChildNum, void *reserve);
DEVICEMANAGE_API(int) FindDeviceAsync(sFindDeviceConfig *fdc, ONFINDDEVICEFINISHED OnFindFinished);
DEVICEMANAGE_API(int) GetDeviceInfo(void *pHandle, sDeviceInfo *spDi, int budnum, int chnum);
DEVICEMANAGE_API(int) GetDeviceBoardTotalNum(void *pHandle);
DEVICEMANAGE_API(int) GetDeviceChTotalNum(void *pHandle, int bdidx);
DEVICEMANAGE_API(int) GetDeviceUserInfo(void *pHandle, UserConfigInfo *pUCI);
DEVICEMANAGE_API(int) SetDeviceUserInfo(void *pHandle, UserConfigInfo *pUCI);
DEVICEMANAGE_API(int) GetDeviceBoardUserInfo(void *pHandle, UserConfigInfo *pUCI, int bdidx);
DEVICEMANAGE_API(int) GetDeviceBoardChannelUserInfo(void *pHandle, UserConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) SetDeviceBoardChannelUserInfo(void *pHandle, UserConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) GetDeviceBoardChannelConfiginfo(void *pHandle, OneChannelConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCSetHightVoltage(void *pHandle, OneChannelConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCSoftParamConfig(void *pHandle, OneChannelConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCHardDeviceParamConfig(void *pHandle, OneChannelConfigInfo *pUCI, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCStartMeasure(void *pHandle, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCStopMeasure(void *pHandle, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCGetData(void *pHandle, int totalnum, DeviceData *pDevData, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCCombineGetData(void *pHandle, int totalnum, DeviceData *pDevData, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCSetUpdateDeviceBoardDataCallBack(void *pHandle, ONUPDATEONEDEVICEBOARDDATA d);
DEVICEMANAGE_API(int) DBCSetUpdateDeviceBoardLMPointDataCallBack(void *pHandle, ONUPDATEONEDEVICEBOARDDATA d);
DEVICEMANAGE_API(int) DBCClearData(void *pHandle, int bdidx, int chidx);
DEVICEMANAGE_API(int) DBCSaveConfig(void *pHandle);
// DEVICEMANAGE_API(int) DBCSetUpdateDeviceComptonSupressResultCallBack(void *pHandle, ONUPDATEONEDEVICECOMPTOMSUPRESSDATA d);
// DEVICEMANAGE_API(int) DBCGetDeviceAntiComptonSetting(void *pHandle, OneDeviceComptonSuppressSetting *pDevSet);
// DEVICEMANAGE_API(int) DBCGetDeviceOneMainAntiComptonSetting(void *pHandle, OneComptonSuppressSetting *pOneSet, int mainidx);
// DEVICEMANAGE_API(int) DBCGetDeviceOneSubAntiComptonSetting(void *pHandle, OneComptonSuppressSetting *pOneSet, int mainidx, int subidx);
// DEVICEMANAGE_API(int) DBCSetDeviceOneMainAntiComptonSetting(void *pHandle, OneComptonSuppressSetting *pOneSet, int mainidx);
// DEVICEMANAGE_API(int) DBCSetDeviceOneSubAntiComptonSetting(void *pHandle, OneComptonSuppressSetting *pOneSet, int mainidx, int subidx);
DEVICEMANAGE_API(void) DM_Con_Flushout();
DEVICEMANAGE_API(void) DM_Con_KeyPressEvent(char c, int codetype);
DEVICEMANAGE_API(void) DM_Con_Init(char *pStdOutBuff, int pStdOutBuffLen, char *pStdErrBuff, int pStdErrBuffLen);
DEVICEMANAGE_API(void) DM_Con_Exit();
DEVICEMANAGE_API(void) DM_Con_Run();
DEVICEMANAGE_API(void) DM_Con_Free(void *buf);
DEVICEMANAGE_API(int) CloseDevice(void *pHandle);
// 获取板卡通道对应的设备
DEVICEMANAGE_API(void*) DMGetOperateDevice(void *pHandle, int bdidx, int chidx);
// 设置查询保存lmaa格式
// set 参数为FALSE表示读取当前信息,如果为TRUE表示设置信息
// DEVICEMANAGE_API(int) DBCSaveAntiLMDataToFile(void *pHandle, int bdidx, int chidx, BOOL set, BOOL *bEnable, char *filename);
#pragma pack(pop)
#ifdef __cplusplus
}
#endif