/**
* @brief	本文件定义了API相关的变量与函数。注意使用UTF-8 with BOM编辑。
*/

#ifndef HTRA_API_H
#define HTRA_API_H

#define Major_Version 0 
#define Minor_Version 55
#define Increamental_Version 84

#define API_Version			 (Major_Version<<16)|(Minor_Version<<8)|(Increamental_Version)

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#if defined _WIN32 || defined __CYGWIN__
  #ifdef HTRA_API_EXPORTS
    #define HTRA_API __declspec(dllexport) // Note: actually gcc seems to also supports this syntax.
  #else
    #define HTRA_API
  #endif
#else
  #ifdef HTRA_API_EXPORTS
	#if __GNUC__ >= 4
		#define HTRA_API __attribute__ ((visibility ("default")))
	#else
		#define HTRA_API
	#endif
  #else
	#define HTRA_API
  #endif
#endif

/* 关键 用户数据类型 与 用户函数 的说明

用户数据类型是用户配置设备与从设备返回信息的核心内容，用户通过 用户数据类型 与 用户函数 实现API的使用，用户程序所使用到的数据类型如下

设备相关的 数据类型
BootProfile_TypeDef：设备启动所需要的配置信息
BootInfo_TypeDef：设备启动过程的反馈信息

设备相关的 主要函数
Device_Open(..)：打开设备，设备必须先打开（分配软硬件资源，比如内存与USB端口），再进行配置与调用
Device_Close(..)：关闭设备，设备结束使用后，需要关闭以让操作系统回收软硬件资源

标准频谱模式（SWP）相关的 数据类型 
SWP_Profile_TypeDef：SWP模式的配置信息
SWP_TraceInfo_TypeDef：SWP模式的配置反馈信息（迹线信息）
Freq_Hz[], PowerSpec_dBm[], HopIndex, FrameIndex, MeasAuxInfo：SWP获取的测量数据及附加信息，非封装形式
SWPSpectrum_TypeDef：SWP获取的测量数据及附加信息，封装形式

标准频谱模式（SWP）相关的 主要函数
SWP_ProfileDeInit(..,SWP_Profile)：将SWP_Profile配置信息初始化为默认值
SWP_Configuration(..,SWP_Profile, SWP_TraceInfo)：将设备配置为SWP模式，配置信息为SWP_Profile，并得到配置反馈信息SWP_TraceInfo
SWP_GetPartialSweep(.., Freq_Hz[], PowerSpec_dBm[], HopIndex, FrameIndex, MeasAuxInfo)：获取SWP模式的测量数据，部分迹线，使用标准数据数据结构，包含主要信息。
SWP_GetPartialSweep_PM1(.., SWPTrace_TypeDef)：获取SWP模式的测量数据，部分迹线，使用封装的数据结构体，包含全部信息。

IQ流模式（IQS）相关的 数据类型
IQS_Profile_TypeDef：IQS模式的配置信息
IQS_StreamInfo_TypeDef：IQS模式的配置反馈信息
IQStream_TypeDef：IQS模式获取的测量数据

IQ流模式（IQS）相关的 主要函数
IQS_ProfileDeInit(..)
IQS_Configuration(..)
IQS_BusTriggerStart(..)
IQS_BusTriggerStop(..)
IQS_GetIQStream(..,AlternIQStream, ScaleToV, TriggerInfo, MeasAuxInfo)
IQS_GetIQStream_PM1(..,IQStream_TypeDef)

检波模式（DET）相关的 数据类型
DET_Profile_TypeDef：DET模式的配置信息
DET_StreamInfo_TypeDef：
DETStream_TypeDef

检波模式（DET）相关的 主要函数
DET_ProfileDeInit
DET_Configuration
DET_BusTriggerStart
DET_BusTriggerStop
DET_GetPowerStream(.., PowerStream[], ScaleToV, TriggerInfo, MeasAuxInfo)

实时频谱模式（RTA）相关的 数据类型
RTA_Profile_TypeDef：RTA模式的配置信息
RTA_FrameInfo_TypeDef：RTA模式的配置反馈信息

SpectrumFrames[], SpectrumBitMap[], TriggerInfo, PlotInfo, MeasAuxInfo RTA模式下非封装的测量数据，匹配RTA_GetRealTimeSpectrum函数
RTAStream_TypeDef：RTA模式下封装的测量数据，匹配RTA_GetRealTimeSpectrum_PM1函数

实时频谱模式（RTA）相关的 主要函数
RTA_ProfileDeInit
RTA_Configuration
RTA_BusTriggerStart
RTA_BusTriggerStop
RTA_GetRealTimeSpectrum(..,SpectrumFrames[], SpectrumBitMap[], TriggerInfo, PlotInfo, MeasAuxInfo)
RTA_GetRealTimeSpectrum_PM1(RTAStream_TypeDef)

*/

/* 返回值定义  Return Value for public API functions-------------------------------------------------------------*/

/* 关于返回值的说明
1）0 为默认的正常值，任何非0值都表示存在特殊情况
2) APIRETVAL_ 前缀表示此返回值为API返回值
3）第二修饰符 ERROR_ 表示返回情况为 错误，此时不建议直接进行后续操作，需要尝试特定的恢复步骤，比如重新执行DeviceOpen
4）第二修饰符 WARNING_表示返回情况为 警告，此时可以继续后续API的调用,但当前API获取的测试数据可能存在不准确，比如本振失锁可能引起功率读数失准
*/

#define MAX_DEVICE 											256	// 总线挂载的设备数量上限

#define APIRETVAL_NoError									0			// 无错误

/* 设备打开过程中的 错误及警告 */
#define APIRETVAL_ERROR_BusOpenFailed						-1			// 总线打开错误，仅生产于DeviceOpen过程中
#define	APIRETVAL_ERROR_RFACalFileIsMissing					-3			// 射频幅度校准文件丢失，仅生产于DeviceOpen过程中，文件丢失将导致幅度校准失准 或 无法运行
#define	APIRETVAL_ERROR_IFACalFileIsMissing					-4			// 中频幅度校准文件丢失，仅生产于DeviceOpen过程中，文件丢失将导致幅度校准失准 或 无法运行
#define	APIRETVAL_ERROR_DeviceConfigFileIsMissing			-5			// 设备配置文件丢失，仅生产于DeviceOpen过程中，配置不优化
#define APIRETVAL_ERROR_DeviceSpecFileIsMissing				-6			// 设备规格文件丢失、仅生产于DeviceOpen过程中，参数范围限值不准确
#define APIRETVAL_ERROR_UpdateStrategyFailed				-7			// 下发配置策略至设备的过程失败，仅生产于DeviceOpen过程中

/* 总线调用过程中的 错误及警告 */
#define	APIRETVAL_ERROR_BusError							-8			// 总线传输错误
#define	APIRETVAL_ERROR_BusDataError						-9			// 总线数据错误，表示数据包整体格式正确，但数据内容错误，可能是配置冲突或者是传输过程中因物理干扰导致数据内容错误
#define APIRETVAL_WARNING_BusTimeOut						-10			// 总线数据返回超时，可能是触发未到来，也可能是通信存在错误
#define	APIRETVAL_ERROR_BusDownLoad							-11			// 通过总线下发配置错误

/* 数据包中反馈的关于数据内容与设备状态的 错误及警告 */
#define	APIRETVAL_WARNING_IFOverflow						-12			// 中频饱和，建议上调参考电平（RefLevel_dBm）直至不再出现该提示
#define APIRETVAL_WARNING_ReconfigurationIsRecommended		-14			// 距离最近一次配置，温度产生较大变化，建议重新调用配置函数（如SWP_Configuration）以获得最佳性能
#define APIRETVAL_WARNING_ClockUnlocked_SYSCLK				-15			// 硬件状态警告，系统时钟失锁
#define	APIRETVAL_WARNING_ClockUnlocked_ADCCLK				-16			// 硬件状态警告，ADC时钟失锁
#define	APIRETVAL_WARNING_ClockUnlocked_RXIFLO				-17			// 硬件状态警告，接收中频本振失锁
#define APIRETVAL_WARNING_ClockUnlocked_RXRFLO				-18			// 硬件状态警告，接收射频频本振失锁
#define APIRETVAL_WARNING_ADCConfigError					-19         // 硬件状态警告，ADC配置错误  

/* 固件更新过程中错误 */
#define APIRETVAL_ERRPR_OpenfileFiled						-20			// 打开更新文件失败
#define APIRETVAL_ERROR_ExecuteUpdateError					-21			// 进入更新程序失败
#define APIRETVAL_ERROR_FirmwareEraseError					-22			// 固件flash擦除失败
#define APIRETVAL_ERROR_FirmwareDownloadError				-23			// 固件flash下载失败
#define APIRETVAL_ERROR_UpdateExitError						-24			// 退出固件更新程序失败


/* 设置待机模式时错误状态 */
#define APIRETVAL_ERROR_SysPowerMode_ParamOutRange			-25			// 退出固件更新程序失败
#define APIRETVAL_ERROR_SysPowerMode_UpdateFailed			-26			// 退出固件更新程序失败

#define APIRETVAL_WARNING_VNACalKitFileIsMissing			-27			// 加载VNA校准件数据文件失败
#define APIRETVAL_WARNING_VNACalResultFileIsMissing			-28			// 加载VNA校准结果文件失败

#define APIRETVAL_WARNING_TxLevelCalFileIsMissing			-29			// 加载发射功率校准文件失败
#define APIRETVAL_WARNING_TxLevelExceededRefLevel			-30			// 发射功率超出接收机的参考电平，仅对TRx系列设备有效

/* 校准文件加载警告 */
#define APIRETVAL_WARNING_DefaultRFACalFileIsLoaded			-33			// 设备个体的射频幅度校准文件丢失，系统加载默认校准文件
#define APIRETVAL_WARNING_DefaultIFACalFileIsLoaded			-34			// 设备个体的中频幅度校准文件丢失，系统加载默认校准文件

/* 设备状态警告*/
#define APIRETVAL_WARNING_ClockRelocked_SYSCLK				-36			// 硬件状态警告，系统时钟发生重锁现象
#define APIRETVAL_WARNING_ClockRelocked_ADCCLK				-37			// 硬件状态警告，ADC时钟发生重锁现象
#define APIRETVAL_WARNING_ClockRelocked_RXIFLO				-38			// 硬件状态警告，接收中频本振发生重锁现象
#define APIRETVAL_WARNING_ClockRelocked_RXRFLO				-39			// 硬件状态警告，接收射频本振发生重锁现象


#define APIRETVAL_WARNING_DefaultVNACalKitFileIsLoaded		-40			// 设备个体的矢量网络分析仪校准件文件丢失，系统加载了默认了校准件文件
#define APIRETVAL_WARNING_DefaultVNACalResultFileIsLoaded	-41			// 设备个体的矢量网络分析仪校准结果文件丢失，系统加载了默认了校准结果文件
#define APIRETVAL_WARNING_DefaultTxLevelCalFileIsLoaded		-42			// 设备个体的发射功率校准文件丢失，系统加载了默认了发射功率校准文件

#define APIRETVAL_ERROR_IQCalFileIsMissing					-43			// IQ校准文件丢失，仅生产于DeviceOpen过程中，文件丢失将导IQ校准失准 或 无法运行
#define APIRETVAL_WARNING_DefaultIQCalFileIsLoaded			-44			// 设备个体的IQ校准文件丢失，系统加载默认校准文件

#define APIRETVAL_ERROR_QueryResultsIncorrect				-45			// 查询结果与实际下发的参数不匹配
#define APIRETVAL_ERROR_ADCState							-46			// ADC状态错误
#define APIRETVAL_ERROR_Options_Missing						-47			// 硬件状态错误，该配置必需的选件不存在，请检查MUXIO连接是否正常

#define APIRETVAL_ERROR_CableLossFileIsMissing				-48			// 线损文件丢失，仅生产于DeviceOpen过程中
#define APIRETVAL_ERROR_FirmwareVersionMismatch				-49         // 当前设备固件版本与API版本非相同基线版本

/*QEC 相关的校准文件*/
#define APIRETVAL_WARNING_QECFileIsMissing					-50			// 加载发射正交误差校准文件失败
#define APIRETVAL_WARNING_DefaultQECFileIsLoaded			-51			// 设备个体的发射正交误差校准(QEC)文件丢失，系统加载了默认了发射正交误差校准(QEC)文件

/* 非正常调用及调试过程中出现的 错误与警告 */
#define APIRETVAL_ERROR_ParamOutRange						-98			// 参数超界，非正常调用
#define APIRETVAL_ERROR_FunctionInternalError				-99			// 函数内部错误，非正常调用
#define APIRETVAL_WARNING_No_VSG_Function_Option			-100		// 设备个体的IQ校准文件丢失，系统加载默认校准文件

/* 非正常调用重采样函数 错误 */
#define APIRETVAL_ERROR_DecimateFactorOutRange				-201		// 抽取倍数设置超界，非正常调用（抽取倍数设置范围:1 ~ 2^16）
#define APIRETVAL_ERROR_IQSDataFormatError				    -202		// IQS数据格式设置错误，非正常调用（IQ数据格式目前只有int8、int16、int32和float）
#define APIRETVAL_WARNING_CarrierLoss				        -203		// 相位噪声测量过程中，未发现功率超过载波判决门限的信号
#define APIRETVAL_WARNING_MeasUpdate				        -204		// 相位噪声测量过程中，DUT状态发生改变，导致测量状态自动更新，需重新获取PartialUpdateCounts次数据

#define APIRETVAL_WARNING_CorrectDataNotLoad 				-1000	   	// 接收修正表未正确载入
#define APIRETVAL_WARNING_CorrectTimeBaseNotLoad 			-1001 		// 时基修正表未正确载入
#define APIRETVAL_WARNING_CorrectTXDataNotLoad 				-1002   	// 发射修正表未正确载入
#define APIRETVAL_WARNING_CorrectILDataNotLoad 				-1003   	// 插损修正表未正确载入

#define APIRETVAL_ERROR_ETHTimeOut                          10060       // 由于连接方在一段时间后没有正确的答复或连接的主机没有反应，连接尝试失败。 
#define APIRETVAL_ERROR_ETHDisconnected                     10054       // 设备断开网络连接,远程主机强迫关闭了一个现有的连接
#define APIRETVAL_ERROR_ETHDataError                        10062       // 设备未正常获取到数据

#define APIRETVAL_ERROR_NoDeviceExist                       10068       // 无设备存在
#define APIRETVAL_ERROR_DeviceNotFound                      10069       // 未找到需要修改IP地址的设备
#define APIRETVAL_ERROR_DeviceIPRepeatConfig                10070       // 需要修改的IP地址已经是此设备的IP地址
#define APIRETVAL_ERROR_DeviceIPExceed                      10071       // 不符合ip设置范围
#define APIRETVAL_ERROR_DeviceIPSetError                    10072       // 设备连接在路由器下时，设置的IP地址需要符合路由的要求
#define APIRETVAL_ERROR_DeviceIPExist                       10073       // 该网段下已存在需要修改的IP地址
#define APIRETVAL_ERROR_ConfigDeviceIPFailed                10074       // 配置IP地址失败
#define APIRETVAL_ERROR_DeviceInfoError                     10079       // 设备信息获取错误

#define APIRETVAL_LastPacket								-301		// 指示最后一包，当返回值为该值时，代表本次触发的数据已全部获取完毕
#define APIRETVAL_TriggerMissed								-302		// 指示有数据采集过程中，由于上次采集未结束，而导致错过对新一次触发的响应。
#define APIRETVAL_WARNING_LastPacketwithTriggerMissed		-303		// 指示最后一包，且检测到采集过程中有触发未来及响应而错过
#define APIRETVAL_WARNING_DataNotReady						-304		// 指示数据还未就绪，需要继续调用获取函数

#define APIRETVAL_WARNING_ClockUnlocked_AUXS				-305		// 硬件状态警告，简易信号源失锁

/* MPS模式下获取到的数据类型 */
#define MPS_SWP			0x00			// Analysis返回0时为SWP模式		 
#define	MPS_IQS			0x01			// Analysis返回1时为IQS模式	
#define MPS_DET			0x02			// Analysis返回2时为DET模式	
#define MPS_RTA			0x03			// Analysis返回3时为RTA模式

/*---------------------------------------------------
设备启停结构体所需的枚举
-----------------------------------------------------*/

/*设备供电方式 BootProfile.DevicePowerSupply*/
typedef enum
{
	USBPortAndPowerPort = 0x00,	// 使用USB数据端口及电源端口供电
	USBPortOnly = 0x01,			// 仅使用USB数据端口
	Others = 0x02				// 其他方式, 当使用ETH总线时，使用此选项
}DevicePowerSupply_TypeDef;

/*物理总线类型 BootProfile.PhysicalInterface*/
typedef enum
{
    USB = 0x00,     // 使用USB作为物理接口，适用于SAE、SAM、SAN等USB接口产品
    QSFP = 0x02,    // 使用40Gbps QSFP+ 作为物理接口
    ETH = 0x03,     // 使用100M/1000M 以太网 作为物理接口，适用于NXE、NXM、NXN等以太网接口产品
    HLVDS = 0x04,   // 调试专用，请勿使用
    VIRTUAL = 0x07, // 使用虚拟总线，即无物理总线，用于仿真与调试
    PCIE = 0x08     // 使用 PCIe 作为设备总线接口
} PhysicalInterface_TypeDef;

/*IP地址版本 BootProfile.IPVersion*/
typedef enum
{
	IPv4 = 0x00, // 使用IPv4地址
	IPv6 = 0x01  // 使用IPv6地址
}IPVersion_TypeDef;

/*功耗控制*/
typedef enum
{
	PowerON = 0x00,    // 系统所有工作区均上电
	RFPowerOFF = 0x01, // 射频处于下电状态，不可快速唤醒
	RFStandby = 0x02   // 射频处于待机状态，可快速唤醒
}SysPowerState_TypeDef;

/*设备工作状态*/
typedef enum
{
	SysPowerMode_Normal = 0x00,  //MCU上电模式
	SysPowerMode_Standby = 0x01, //MCU待机模式
	SysPowerMode_Stop = 0x02   	 //MCU掉电模式
}SysPowerMode_TypeDef;

/*固件类型*/
typedef enum
{
	MCU = 0x00,  // 单片机
	FPGA = 0x01, // FPGA
	GNSS = 0x03, // GNSS
	PMU = 0x04, 
	AGU = 0x05,
	FX3 = 0x06,
	root = 0x07,
	nodeA = 0x08,
	nodeB = 0x09,
	nodeC = 0x0A
}Firmware_TypeDef;

/*---------------------------------------------------
用户结构体所需的枚举，()括号内为适配的工作模式
包括全模式 all
扫描模式 SWP
时域流模式 IQS
实时频谱分析模式 RTA
检波模式 DET
数字信号处理函数 DSP
矢量网络分析模式 VNA
辅助信号源模式 SIG
-----------------------------------------------------*/

/*射频输入端口(all)*/
typedef enum
{
	ExternalPort = 0x00, // 外部端口
	InternalPort = 0x01, // 内部端口
	ANT_Port = 0x02,	 // only for TRx series
	TR_Port = 0x03,		 // only for TRx series
	SWR_Port = 0x04,	 // only for TRx series
	INT_Port = 0x05		 // only for TRx series
}RxPort_TypeDef;

/*增益方式(all)*/
typedef enum
{
	LowNoisePreferred = 0x00,	  // 侧重低噪声
	HighLinearityPreferred = 0x01 // 侧重高线性度
}GainStrategy_TypeDef;

/*触发输入边沿(all)*/
typedef enum
{
	RisingEdge = 0x00,	// 上升沿触发
	FallingEdge = 0x01,	// 下降沿触发
	DoubleEdge = 0x02   // 双边沿触发
}TriggerEdge_TypeDef;

/*触发输出类型(all)*/
typedef enum
{
	None = 0x00,	  // 无触发输出
	PerHop = 0x01,	  // 随每次跳频完成时输出
	PerSweep = 0x02,  // 随每次扫描完成时输出
	PerProfile = 0x03 // 随每次配置切换输出
}TriggerOutMode_TypeDef;

/*触发输出信号极性(all)*/
typedef enum
{
	Positive = 0x00, // 正极型脉冲
	Negative = 0x01  // 负极型脉冲
}TriggerOutPulsePolarity_TypeDef;

/*预选放大器(all)*/
typedef enum
{
	AutoOn = 0x00,		// 自动使能前置放大器
	ForcedOff = 0x01,	// 强制保持前置放大器关闭
	OnLowGain = 0x02,	// 放大器低增益模式
	OnMediumGain = 0x03,// 放大器中增益模式
	OnHighGain = 0x04	// 放大器高增益模式

}PreamplifierState_TypeDef;

/*系统参考时钟(all)*/
typedef enum
{
	ReferenceClockSource_Internal  = 0x00,        // 内部时钟源(默认10MHz)
	ReferenceClockSource_External = 0x01,         // 外部时钟源(默认10MHz)，当系统检测到外部时钟无法锁定时，将自动切换至内部参考
	ReferenceClockSource_Internal_Premium = 0x02, // 内部时钟源-高品质，选择DOCXO或OCXO
	ReferenceClockSource_External_Forced = 0x03 , // 外部时钟源，并且无视锁定情况，即使失锁也不会切换至内部参考
	ReferenceClockSource_External_SysClock = 0x04 // 外部系统时钟，直接将外部的时钟输入作为系统时钟使用，旁路内部的参考锁相环
}ReferenceClockSource_TypeDef;

/*系统时钟(all)*/
typedef enum
{
	SystemClockSource_Internal = 0x00, // 内部系统时钟源
	SystemClockSource_External = 0x01  // 外部系统时钟源
}SystemClockSource_TypeDef;

/*系统时钟输出*/
typedef enum
{
	SystemClockOut_Disable = 0x00, 	// 内部系统时钟源
	SystemClockOut_Enable = 0x01  	// 外部系统时钟源
}SystemClockOut_TypeDef;

/*频率分配方式(SWP)*/
typedef enum
{
	StartStop = 0x00, // 以起始频率和终止频率来设置频率范围
	CenterSpan = 0x01 // 以中心频率和频率扫宽来设置频率范围
}SWP_FreqAssignment_TypeDef;

/*迹线更新方式(SWP)*/
typedef enum
{
	ClearWrite = 0x00,    	// 输出正常迹线
	MaxHold = 0x01,	      	// 输出经过最大值保持的迹线
	MinHold = 0x02,	      	// 输出经过最小值保持的迹线
	ClearWriteWithIQ = 0x03 // 同时输出当前频点的时域数据与频域数据
}SWP_TraceType_TypeDef;

/*RBW更新方式(SWP)*/
typedef enum
{
	RBW_Manual = 0x00,			  // 手动输入RBW
	RBW_Auto = 0x01,			  // 自动随SPAN更新RBW，RBW = SPAN / 2000
	RBW_OneThousandthSpan = 0x02, // 强制 RBW = 0.001 * SPAN
	RBW_OnePercentSpan = 0x03	  // 强制 RBW = 0.01 * SPAN
}RBWMode_TypeDef;

/*VBW更新方式(SWP)*/
typedef enum
{
	VBW_Manual = 0x00,	      // 手动输入VBW
	VBW_EqualToRBW = 0x01,    // 强制 VBW = RBW
	VBW_TenPercentRBW = 0x02, // 强制 VBW = 0.1 * RBW
	VBW_OnePercentRBW = 0x03, // 强制 VBW = 0.01 * RBW
	VBW_TenTimesRBW = 0x04    // 强制 VBW = 10 * RBW，完全旁路VBW滤波器
}VBWMode_TypeDef;

/*扫描时间配置模式(SWP)*/
typedef enum
{
	SWTMode_minSWT = 0x00,	  // 以最短扫描时间进行扫描
	SWTMode_minSWTx2 = 0x01,  // 以近似2倍最短扫描时间进行扫描
	SWTMode_minSWTx4 = 0x02,  // 以近似4倍最短扫描时间进行扫描
	SWTMode_minSWTx10 = 0x03, // 以近似10倍最短扫描时间进行扫描
	SWTMode_minSWTx20 = 0x04, // 以近似20倍最短扫描时间进行扫描
	SWTMode_minSWTx50 = 0x05, // 以近似50倍最短扫描时间进行扫描
	SWTMode_minSWTxN = 0x06,  // 以近似N倍最短扫描时间进行扫描，N等于SweepTimeMultiple
	SWTMode_Manual = 0x07,    // 以近似指定的扫描时间进行扫描，扫描时间等于SweepTime
	SWTMode_minSMPxN = 0x08   // 以近似N倍最短采样时间进行单个频点的采样，N等于SampleTimeMultiple
}SweepTimeMode_TypeDef;

/*扫描模式触发源与触发模式(SWP)*/
typedef enum
{
	InternalFreeRun = 0x00,	  // 内部触发自由运行
	ExternalPerHop = 0x01,	  // 外部触发，每一次触发都跳一个频点
	ExternalPerSweep = 0x02,  // 外部触发，每一次触发都刷新一条迹线
	ExternalPerProfile = 0x03, // 外部触发，每一次触发都应用一个新配置
    InternelXppsPerHop = 0x04, // 内部GNSS秒脉冲触发，每一次触发都跳一个频点
    InternelXppsPerSweep = 0x05, // 内部GNSS秒脉冲触发，每一次触发都刷新一条迹线
    InternelXppsPerProfile = 0x06 // 内部GNSS秒脉冲触发，每一次触发都应用一个新配置
}SWP_TriggerSource_TypeDef;

/*杂散抑制类型(SWP)*/
typedef enum
{
	Bypass = 0x00,	 // 不进行杂散抑制
	Standard = 0x01, // 中级杂散抑制
	Enhanced = 0x02	 // 高级杂散抑制
}SpurRejection_TypeDef;

/*迹线点数逼近方式(SWP)*/
typedef enum
{
	SweepSpeedPreferred = 0x00,	    // 优先保证扫描速度最快，然后尽量靠近设置的目标迹线点数
	PointsAccuracyPreferred = 0x01, // 优先保证实际迹线点数接近设置的目标迹线点数
	BinSizeAssined = 0x02           // 优先保证按照设定的频率间隔来生成迹线
}TracePointsStrategy_TypeDef;

/*迹线对齐方式(SWP)*/
typedef enum
{	
	NativeAlign = 0x00,  //自然对齐
	AlignToStart = 0x01, //对齐至起始频率
	AlignToCenter = 0x02 //对齐至中心频率
}TraceAlign_TypeDef;

/*FFT平台(SWP)*/
typedef enum
{
	Auto = 0x00,				 // 根据设置自动选择使用CPU还是FPGA进行FFT计算
	Auto_CPUPreferred = 0x01,	 // 根据设置自动选择使用CPU还是FPGA进行FFT计算，CPU优先
	Auto_FPGAPreferred = 0x02,	 // 根据设置自动选择使用CPU还是FPGA进行FFT计算，FPGA优先
	CPUOnly_LowResOcc = 0x03,	 // 强制使用CPU计算，低资源占用，最大FFT点数256K
	CPUOnly_MediumResOcc = 0x04, // 强制使用CPU计算，中资源占用，最大FFT点数1M
	CPUOnly_HighResOcc = 0x05,	 // 强制使用CPU计算，高资源占用，最大FFT点数4M
	FPGAOnly = 0x06 			 // 强制使用FPGA计算
}FFTExecutionStrategy_TypeDef;

/*DSP运算平台(SWP)*/
typedef enum
{
	CPU_DSP  = 0x00, // 在CPU进行计算
	FPGA_DSP = 0x01	 // 在FPGA进行计算
}DSPPlatform_Typedef;

/*频点内多帧检波方式(SWP\RTA)*/
typedef enum
{
	Detector_Sample  = 0x00,   		// 每个频点的功率谱间不进行帧间检波
	Detector_PosPeak = 0x01,   		// 每个频点的功率谱间进行帧检波，最终输出一帧；帧与帧取MaxHold
	Detector_Average = 0x02,   		// 每个频点的功率谱间进行帧检波，最终输出一帧；帧与帧取平均
	Detector_NegPeak = 0x03,   		// 每个频点的功率谱间进行帧检波，最终输出一帧，帧与帧取MinHold
	Detector_MaxPower = 0x04,  		// 在FFT前，每个频点都进行长时间的采样，从中选取功率最大的帧数据进行FFT，用于捕获脉冲等瞬时信号（仅SWP模式可用）
	Detector_RawFrames = 0x05, 		// 每个频点均进行多次采样，多次FFT分析，并逐帧输出功率谱（仅SWP模式可用）
	Detector_RMS = 0x06, 			// 每个频点的功率谱间进行帧检波，最终输出一帧；帧与帧取RMS
	Detector_AutoPeak = 0x07   		// 每个频点的功率谱间进行帧检波，最终输出一帧；帧与帧取AutoPeak(暂未开放)
}Detector_TypeDef;

/*窗类型(SWP\RTA\DSP)*/
typedef enum
{
	FlatTop = 0x00,	 			// 平顶窗
	Blackman_Nuttall = 0x01,	// Nuttall窗
	LowSideLobe = 0x02,			// 低副瓣窗
	Rect = 0x03,		  		// 矩形窗
	Kaiser = 0x04				// 凯泽窗
}Window_TypeDef;

/*迹线检波方式(SWP\RTA\DSP)*/
typedef enum
{
	TraceDetectMode_Auto = 0x00,  // 自动选择迹线检波模式
	TraceDetectMode_Manual = 0x01 // 指定迹线检波模式
}TraceDetectMode_TypeDef;

/*迹线检波方式(SWP\RTA\DSP)*/
typedef enum
{
	TraceDetector_AutoSample = 0x00, // 自动取样检波
	TraceDetector_Sample = 0x01,	 // 随机检波
	TraceDetector_PosPeak = 0x02,	 // 正峰值检波
	TraceDetector_NegPeak = 0x03,	 // 负峰值检波
	TraceDetector_RMS = 0x04,		 // 均方根检波
	TraceDetector_Bypass = 0x05,	 // 不执行检波
	TraceDetector_AutoPeak = 0x06, 	 // 自动峰值检波
	TraceDetector_Normal = 	0x07	 // 正态检波
}TraceDetector_TypeDef;

/*定频点模式（IQS\RTA\DET）触发源*/
typedef enum
{
	FreeRun = 0x00,	 			   // 自由运行
	External = 0x01, 			   // 外部触发。由连接至设备外触发输入端口的物理信号进行触发
	Bus = 0x02,		 			   // 总线触发。由函数（指令）的方式进行触发
	Level = 0x03,	 			   // 电平触发。设备根据设定的电平门限对输入信号进行检测，当输入超过门限值后自动发起触发
	Timer = 0x04,	 			   // 定时器触发。使用设备内部定时器以设定的时间周期进行自动触发
	TxSweep = 0x05,	 			   // 信号源扫描的输出触发；当选择此触发源时，采集过程将由信号源扫描的输出触发信号进行触发
	MultiDevSyncByExt = 0x06, 	   // 在外部触发信号到来时，多机做同步触发行为
	MultiDevSyncByGNSS1PPS = 0x07, // 在GNSS-1PPS到来时，多机做同步触发行为
	SpectrumMask = 0x08,		   // 频谱模板触发，仅RTA模式下可用。暂未开放
	GNSS1PPS = 0x09				   // 使用系统内GNSS提供的1PPS进行触发
}IQS_TriggerSource_TypeDef;

/*定时器触发与外触发边沿同步*/
typedef enum
{
	NoneSync = 0x00,                        // 定时器触发不与外触发同步
	SyncToExt_RisingEdge = 0x01,            // 定时器触发与外触发上升沿同步 
	SyncToExt_FallingEdge = 0x02,           // 定时器触发与外触发下降沿同步
	SyncToExt_SingleRisingEdge = 0x03,      // 定时器触发与外触发上升沿单次同步（需要调用指令函数，执行单次同步）
	SyncToExt_SingleFallingEdge = 0x04,     // 定时器触发与外触发下降沿单次同步（需要调用指令函数，执行单次同步）
	SyncToGNSS1PPS_RisingEdge = 0x05,       // 定时器触发与GNSS-1PPS上升沿同步 
	SyncToGNSS1PPS_FallingEdge = 0x06,      // 定时器触发与GNSS-1PPS下降沿同步
	SyncToGNSS1PPS_SingleRisingEdge	= 0x07, // 定时器触发与GNSS-1PPS上升沿单次同步（需要调用指令函数，执行单次同步）
	SyncToGNSS1PPS_SingleFallingEdge = 0x08 // 定时器触发与GNSS-1PPS下降沿单次同步（需要调用指令函数，执行单次同步）
}
TriggerTimerSync_TypeDef;

typedef IQS_TriggerSource_TypeDef DET_TriggerSource_TypeDef;
typedef IQS_TriggerSource_TypeDef RTA_TriggerSource_TypeDef;

/*直流抑制方式(IQS\DET\RTA)*/
typedef enum
{
	DCCOff = 0x00,				  // 关闭直流抑制功能。
	DCCHighPassFilterMode = 0x01, // 开启，高通滤波器方式。该模式下有较好的直流抑制效果，但会损伤直流至低频（约100kHz）的信号分量
	DCCManualOffsetMode = 0x02,   // 开启，手动偏置方式。该模式下需要手动指定偏置值，且抑制效果弱于高通滤波器模式，但不会损伤直流上的信号分量
	DCCAutoOffsetMode = 0x03      // 开启，自动偏置方式。
}DCCancelerMode_TypeDef;

/*正交解调校正(IQS\DET\RTA)*/
typedef enum
{
	QDCOff = 0x00,		  // 关闭QDC
	QDCManualMode = 0x01, // 手动QDC，根据给定参数执行QDC
	QDCAutoMode = 0x02    // 自动QDC，系统在每次IQS_Configuration调用时自动执行校准并使用校准所获得的参数
}QDCMode_TypeDef;

/*触发模式(IQS\RTA\DET)*/
typedef enum
{
	FixedPoints = 0x00,	// 触发后获取定点长度的数据
	Adaptive = 0x01		// 触发后持续获取数据
}TriggerMode_TypeDef;

/*流模式数据格式类型(IQS/DSP)*/
typedef enum
{
	Complex16bit = 0x00, // IQ，单路数据16位
	Complex32bit = 0x01, // IQ，单路数据32位
	Complex8bit  = 0x02, // IQ，单路数据8位
	Real16bit 	 = 0x03, // Real，单路数据16位
	Real32bit 	 = 0x04, // Real，单路数据32位
	Real8bit 	 = 0x05, // Real，单路数据8位	
	Complexfloat = 0x06, // IQ，单路数据32位浮点（IQS模式不可用，仅由DDC函数输出数据时回写该枚举变量）
	Realfloat 	 = 0x07	 // Real，单路数据32位float
}DataFormat_TypeDef;

/*流模式数据格式类型(IQS/DSP)*/
typedef enum
{
	LookBack_Off = 0x00,	/*关闭lookback 功能，不上传原始的IQ数据*/
	LookBack_On  = 0x01		/*开启lookback 功能，上传原始的IQ数据*/
}LookBack_TypeDef;

/*检波模式检波器(DET)，弃用 */
//typedef enum
//{
//	DET_Average = 0x00,	// 平均检波
//	DET_Max = 0x01,		// 最大值检波
//	DET_RMS = 0x02,		// 均方根值检波
//	DET_Sample = 0x03	// 取样检波
//}DETDetector_TypeDef;

/*信号源工作模式(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	SIG_PowerOff = 0x00,			 // 关闭
	SIG_Fixed = 0x01,				 // 固定频率和功率模式
	SIG_FreqSweep_Single = 0x02,	 // 单次频率扫描（未开放）
	SIG_FreqSweep_Continous = 0x03,	 // 连续频率扫描（未开放）
	SIG_PowerSweep_Single = 0x04,	 // 单次功率扫描（未开放）
	SIG_PowerSweep_Continous = 0x05, // 连续功率扫描（未开放）
	SIG_ListSweep_Single =0x06,		 // 单次列表扫描（未开放）
	SIG_ListSweep_Continous = 0x07,	 // 连续列表扫描（未开放）
	SIG_ManualGainCtrl = 0x08,		 // 手动增益控制
	SIG_TrackGenerator = 0x09		 // TG功能
}SIG_OperationMode_TypeDef;

/*信号源扫描源(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	SIG_SWEEPSOURCE_RF = 0x00,	 // 射频扫描
	SIG_SWEEPSOURCE_LF = 0x01,	 // 低频扫描
	SIG_SWEEPSOURCE_LF_RF = 0x02 // 低频和射频协同扫描
}SIG_SweepSource_TypeDef;

/*发射模式下发射端口状态(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	RF_ExternalPort = 0x00, // 外部端口
	RF_InternalPort = 0x01, // 内部端口
	RF_ANT_Port = 0x02,		// ANT端口（仅适用于TRx 系列）
	RF_TR_Port = 0x03,		// TR端口（仅适用于TRx 系列）
	RF_SWR_Port = 0x04,		// SWR端口（仅适用于TRx 系列）
	RF_INT_Port = 0x05		// INT端口（仅适用于TRx 系列）
}TxPort_TypeDef,RFPort_typedef;

/*发射基带传输复位状态(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_TRNASFERRESET_ON = 0x00, // 配置时发射传输通道复位开启
	Tx_TRNASFERRESET_OFF = 0x01 // 配置时发射传输通道复位关闭
}TxTransferReset_TypeDef;

/*发射传输链路封包状态*/
typedef enum
{
	TxPacking_Off = 0x00, // 发射链路封包关闭，直接传输有效数据
	TxPacking_On = 0x01   // 发射机中封包开启，为有效数据添加包头包尾
}TxPackingCmd_TypeDef;

/*发射链路的封包位宽*/
typedef enum
{
	TxPackingDataWidth_32Bits = 0x01,  // 封包开启时，封包的数据位宽采用32bits，并保证32bits对齐
	TxPackingDataWidth_64Bits = 0x02,  // 封包开启时，封包的数据位宽采用64bits，并保证64bits对齐
	TxPackingDataWidth_128Bits = 0x04, // 封包开启时，封包的数据位宽采用128bits，并保证128bits对齐
	TxPackingDataWidth_256Bits = 0x08  // 封包开启时，封包的数据位宽采用256bits，并保证256bits对齐
}TxPackingDataWidth_TypeDef;

/*发射模式下触发输入源(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_TRIGGERIN_SOURCE_INTERNAL = 0x00, // 内部触发
	Tx_TRIGGERIN_SOURCE_EXTERNAL = 0x01, // 外部触发
	Tx_TRIGGERIN_SOURCE_TIMER = 0x02,    // 定时器触发
	Tx_TRIGGERIN_SOURCE_RF = 0x03,       // 射频板触发
	Tx_TRIGGERIN_SOURCE_BUS = 0x04       // 总线触发
}TxTriggerInSource_TypeDef;

/*发射模式下触发输入模式(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_TRIGGER_MODE_FREERUN = 0x00,     // 自由运行
	Tx_TRIGGER_MODE_SINGLEPOINT = 0x01, // 单点触发（触发一次进行单次的频率或功率的配置）
	Tx_TRIGGER_MODE_SINGLESWEEP = 0x02, // 单次扫描触发（触发一次进行一个周期的扫描）
	Tx_TRIGGER_MODE_CONTINOUS = 0x03    // 连续扫描触发（触发一次连续工作）
}TxTriggerInMode_TypeDef;

/*发射模式下触发输出模式(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_TRIGGER_OUTMODE_NONE = 0x00,      // 不输出触发
	Tx_TRIGGER_OUTMODE_PERPOINT = 0x01,  // 单点输出（单次跳频、跳功率时输出单个触发）
	Tx_TRIGGER_OUTMODE_PERSWEEP = 0x02,  // 单次扫描输出（单次扫描周期完成后输出一个触发）
	Tx_TRIGGER_OUTMODE_PERPROFILE = 0x03, // 单次Profile输出（单个Profile扫描完成后输出一个触发）
	Tx_TRIGGER_OUTMODE_WAVEFORMFINISH =0x04 //波形输出结束
}TxTriggerOutMode_TypeDef;

/*发射模式下的模拟IQ输入源(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_ANALOGIQSOURCE_INTERNAL = 0x00, // 内部模拟IQ输入
	Tx_ANALOGIQSOURCE_EXTERNAL = 0x01  // 外部模拟IQ输入
}TxAnalogIQSource_TypeDef;

/*发射模式下的数字IQ输入源(仅适用于TRx 系列)(SIG)*/
typedef enum
{
	Tx_DIGITALIQSOURCE_INTERNAL	 = 0x00, // 内部数字IQ输入
	Tx_DIGITALIQSOURCE_EXTERNAL = 0x01,  // 外部数字IQ输入
	Tx_DIGITALIQSOURCE_SIMULATION = 0x02 // 使用内部的正弦仿真信号
}TxDigitalIQSource_TypeDef;

/*收发模式下触发输入源(仅适用于TRx 系列)(VNA)*/
typedef enum
{
	TRx_TRIGGERIN_SOURCE_INTERNAL = 0x00, // 内部触发
	TRx_TRIGGERIN_SOURCE_EXTERNAL = 0x01, // 外部触发
	TRx_TRIGGERIN_SOURCE_TIMER = 0x02,    // 定时器触发
	TRx_TRIGGERIN_SOURCE_RF = 0x03,       // 射频板触发
	TRx_TRIGGERIN_SOURCE_BUS = 0x04       // 总线触发
}TRxTriggerInSource_typedef;

/*收发模式下触发输入模式(仅适用于TRx 系列)(VNA)*/
typedef enum
{
	TRx_TRIGGER_MODE_FREERUN = 0x00,     // 自由运行
	TRx_TRIGGER_MODE_SINGLEPOINT = 0x01, // 单点触发（触发一次进行单次的频率或功率的配置）
	TRx_TRIGGER_MODE_SINGLESWEEP = 0x02, // 单次扫描触发（触发一次进行一个周期的扫描）
	TRx_TRIGGER_MODE_CONTINOUS = 0x03    // 连续扫描触发（触发一次连续工作）
}TRxTriggerInMode_typedef;

/*收发射模式下触发输出模式(仅适用于TRx 系列)(VNA)*/
typedef enum
{
	TRx_TRIGGER_OUTMODE_NONE = 0x00,      // 不输出触发
	TRx_TRIGGER_OUTMODE_PERPOINT = 0x01,  // 单点输出（单次跳频、跳功率时输出单个触发）
	TRx_TRIGGER_OUTMODE_PERSWEEP = 0x02,  // 单次扫描输出（单次扫描周期完成后输出一个触发）
	TRx_TRIGGER_OUTMODE_PERPROFILE = 0x03 // 单次Profile输出（单个Profile扫描完成后输出一个触发）
}TRxTriggerOutMode_typedef;

/*收发模式下收发端口状态:前者为发，后者为收(仅适用于TRx 系列)(VNA)*/
typedef enum
{
	ANT_TR	= 0x00,  // 发射为ANT,接收为TR  	
	TR_ANT  = 0x01,  // 发射为TR,接收为ANT
	SWR_SWR = 0x02,  // 发射为SWR,接收为ANT
	INT_INT = 0x03,  // 发射为INT,接收为INT(内部至内部)
	ANT_ANT = 0x04,  // 发射为ANT,接收为ANT
	SWR_ANT  = 0x05, // 发射为SWR,接收为ANT
	SWR_TR  = 0x06,  // 发射为SWR,接收为TR
	TR_SWR  = 0x07,  // 发射为TR,接收为SWR
	SWR = 0x08,      // 专用来指驻波(S11)测试
	TRANSMIT = 0x09  // 专用来指传输（S21）测试,对于TRX60 =SWR->ANT;对于SAM-60 = Tx->Rx
}TRxPort_typedef;

/*收发模式下接收参考电平模式(仅适用于TRx 系列)(VNA)*/
typedef enum
{
	RxRefLevel_Fixed = 0x00, // 固定参考电平，参考电平值为CurrentLevel_dBm
	RxRefLevel_Sync = 0x01   // 和发射功率同步变化，且偏移值为CurrentLevel_dBm
}RxLevelMode_typedef;


/*信号类型,用于生成模拟调制的待调制信号(Analog)*/
typedef enum 
{
	SIGNAL_SINE = 0x00,     // 正弦信号
	SIGNAL_COSINE = 0x01,   // 余弦信号
	SIGNAL_LINEAR = 0x02,   // 线性（锯齿）
	SIGNAL_TRIANGLE = 0x03, // 三角
	SIGNAL_CW = 0x04,       // 直流（调制后输出连续波）
	SIGNAL_COMPLEX = 0x05   // 复数信号
}AnalogSignalType_TypeDef;

/*AM调制类型(Analog)*/
typedef enum 
{
	AM_MOD_DSB = 0x00, // 双边带调制
	AM_MOD_LSB = 0x01, // 下边带调制
	AM_MOD_USB = 0x02, // 上边带调制
	AM_MOD_CSB = 0x03, // 残余边带调制
	AM_MOD_CW = 0x04   // 产生连续波
}AMModType_TypeDef;

/*AM调制载波抑制(Analog)*/
typedef enum
{
	AM_CARRIERSUPPRESSION_ON = 0x00, // 载波抑制开启
	AM_CARRIERSUPPRESSION_OFF = 0x01 // 载波抑制关闭
}AM_CarrierSuppression_Typedef;

/*频率检波方式(DSP)*/
typedef enum
{
	TraceFormat_Standard = 0x00, // 频率等间隔
	TraceFormat_PrecisFrq = 0x01 // 频率准确
}TraceFormat_TypeDef;

/*风扇模式(DEV)*/
typedef enum
{
	FanState_On = 0x00,  // 强制常开
	FanState_Off = 0x01, // 强制常关
	FanState_Auto = 0x02 // 自动模式
}FanState_TypeDef;

/*GNSS星座选择*/
typedef enum
{
	Only_BeiDou = 0x00,  
	Only_GPS = 0x01,
	BeiDou_GPS = 0x02
}GNSSConstellation_TypeDef;

/*GNSS天线状态*/
typedef enum
{
	GNSSDataSource_Internal = 0x00,  // 内部GNSS数据源
	GNSSDataSource_External = 0x01 // 外部GNSS数据源
}GNSSDataSource_TypeDef;

/*GNSS天线状态*/
typedef enum
{
	GNSS_AntennaExternal = 0x00,  // 外部天线
	GNSS_AntennaInternal = 0x01 // 内部天线
}GNSSAntennaState_TypeDef;

/*DOCXO状态*/
typedef enum
{
	DOCXO_LockMode = 0x00,  // 驯服模式
	DOCXO_HoldMode = 0x01 	// 跟踪模式
}DOCXOWorkMode_TypeDef;

//GNSS 信噪比
typedef struct
{
	uint8_t Max_SatxC_No;	//最大信噪比
	uint8_t Min_SatxC_No;	//最小信噪比
	uint8_t Avg_SatxC_No;	//平均信噪比
}GNSS_SNR_TypeDef;

typedef struct
{
	uint8_t SatsNum_All;	//当前范围可视卫星
	uint8_t SatsNum_Use;	//用于定位的卫星数量
	GNSS_SNR_TypeDef GNSS_SNR_UsePos;		//用于定位的卫星信噪比信息
	GNSS_SNR_TypeDef GNSS_SNR_NotUsePos;	//在视野内，但未用于定位的卫星信噪比信息

}GNSS_SatDate_TypeDef;

/*GNSS获取设备信息*/
typedef struct
{
	float	latitude;	        //纬度
    float	longitude;          //经度
    int16_t	altitude;           //海拔
    uint8_t SatsNum;             //当前使用卫星数量

    uint8_t GNSS_LockState;     //GNSS锁定状态 
    uint8_t DOCXO_LockState;    //DOCXO锁定状态
    DOCXOWorkMode_TypeDef DOCXO_WorkMode;     //DOCXO工作状态
    GNSSAntennaState_TypeDef GNSSAntennaState; //天线状态

    int16_t hour; 
    int16_t minute; 
    int16_t second; 
    int16_t Year; 
    int16_t month; 
    int16_t day;

}GNSSInfo_TypeDef;

//GNSS外设类型
typedef enum
{
	GNSS_None = 0,		//无外设
	GNSS_For_EIO = 1,	//EIO
	GNSS_For_NX = 2,	//NX
	GNSS_For_PX = 3,	//PX
	GNSS_For_PXZ = 4,	//PXZ
	GNSS_For_TG = 5,
	GNSS_For_GPIO = 6,
	GNSS_For_NTG = 7,
	GNSS_For_PXR5 = 16

}GNSSPeriphType_TypeDef;

//GNSS类型
typedef enum
{
	None_GPS = 0, 		//无GPS接收机
	GNSS_GPS = 1,		//标准GPS
	GNSS_GPS_Pro = 2	//高性能GPS
	
}GNSSType_TypeDef;

//OCXO类型
typedef enum
{
	None_OCXO = 0,		//无OCXO
	GNSS_OCXO = 1,		//GNSS上的普通OCXO
	GNSS_DOCXO = 2		//GNSS上的可驯服OCXO
	
}OCXOType_TypeDef;

typedef struct
{
	GNSSPeriphType_TypeDef GNSSPeriphType;	//GNSS外设类型
	GNSSType_TypeDef GNSSType;				//GNSS接收机类型
	OCXOType_TypeDef OCXOType;				//GNSS上的OCXO类型

	uint8_t InternalOCXO;		//设备内部参考时钟是否是恒温晶振
	uint8_t SignalSourceEn;		//设备是否支持 信号源 功能
	uint8_t ADC_VariableRateEn;	//设备是否支持 ADC 可变采样率
	uint8_t IM3_filter;			//补充中频滤波器（IM3增强）

}HardWareState_TypeDef;

/*本振优化(all)*/
typedef enum
{
	LOOpt_Auto = 0x00,		// 本振优化，自动
	LOOpt_Speed = 0x01,		// 本振优化，高扫速
	LOOpt_Spur = 0x02,		// 本振优化，低杂散
	LOOpt_PhaseNoise = 0x03	// 本振优化，低相噪
}LOOptimization_TypeDef;

/*---------------------------------------------------
设备结构体
-----------------------------------------------------*/

/*设备类型*/
typedef enum
{
	Device_ANY 			= 0,	// 任意设备
	Device_SA  			= 1,	// 所有含频谱分析仪功能的设备
	Device_SG  			= 2,	// 所有信号源功能的设备
	/*具体设备型号*/
	Device_E90_R0		= 10,	//	SAE90内核设备,R0版本
	Device_E90_R1		= 11,	//	SAE90内核设备,R1版本
	Device_E90_R2		= 12,	//	SAE90内核设备,R2版本
	Device_E90_R3		= 13,	//	SAE90内核设备,R3版本
	Device_E90_R4		= 14,	//	SAE90内核设备,R3版本
	Device_E200_R0		= 20,	//	SAE200内核设备,R0版本
	Device_E200_R1		= 21,	//	SAE200内核设备,R1版本
	Device_E200_R2		= 22,	//	SAE200内核设备,R2版本
	Device_E200_R3		= 23,	//	SAE200内核设备,R3版本
	Device_TRX60_R3		= 33,	//	TRX60内核设备,R3版本
	Device_TRX60_R4		= 34,	//	TRX60内核设备,R4版本
	Device_ZRX200_R0	= 40,	//	ZRX200内核设备,R0版本
	Device_N60_R4		= 53,	//	N60内核设备,R4版本		
	Device_M60_R4		= 54,   //	M60内核设备,R4版本		
	Device_N45_R4		= 55,	//	N45内核设备,R4版本		
	Device_M80_R5		= 56,	//	M80内核设备,R5版本		
	Device_M60_R5		= 57,	//	M60内核设备,R5版本		
	Device_N60_R5		= 58,	//	N60内核设备,R5版本		
	Device_N45_R5		= 59,	//	N45内核设备,R5版本		
	Device_E310_R0		= 60,	//	E310内核设备,R0版本		
	Device_E310_R1		= 61,	//	E310内核设备,R1版本	
	Device_N45_R6		= 65,	//	N45内核设备, R6版本
	Device_N60_R6		= 66,	//	N60内核设备, R6版本
	Device_N90_R0		= 67,	//	N90 内核设备	
	Device_E330_R0		= 70,	//	E330内核设备,R0版本		
	Device_TX90_R0		= 80,	//	TX90内核设备,R0版本		
	Device_N400_R0		= 90,	//	N400内核设备,R0版本		
	Device_N400_R1		= 91,	//	N400内核设备,R1版本		
	Device_N400_R2		= 92,	//	N400内核设备,R2版本		
	Device_N150_R1		= 93,	//	N150内核设备,R1版本		
	Device_N400_R2_V2	= 94,	//	N400内核设备,R2_V2版本	
	Device_N400_R3		= 95,	//	N400内核设备,R3版本		
	Device_SIMULATOR	= 100,	//	SIMULATOR	
	Device_RX90_R0		= 110,	//	RX90内核设备,R0版本		
	Device_A24_R0		= 120,	//	A24内核设备,R0版本	
	Device_A24_R1		= 121,	//	A24内核设备,R1版本	
	Device_C24_R0		= 130,	//	C24内核设备,R0版本	
	Device_C24_R1		= 131	//	C24内核设备,R1版本	
}DeviceClass_TypeDef;

/*启动配置(配置)*/
typedef struct
{
	PhysicalInterface_TypeDef PhysicalInterface; // 物理接口选择
	DevicePowerSupply_TypeDef DevicePowerSupply; // 供电方式选择
	IPVersion_TypeDef ETH_IPVersion;             // ETH网际协议版本
	uint8_t ETH_IPAddress[16];                   // ETH接口的IP地址
	uint16_t ETH_RemotePort;                     // ETH接口的侦听端口
	int32_t	ETH_ErrorCode;	                     // ETH接口的返回代码
	int32_t ETH_ReadTimeOut;                     // ETH接口的读取超时(ms)
}BootProfile_TypeDef;

/*设备信息(返回)*/
typedef struct
{
	uint64_t DeviceUID;		  // 设备序列号
	uint16_t Model;			  // 设备类型
	uint16_t HardwareVersion; // 硬件版本
	uint32_t MFWVersion;	  // MCU固件版本
	uint32_t FFWVersion;	  // FPGA固件版本
	uint16_t PMUVersion;	  // PMU固件版本
	uint16_t AGUVersion;	  // AGU固件版本
}DeviceInfo_TypeDef;

/*NX设备信息(返回)*/
typedef struct
{
	uint64_t DeviceUID;		  // 设备序列号
	uint16_t Model;			  // 设备类型
	uint16_t HardwareVersion; // 硬件版本
	uint32_t MFWVersion;	  // MCU固件版本
	uint32_t FFWVersion;	  // FPGA固件版本
	uint8_t IPAddress[4];     // IP地址
	uint8_t SubnetMask[4];    // 子网掩码
}NetworkDeviceInfo_TypeDef;

/*设备固件版本(返回)*/
typedef struct
{
	uint32_t FFWVersion;	  // FPGA固件版本
	uint32_t MFWVersion;	  // MCU固件版本
	uint32_t BusVersion;      // 总线固件版本
	uint16_t PMUVersion;	  // PMU固件版本
	uint16_t AGUVersion;	  // AGU固件版本
}DeviceFirmwareVersion_TypeDef;

/*启动信息(返回)*/
typedef struct 
{
	DeviceInfo_TypeDef DeviceInfo; // 设备信息

	uint32_t BusSpeed;	           // 总线速度信息
	uint32_t BusVersion;           // 总线固件版本
	uint32_t APIVersion;           // API版本

	int ErrorCodes[7];	           // 启动过程中的错误代码清单
	int Errors;			           // 启动过程中的错误总数
	int WarningCodes[7];           // 启动过程中的警告代码清单
	int Warnings;		           // 启动过程中的警告总数
}BootInfo_TypeDef;

/*设备状态(高级变量，不建议直接使用)(返回)*/
typedef struct
{
	int16_t	Temperature;	  // 设备温度，摄氏度 = 0.01 * Temperature
	uint16_t RFState;		  // 射频状态
	uint16_t BBState;		  // 基带状态

	double AbsoluteTimeStamp; // 当前数据包对应的绝对时间戳
	float Latitude;           // 当前数据包对应的纬度坐标,北纬为正数，南纬为负数，以此区分南北纬
	float Longitude;          // 当前数据包对应的经度坐标,东经为正数，西经为负数，以此区分东西经

	uint16_t GainPattern;	  // 当前数据包对应频点所使用的增益控制字
	int64_t	RFCFreq;		  // 当前数据包对应频点所使用的射频中心频率

	uint32_t ConvertPattern;  // 当前数据包频点所使用的频率变换方式
	uint32_t NCOFTW;	      // 当前数据包频点所使用的NCO频率字

	uint32_t SampleRate;	  // 当前数据包频点所使用的等效采样率，等效采样率 = ADC采样率/抽取倍数
	uint16_t CPU_BCFlag;      // CPU-FFT做拼帧时，所需的BC标志位
	uint16_t IFOverflow;      // 设备是否中频过载，考虑并BBState或RFState
	uint16_t DecimateFactor;  // 当前数据包频点所使用的抽取倍数
	uint16_t OptionState;     // 选件状态
    uint64_t nsSinceEpoch;	  // 当前数据包所对应的ns级系统时间戳
	//int16_t		LicenseCode;   // 许可证代码
}DeviceState_TypeDef;

typedef struct
{
	float rf_vlotage; // 射频板电源端口电压（v）
	float rf_current; // 射频板电源端口电流（a）
	float usb_vlotage; // 数字板USB端口电压（v）
	float usb_current; // 数字板USB端口电流（a）
}PowerSupplyState_TypeDef;

/*测量数据的辅助信息(返回)*/
typedef struct
{
	uint32_t MaxIndex;				// 功率最大值在当前数据包中的索引
	float	 MaxPower_dBm;			// 当前数据包中的功率最大值

	int16_t	 Temperature;			// 设备温度，摄氏度 = 0.01 * Temperature
	uint16_t RFState;				// 射频状态
	uint16_t BBState;				// 基带状态
	uint16_t GainPattern;	    	// 当前数据包对应频点所使用的增益控制字

	uint32_t ConvertPattern;		// 当前数据包频点所使用的频率变换方式

	double	 SysTimeStamp;			// 当前数据包所对应的系统时间戳，单位s

	double   AbsoluteTimeStamp;		// 当前数据包对应的绝对时间戳
	float    Latitude;				// 当前数据包对应的纬度坐标,北纬为正数，南纬为负数，以此区分南北纬
	float    Longitude;				// 当前数据包对应的经度坐标,东经为正数，西经为负数，以此区分东西经
    float    Altitude;          	// 当前数据包对应的海拔
    float    SATHealth;         	// 当前GNSS定位卫星的健康度（SNR）

	double	 IFAGCGain;				// 单位dB,当前的IFAGC的增益，正值代表放大，负值代表衰减
	double   RefClkFreqOffset;		// 单位ppm, 表示当前设备参考时钟频率的偏移，该值以GNSS频率为参考 
    uint64_t nsSinceEpoch;			// 当前数据包所对应的ns级系统时间戳
}MeasAuxInfo_TypeDef;

/*---------------------------------------------------
扫描模式结构体(sweep)
-----------------------------------------------------*/
/*SWP的配置结构体(简洁配置)*/
typedef struct
{
	double StartFreq_Hz; 							   // 起始频率
	double StopFreq_Hz;	 							   // 终止频率
	double CenterFreq_Hz;                              // 中心频率
	double Span_Hz;                                    // 频率扫宽
	double RefLevel_dBm;							   // 参考电平
	double RBW_Hz;		 							   // 分辨率带宽
	double VBW_Hz;									   // 视频带宽
	double SweepTime;								   // 当扫描时间模式指定为Manual时，该参数为绝对时间；当指定为*N时，该参数为扫描时间倍率	

	SWP_FreqAssignment_TypeDef FreqAssignment;         // 频率指定方式，选择以StartStop或CenterSpan方式设定频率

	Window_TypeDef Window; 							   // FFT分析所使用的窗型

	RBWMode_TypeDef RBWMode; 						   // RBW更新方式。手动输入、根据Span自动设置

	VBWMode_TypeDef VBWMode;						   // VBW更新方式。手动输入、VBW = RBW、VBW = 0.1*RBW、 VBW = 0.01*RBW

	SweepTimeMode_TypeDef SweepTimeMode;			   // 扫描时间模式

	Detector_TypeDef Detector;						   // 检波器

	TraceDetectMode_TypeDef TraceDetectMode;		   // 迹线检波模式（频率轴）
	TraceDetector_TypeDef TraceDetector; 			   // 迹线检波器

	uint32_t TracePoints;  							   // 迹线点数

	RxPort_TypeDef RxPort; 							   // 射频输入端口

	SpurRejection_TypeDef SpurRejection; 			   // 杂散抑制

	ReferenceClockSource_TypeDef ReferenceClockSource; // 参考时钟源
	double ReferenceClockFrequency; 				   // 参考时钟频率，Hz

	SWP_TriggerSource_TypeDef TriggerSource; 		   // 输入触发源
	TriggerEdge_TypeDef	TriggerEdge; 		 		   // 输入触发边沿

	PreamplifierState_TypeDef Preamplifier;			   // 前置放大器动作设置

	SWP_TraceType_TypeDef TraceType; 				   // 输出迹线类型

}SWP_EZProfile_TypeDef;

/*扫描模式的配置结构体(配置)*/
typedef struct
{
	double StartFreq_Hz; 									 // 起始频率
	double StopFreq_Hz;	 									 // 终止频率
	double CenterFreq_Hz;                                    // 中心频率
	double Span_Hz;                                          // 频率扫宽
	double RefLevel_dBm;									 // 参考电平
	double RBW_Hz;		 									 // 分辨率带宽
	double VBW_Hz;											 // 视频带宽
	double SweepTime;										 // 当扫描时间模式指定为Manual时，该参数为绝对时间；当指定为*N时，该参数为扫描时间倍率	
	double TraceBinSize_Hz;                                  // 迹线相邻频点之间的频率间隔

	SWP_FreqAssignment_TypeDef FreqAssignment;               // 频率指定方式，选择以StartStop或CenterSpan方式设定频率
	
	Window_TypeDef Window; 									 // FFT分析所使用的窗型

	RBWMode_TypeDef RBWMode; 							 	 // RBW更新方式。手动输入、根据Span自动设置

	VBWMode_TypeDef VBWMode;							 	 // VBW更新方式。手动输入、VBW = RBW、VBW = 0.1*RBW、 VBW = 0.01*RBW

	SweepTimeMode_TypeDef SweepTimeMode;					 // 扫描时间模式

	Detector_TypeDef Detector;								 // 检波器

	TraceFormat_TypeDef TraceFormat;						 // 迹线格式
	TraceDetectMode_TypeDef TraceDetectMode;				 // 迹线检波模式（频率轴）
	TraceDetector_TypeDef TraceDetector; 					 // 迹线检波器

	uint32_t TracePoints;  									 // 迹线点数
	TracePointsStrategy_TypeDef	TracePointsStrategy; 		 // 迹线点数映射策略
	TraceAlign_TypeDef TraceAlign;                           // 迹线对齐方式指定

	FFTExecutionStrategy_TypeDef FFTExecutionStrategy; 		 // FFT执行策略

	RxPort_TypeDef RxPort; 									 // 射频输入端口

	SpurRejection_TypeDef SpurRejection; 					 // 杂散抑制

	ReferenceClockSource_TypeDef ReferenceClockSource; 		 // 参考时钟源
	double ReferenceClockFrequency; 				   		 // 参考时钟频率，Hz
	uint8_t EnableReferenceClockOut;						 // 使能参考时钟输出

	SystemClockSource_TypeDef SystemClockSource; 		     // 系统时钟源，默认使用内部系统时钟，请在厂商指导下使用
	double ExternalSystemClockFrequency; 				   	 // 外部系统时钟频率，Hz

	SWP_TriggerSource_TypeDef TriggerSource; 				 // 输入触发源
	TriggerEdge_TypeDef	TriggerEdge; 		 				 // 输入触发边沿
	TriggerOutMode_TypeDef TriggerOutMode;   				 // 触发输出模式
	TriggerOutPulsePolarity_TypeDef	TriggerOutPulsePolarity; // 触发输出脉冲极性

	uint32_t PowerBalance; 									 // 功耗与扫描速度平衡
	GainStrategy_TypeDef GainStrategy; 						 // 增益策略
	PreamplifierState_TypeDef Preamplifier;					 // 前置放大器动作设置
	
	uint8_t	AnalogIFBWGrade; 								 //	中频带宽档位
	uint8_t IFGainGrade; 	 								 //	中频增益档位

	uint8_t	EnableDebugMode; 	 							 //	调试模式，高级应用不推荐用户自行使用，默认值为 0
	uint8_t	CalibrationSettings; 							 // 校准选择，高级应用不推荐用户自行使用，默认值为 0

	int8_t Atten;                                            // 衰减dB,设定频谱仪通道衰减量，默认-1（自动）

	uint8_t EnableIFAGC;							   		 // 特定设备适用。中频AGC控制，0：AGC关闭，使用MGC方式；1：AGC开启,当中频饱和时降低中频增益避免饱和。

	SWP_TraceType_TypeDef TraceType; 						 // 输出迹线类型

	LOOptimization_TypeDef LOOptimization;					 // 本振优化

}SWP_Profile_TypeDef;

/*扫描模式的迹线信息结构体(返回)*/
typedef struct
{
	int FullsweepTracePoints;	     // 完整迹线的点数
	int PartialsweepTracePoints;     // 每个频点的迹线点数，即每次GetPart的点数
	int TotalHops;				     // 完整迹线的频点数，即一条完整迹线需要GetPart的次数
	uint32_t UserStartIndex;	     // 迹线数组中与用户指定StartFreq_Hz对应的数组索引，即HopIndex = 0时，Freq[UserStartIndex]是与SWPProfile.StartFreq_Hz最为近的频率点
	uint32_t UserStopIndex;	         // 迹线数组中与用户指定SttopFreq_Hz对应的数组索引，即HopIndex = TotalHops - 1时，Freq[UserStopIndex]是与SWPProfile.StopFreq_Hz最为近的频率点
	
	double TraceBinBW_Hz;		     // 迹线两点间的频率间隔
	double StartFreq_Hz;		     // 迹线第一个频点的频率
	double AnalysisBW_Hz;		     // 每个频点对应的分析带宽

	int TraceDetectRatio;		     // 视频检波的检波比
	int DecimateFactor;			     // 时域数据的抽取倍数
	float FrameTimeMultiple;	     // 帧分析时间倍率，设备在单一频点上的分析时间 = 默认分析时间（系统自行设定） * 帧时间倍率。提高帧时间倍率将增加设备的最小扫描时间，但不严格线性。
	double FrameTime;		 	     // 帧扫描时间：用于进行单帧FFT分析的信号持续时间（单位为秒）
	double EstimateMinSweepTime;     // 当前配置下，所能设定的最小扫描时间（单位为秒，结果主要受Span、RBW、VBW、帧扫描时间等因素影响） 
	DataFormat_TypeDef DataFormat;   // 时域数据格式
	uint64_t SamplePoints;		     // 时域数据采样长度
	uint32_t GainParameter;		     // 增益相关参数，包括Space(31~24Bit)、PreAmplifierState(23~16Bit)、StartRFBand(15~8Bit)、StopRFBand(7~0Bit)
	DSPPlatform_Typedef DSPPlatform; // 当前配置所使用的DSP运算平台
}SWP_TraceInfo_TypeDef;

/*扫描模式的调试信息结构体(返回)*/
typedef struct
{
	double	RFCFreq;				//
	double	RFLOFreq;				//
	double	IFLOFreq;				//
	double	IF1STFreq;				//
	double	IF2NDFreq;				//
	double	NCOFreq;				//

	int		HopIndex;				//

	uint8_t	RFBand;					//
	uint8_t	HighSideRFLO;			//
	uint8_t HighSideIFLO;			//
	uint8_t IQInvert;				//

	uint8_t RFGainSpace;			//
	uint8_t	RFGainGrade;			//
	uint8_t AnalogIFBWGrade;		//
	uint8_t IFGainGrade;			//

	uint16_t RFState;				//
	uint16_t BBState;				//

	uint32_t LowCTIndex;			//
	uint32_t HighCTIndex;			//
	uint32_t RTIndex;				//

	int16_t CalibratedTemperature;  //
	int16_t LowCharactTemperature;  //
	int16_t HighCharactTemperature; //
	int16_t ReferenceTemperature;	//

	float	 RFACalVal;				//
}SWP_DebugInfo_TypeDef;

/*SWP包含配置、返回信息和暂存数据的顶层结构体(配置、返回、暂存)*/
typedef struct
{
	double* Freq_Hz;                     // 暂存在Device指针中的Frequency数据的地址
	float* PowerSpec_dBm;                // 暂存在Device指针中的PowerSpec_dBm数据的地址
	int HopIndex;					     // 当前数据对应的频点索引，用于拼接频谱
	int FrameIndex;					     // 当一个频点存在多帧（多次FFT）时，指示当前数据的帧索引

	void* AlternIQStream;			 	 // 当选择频谱迹线与IQ数据一同上传时，交织IQ数据的地址
	float ScaletoV;						 // 当选择频谱迹线与IQ数据一同上传时，IQ至V的比例因子

	MeasAuxInfo_TypeDef MeasAuxInfo;     // 当前数据对应信息，包括当前包内最大数据，及当前时刻的温度坐标设备状态等

	SWP_Profile_TypeDef SWP_Profile;	 // 当前SWP数据对应的SWP配置信息，一般通过SWP_Configuration函数更新（SWP_ProfileOut）
	SWP_TraceInfo_TypeDef SWP_TraceInfo; // 当前SWP数据对应的迹线信息，一般通过SWP_Configuration函数更新（SWP_TraceInfo）

	DeviceInfo_TypeDef DeviceInfo;       // 当前SWP数据对应的设备信息
	DeviceState_TypeDef DeviceState;     // 当前SWP数据对应的设备状态
}SWPTrace_TypeDef;

/*---------------------------------------------------
IQ流模式结构体(IQStream)
-----------------------------------------------------*/
/*IQS的配置结构体(简洁配置)*/
typedef struct
{
	double CenterFreq_Hz; 							   // 中心频率
	double RefLevel_dBm;							   // 参考电平
	uint32_t DecimateFactor;						   // 时域数据的抽取倍数

	RxPort_TypeDef RxPort;							   // 射频输入端口

	uint32_t BusTimeout_ms;							   // 传输超时时间

	IQS_TriggerSource_TypeDef TriggerSource;		   // 输入触发源
	TriggerEdge_TypeDef	TriggerEdge;				   // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;				   // 输入触发模式	
	uint64_t TriggerLength;							   // 输入触发后的采样点数，仅在FixedPoints模式下生效

	double TriggerLevel_dBm;						   // 电平触发：门限
	double TriggerTimer_Period;						   // 定时触发：触发周期，单位为s		

	DataFormat_TypeDef DataFormat;					   // 数据格式

	PreamplifierState_TypeDef Preamplifier;			   // 前置放大器动作

	uint8_t	AnalogIFBWGrade;						   // 中频带宽档位

	ReferenceClockSource_TypeDef ReferenceClockSource; // 参考时钟源
	double ReferenceClockFrequency;					   // 参考时钟频率

	double  NativeIQSampleRate_SPS;					   // 特定设备适用。原生的IQ采样速率，对于可变采样率设备，可通过调整该参数对采样率进行调整；非可变采样率设备配总是配置为系统默认的固定值

	uint8_t EnableIFAGC;							   // 特定设备适用。中频AGC控制，0：AGC关闭，使用MGC方式；1：AGC开启,当中频饱和时降低中频增益避免饱和。

}IQS_EZProfile_TypeDef;

/*IQS的配置结构体(配置)*/
typedef struct
{
	double CenterFreq_Hz; 								 	 // 中心频率
	double RefLevel_dBm;								 	 // 参考电平
	uint32_t DecimateFactor;								 // 时域数据的抽取倍数

	RxPort_TypeDef RxPort;									 // 射频输入端口

	uint32_t BusTimeout_ms;							 		 // 传输超时时间

	IQS_TriggerSource_TypeDef TriggerSource;				 // 输入触发源
	TriggerEdge_TypeDef	TriggerEdge;						 // 输入触发边沿
	TriggerMode_TypeDef	TriggerMode;						 // 输入触发模式	
	uint64_t TriggerLength;									 // 输入触发后的采样点数，仅在FixedPoints模式下生效

	TriggerOutMode_TypeDef TriggerOutMode;					 // 触发输出模式
	TriggerOutPulsePolarity_TypeDef TriggerOutPulsePolarity; // 触发输出脉冲极性

	double TriggerLevel_dBm;								 // 电平触发：门限
	double TriggerLevel_SafeTime;							 // 电平触发：防抖安全时间，单位为s
	double TriggerDelay;									 // 电平触发：触发延迟，单位为s
	double PreTriggerTime;									 // 电平触发：预触发时间，单位为s

	TriggerTimerSync_TypeDef TriggerTimerSync;			     // 定时触发：与外触发边沿的同步选项
	double TriggerTimer_Period;								 // 定时触发：触发周期，单位为s		
	
	uint8_t EnableReTrigger;							     // 自动重触发：使能设备在捕获到一次触发后，进行多次响应，仅可用于FixedPoint模式下
	double ReTrigger_Period;								 // 自动重触发：多次响应的时间间隔，也作为Timer触发模式下的触发周期，单位为s
	uint16_t ReTrigger_Count;				 	    		 // 自动重触发：每次原触发动作之后，自动重触发的执行次数

	DataFormat_TypeDef DataFormat;						 	 // 数据格式

	GainStrategy_TypeDef GainStrategy;				 		 // 增益策略
	PreamplifierState_TypeDef Preamplifier;					 // 前置放大器动作

	uint8_t	AnalogIFBWGrade;								 //	中频带宽档位
	uint8_t	IFGainGrade;									 //	中频增益档位

	uint8_t	EnableDebugMode;								 //	调试模式，高级应用不推荐用户自行使用，默认值为 0

	ReferenceClockSource_TypeDef ReferenceClockSource;		 //	参考时钟源
	double ReferenceClockFrequency;							 //	参考时钟频率
	uint8_t EnableReferenceClockOut;						 // 使能参考时钟输出

	SystemClockSource_TypeDef SystemClockSource; 		     // 系统时钟源
	double ExternalSystemClockFrequency; 				   	 // 外部系统时钟频率，Hz

	double  NativeIQSampleRate_SPS;							 // 特定设备适用。原生的IQ采样速率，对于可变采样率设备，可通过调整该参数对采样率进行调整；非可变采样率设备配总是配置为系统默认的固定值
	
	uint8_t EnableIFAGC;									 // 特定设备适用。中频AGC控制，0：AGC关闭，使用MGC方式；1：AGC开启,当中频饱和时降低中频增益避免饱和。

	int8_t Atten;                                            // 衰减

	DCCancelerMode_TypeDef DCCancelerMode;					 // 特定设备适用。直流抑制。0: 关闭DCC；1：开启，高通滤波器模式（更好的抑制效果，但会损伤DC至100kHz范围内的信号）；2：开启，手动偏置模式（需要人工校准，但不低频损伤信号）

	QDCMode_TypeDef	QDCMode;								 // 特定设备适用。IQ幅相修正器。QDCOff: 关闭QDC功能；QDCManualMode：开启并使用手动模式；QDCAutoMode：开启并使用自动QDC模式

	float QDCIGain;											 // 特定设备适用。归一化线性增益 I路，1.0 表示无增益，设置范围 0.8~1.2
	float QDCQGain;											 // 特定设备适用。归一化线性增益 Q路，1.0 表示无增益 ，设置范围 0.8~1.2
	float QDCPhaseComp;										 // 特定设备适用。归一化相位补偿系数，设置范围 -0.2~+0.2

	int8_t DCCIOffset;										 // 特定设备适用。I通道直流偏置， LSB
	int8_t DCCQOffset;										 // 特定设备适用。Q通道直流偏置， LSB

	LOOptimization_TypeDef LOOptimization;					 // 本振优化

}IQS_Profile_TypeDef;

/*IQS配置后返回的流信息结构体(返回)*/
typedef struct
{
	double Bandwidth;        // 当前配置对应的接收机物理通道或数字信号处理的带宽
	double IQSampleRate;     // 当前配置对应的IQ单路采样率，单位S/s（Sample/second）
	uint64_t PacketCount;	 // 当前配置单帧（Frame)对应的总数据包数，仅在FixedPoints模式下生效
	
	uint64_t StreamSamples;	 // Fixedpoints模式下表示当前配置单帧（Frame)对应采样的总点数；Adaptive模式下没有物理意义，值为0
	uint64_t StreamDataSize; // Fixedpoints模式下表示当前配置单帧（Frame)对应采样的总字节数；Adaptive模式下没有物理意义，值为0

	uint32_t PacketSamples;  // 每次调用IQS_GetIQStream 获取到的数据包中采样点数 每个数据包中包含的样点数
	uint32_t PacketDataSize; // 每次调用IQS_GetIQStream 所得到的有效数据字节数
	uint32_t GainParameter;	 // 增益相关参数，包括Space(31~24Bit)、PreAmplifierState(23~16Bit)、StartRFBand(15~8Bit)、StopRFBand(7~0Bit)
}IQS_StreamInfo_TypeDef;

/*IQS数据包中包含的触发信息结构体，DET和RTA的触发信息返回结构体与其相同(返回)*/
typedef struct
{
	uint64_t	SysTimerCountOfFirstDataPoint;	  // 当前包的首个数据点对应的系统时间戳
	uint16_t	InPacketTriggeredDataSize;		  // 当前包中有效触发数据的字节数
	uint16_t	InPacketTriggerEdges;			  // 当前包中所包含的触发边沿个数
	uint32_t	StartDataIndexOfTriggerEdges[25]; // 当前包中触发边沿对应的包中数据位置
	uint64_t	SysTimerCountOfEdges[25];		  // 当前包中触发边沿的系统时间戳
	int8_t		EdgeType[25];					  // 当前包中各触发边沿的极性
}TriggerInfo_TypeDef;

typedef TriggerInfo_TypeDef IQS_TriggerInfo_TypeDef;
typedef TriggerInfo_TypeDef SFA_TriggerInfo_TypeDef;
typedef TriggerInfo_TypeDef DET_TriggerInfo_TypeDef;
typedef TriggerInfo_TypeDef RTA_TriggerInfo_TypeDef;

/*IQS包含配置、返回信息和暂存数据的顶层结构体(配置、返回、暂存)*/
typedef struct
{
	void* AlternIQStream;				     // 交织分布的IQ时域数据，单路可能为i8 i16 i32 格式

	float IQS_ScaleToV;						 // int类型至电压绝对值（V）的系数

	float	 MaxPower_dBm;					 // 当前数据包中的功率最大值
	uint32_t MaxIndex;						 // 功率最大值在当前数据包中的索引

	IQS_Profile_TypeDef IQS_Profile;		 // 当前IQ流对应的IQS配置信息，一般通过IQS_Configuration函数更新（IQS_ProfileOut）
	IQS_StreamInfo_TypeDef IQS_StreamInfo;	 // 当前IQ流对应的IQS流格式信息，一般通过IQS_Configuration函数更新

	IQS_TriggerInfo_TypeDef IQS_TriggerInfo; // 当前IQ流对应的IQS触发信息，一般通过IQS_GetIQStream函数更新
	DeviceInfo_TypeDef DeviceInfo;           // 当前IQ流对应的设备信息，一般通过IQS_GetIQStream函数更新
	DeviceState_TypeDef DeviceState;         // 当前IQ流对应的设备状态，一般通过IQS_GetIQStream函数更新

}IQStream_TypeDef; 


/*---------------------------------------------------
检波模式结构体(Detector)
-----------------------------------------------------*/
/*DET的配置结构体(简洁配置)*/
typedef struct
{
	double CenterFreq_Hz; 							   // 中心频率
	double RefLevel_dBm;							   // 参考电平
	uint32_t DecimateFactor;						   // 时域数据的抽取倍数

	RxPort_TypeDef RxPort;							   // 射频输入端口

	uint32_t BusTimeout_ms;							   // 传输超时时间

	DET_TriggerSource_TypeDef TriggerSource;		   // 输入触发源
	TriggerEdge_TypeDef TriggerEdge;				   // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;				   // 输入触发模式	
	uint64_t TriggerLength;							   // 输入触发后的采样点数，仅在FixedPoints模式下生效

	double TriggerLevel_dBm;						   // 电平触发：门限
	double TriggerTimer_Period;						   // 定时触发：周期				

	Detector_TypeDef Detector;  					   // 检波器
	uint16_t DetectRatio;  							   // 检波比，检波器对功率迹线进行检波，每DetectRatio个原始数据点检出为1个输出迹线点

	PreamplifierState_TypeDef Preamplifier;			   // 前置放大器动作

	uint8_t	AnalogIFBWGrade;						   // 中频带宽档位

	ReferenceClockSource_TypeDef ReferenceClockSource; // 参考时钟源
	double ReferenceClockFrequency;					   // 参考时钟频率

}DET_EZProfile_TypeDef;

/*DET的配置结构体(配置)*/
typedef struct
{
	double CenterFreq_Hz; 									 // 中心频率
	double RefLevel_dBm;									 // 参考电平
	uint32_t DecimateFactor;								 // 时域数据的抽取倍数

	RxPort_TypeDef RxPort;									 // 射频输入端口

	uint32_t BusTimeout_ms;									 // 传输超时时间

	DET_TriggerSource_TypeDef TriggerSource;				 // 输入触发源
	TriggerEdge_TypeDef TriggerEdge;						 // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;						 // 输入触发模式	
	uint64_t TriggerLength;									 // 输入触发后的采样点数，仅在FixedPoints模式下生效

	TriggerOutMode_TypeDef TriggerOutMode;					 // 触发输出模式
	TriggerOutPulsePolarity_TypeDef	TriggerOutPulsePolarity; // 触发输出脉冲极性

	double TriggerLevel_dBm;								 // 电平触发：门限
	double TriggerLevel_SafeTime;							 // 电平触发：防抖安全时间，单位为s
	double TriggerDelay;									 // 电平触发：触发延迟，单位为s
	double PreTriggerTime;									 // 电平触发：预触发时间，单位为s

	TriggerTimerSync_TypeDef TriggerTimerSync;			     // 定时触发：与外触发边沿同步选项
	double TriggerTimer_Period;								 // 定时触发：周期				
	
	uint8_t EnableReTrigger;							     // 自动重触发：使能设备在捕获到一次触发后，进行多次响应，仅可用于FixedPoint模式下
	double ReTrigger_Period;								 // 自动重触发：多次响应的时间间隔，也作为Timer触发模式下的触发周期，单位为s
	uint16_t ReTrigger_Count;				 	    		 // 自动重触发：每次原触发动作之后，自动重触发的执行次数

	Detector_TypeDef Detector;  							 // 检波器
	uint16_t DetectRatio;  									 // 检波比，检波器对功率迹线进行检波，每DetectRatio个原始数据点检出为1个输出迹线点

	GainStrategy_TypeDef GainStrategy;						 // 增益策略
	PreamplifierState_TypeDef Preamplifier;					 // 前置放大器动作

	uint8_t	AnalogIFBWGrade;								 //	中频带宽档位
	uint8_t	IFGainGrade;									 //	中频增益档位

	uint8_t	EnableDebugMode;								 //	调试模式，高级应用不推荐用户自行使用，默认值为0

	ReferenceClockSource_TypeDef ReferenceClockSource;		 //	参考时钟源
	double ReferenceClockFrequency;							 //	参考时钟频率
	uint8_t EnableReferenceClockOut;						 // 使能参考时钟输出

	SystemClockSource_TypeDef SystemClockSource; 		     // 系统时钟源
	double ExternalSystemClockFrequency; 				   	 // 外部系统时钟频率，Hz

	int8_t Atten;                                            // 衰减

	uint8_t EnableIFAGC;							   		 // 特定设备适用。中频AGC控制，0：AGC关闭，使用MGC方式；1：AGC开启,当中频饱和时降低中频增益避免饱和。

	DCCancelerMode_TypeDef DCCancelerMode;					 // 特定设备适用。直流抑制。0: 关闭DCC；1：开启，高通滤波器模式（更好的抑制效果，但会损伤DC至100kHz范围内的信号）；2：开启，手动偏置模式（需要人工校准，但不低频损伤信号）

	QDCMode_TypeDef	QDCMode;								 // 特定设备适用。IQ幅相修正器。QDCOff: 关闭QDC功能；QDCManualMode：开启并使用手动模式；QDCAutoMode：开启并使用自动QDC模式

	float QDCIGain;											 // 特定设备适用。归一化线性增益 I路，1.0 表示无增益，设置范围 0.8~1.2
	float QDCQGain;											 // 特定设备适用。归一化线性增益 Q路，1.0 表示无增益 ，设置范围 0.8~1.2
	float QDCPhaseComp;										 // 特定设备适用。归一化相位补偿系数，设置范围 -0.2~+0.2

	int8_t DCCIOffset;										 // 特定设备适用。I通道直流偏置， LSB
	int8_t DCCQOffset;										 // 特定设备适用。Q通道直流偏置， LSB

	LOOptimization_TypeDef LOOptimization;					 // 本振优化

}DET_Profile_TypeDef;


/*RBW滤波器类型*/
typedef enum
{
	RBWFilter_80PercentABW = 0x00,
	RBWFilter_Gaussian_3dB = 0x01,
	RBWFilter_Gaussian_6dB = 0x02,
	RBWFilter_Gaussian_Impulse = 0x03,
	RBWFilter_Gaussian_Noise = 0x04,
	RBWFilter_Flattop = 0x05
}RBWFilterType_TypeDef;

/*DET的配置结构体(配置)*/
typedef struct
{
	double CenterFreq_Hz; 									 // 中心频率
	double RefLevel_dBm;									 // 参考电平
	uint32_t DecimateFactor;								 // 时域数据的抽取倍数

	RxPort_TypeDef RxPort;									 // 射频输入端口

	uint32_t BusTimeout_ms;									 // 传输超时时间

	DET_TriggerSource_TypeDef TriggerSource;				 // 输入触发源
	TriggerEdge_TypeDef TriggerEdge;						 // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;						 // 输入触发模式	
	uint64_t TriggerLength;									 // 输入触发后的采样点数，仅在FixedPoints模式下生效

	TriggerOutMode_TypeDef TriggerOutMode;					 // 触发输出模式
	TriggerOutPulsePolarity_TypeDef	TriggerOutPulsePolarity; // 触发输出脉冲极性

	double TriggerLevel_dBm;								 // 电平触发：门限
	double TriggerLevel_SafeTime;							 // 电平触发：防抖安全时间，单位为s
	double TriggerDelay;									 // 电平触发：触发延迟，单位为s
	double PreTriggerTime;									 // 电平触发：预触发时间，单位为s

	TriggerTimerSync_TypeDef TriggerTimerSync;			     // 定时触发：与外触发边沿同步选项
	double TriggerTimer_Period;								 // 定时触发：周期				
	
	uint8_t EnableReTrigger;							     // 自动重触发：使能设备在捕获到一次触发后，进行多次响应，仅可用于FixedPoint模式下
	double ReTrigger_Period;								 // 自动重触发：多次响应的时间间隔，也作为Timer触发模式下的触发周期，单位为s
	uint16_t ReTrigger_Count;				 	    		 // 自动重触发：每次原触发动作之后，自动重触发的执行次数

	Detector_TypeDef Detector;  							 // 检波器
	uint16_t DetectRatio;  									 // 检波比，检波器对功率迹线进行检波，每DetectRatio个原始数据点检出为1个输出迹线点

	GainStrategy_TypeDef GainStrategy;						 // 增益策略
	PreamplifierState_TypeDef Preamplifier;					 // 前置放大器动作

	uint8_t	AnalogIFBWGrade;								 //	中频带宽档位
	uint8_t	IFGainGrade;									 //	中频增益档位

	uint8_t	EnableDebugMode;								 //	调试模式，高级应用不推荐用户自行使用，默认值为0

	ReferenceClockSource_TypeDef ReferenceClockSource;		 //	参考时钟源
	double ReferenceClockFrequency;							 //	参考时钟频率
	uint8_t EnableReferenceClockOut;						 // 使能参考时钟输出

	SystemClockSource_TypeDef SystemClockSource; 		     // 系统时钟源
	double ExternalSystemClockFrequency; 				   	 // 外部系统时钟频率，Hz

	int8_t Atten;                                            // 衰减

	DCCancelerMode_TypeDef DCCancelerMode;					 // 特定设备适用。直流抑制。0: 关闭DCC；1：开启，高通滤波器模式（更好的抑制效果，但会损伤DC至100kHz范围内的信号）；2：开启，手动偏置模式（需要人工校准，但不低频损伤信号）

	QDCMode_TypeDef	QDCMode;								 // 特定设备适用。IQ幅相修正器。QDCOff: 关闭QDC功能；QDCManualMode：开启并使用手动模式；QDCAutoMode：开启并使用自动QDC模式

	float QDCIGain;											 // 特定设备适用。归一化线性增益 I路，1.0 表示无增益，设置范围 0.8~1.2
	float QDCQGain;											 // 特定设备适用。归一化线性增益 Q路，1.0 表示无增益 ，设置范围 0.8~1.2
	float QDCPhaseComp;										 // 特定设备适用。归一化相位补偿系数，设置范围 -0.2~+0.2

	int8_t DCCIOffset;										 // 特定设备适用。I通道直流偏置， LSB
	int8_t DCCQOffset;										 // 特定设备适用。Q通道直流偏置， LSB

	LOOptimization_TypeDef LOOptimization;					 // 本振优化

	double RBW_Hz;											 // 分辨率带宽
	double VBW_Hz;											 // 视频带宽
	VBWMode_TypeDef VBWMode;								 // VBW更新方式
	RBWFilterType_TypeDef RBWFilterType;					 // RBW滤波器类型

}ZSP_Profile_TypeDef;


/*DET配置后返回的流信息结构体(返回)*/
typedef struct
{
	uint64_t PacketCount;	 // 当前配置对应的总数据包数，仅在FixedPoints模式下生效
	
	uint64_t StreamSamples;  // Fixedpoints模式下表示当前配置单帧（Frame)对应采样的总点数；Adaptive模式下没有物理意义，值为0
	uint64_t StreamDataSize; // Fixedpoints模式下表示当前配置单帧（Frame)对应采样的总字节数；Adaptive模式下没有物理意义，值为0

	uint32_t PacketSamples;  // 每次调用DET_GetTrace 获取到的数据包中采样点数 每个数据包中包含的样点数
	uint32_t PacketDataSize; // 每次调用DET_GetTrace 所得到的有效数据字节数
	double TimeResolution;   // 时域点分辨率
	uint32_t GainParameter;	 // 增益相关参数，包括Space(31~24Bit)、PreAmplifierState(23~16Bit)、StartRFBand(15~8Bit)、StopRFBand(7~0Bit)
}DET_StreamInfo_TypeDef;

/*DET包含配置、返回信息和暂存数据的顶层结构体(配置、返回、暂存)*/
typedef struct
{
	float* NormalizedPowerStream;            // 暂存在Device指针中的归一化的功率流
	float DET_ScaleToV;                      // int类型至电压绝对值（V）的系数

	uint32_t MaxIndex;						 // 功率最大值在当前数据包中的索引
	float	 MaxPower_dBm;					 // 当前数据包中的功率最大值


	DET_Profile_TypeDef DET_Profile;         // 当前DET流对应的DET配置信息，一般通过DET_Configuration函数更新（DET_ProfileOut）
	DET_StreamInfo_TypeDef DET_StreamInfo;   // 当前DET流对应的DET格式信息，一般通过DET_Configuration函数更新

	DET_TriggerInfo_TypeDef DET_TriggerInfo; // 当前DET流对应的DET触发信息
	DeviceInfo_TypeDef DeviceInfo;           // 当前DET流对应的设备信息
	DeviceState_TypeDef DeviceState;         // 当前DET流对应的设备状态

}DETStream_TypeDef;

/*---------------------------------------------------
实时频谱分析模式结构体(RealTime Analysis)
-----------------------------------------------------*/
/*RTA的配置结构体(简洁配置)*/
typedef struct
{
	double CenterFreq_Hz; 							  // 中心频率
	double RefLevel_dBm;							  // 参考电平
	double RBW_Hz;									  // 分辨率带宽
	double VBW_Hz;									  // 视频带宽

	RBWMode_TypeDef RBWMode; 						  // RBW更新方式。手动输入、根据Span自动设置
	VBWMode_TypeDef VBWMode;						  // VBW更新方式。手动输入、VBW = RBW、VBW = 0.1*RBW、 VBW = 0.01*RBW

	uint32_t DecimateFactor;						  // 时域数据的抽取倍数

	Window_TypeDef	Window;							  // 窗型

	SweepTimeMode_TypeDef SweepTimeMode;			  // 扫描时间模式
	double SweepTime;								  // 当扫描时间模式指定为Manual时，该参数为绝对时间；当指定为*N时，该参数为扫描时间倍率
	Detector_TypeDef Detector;						  // 检波器

	TraceDetectMode_TypeDef TraceDetectMode;		  // 迹线检波模式
	TraceDetector_TypeDef TraceDetector;  			  // 迹线检波器
	uint32_t TraceDetectRatio;  					  // 迹线检波检波比。迹线检波器将原始频谱迹线以每TraceDetectRatio个原始频谱数据点检出1个输出频谱数据点

	RxPort_TypeDef	RxPort;							  // 接收端口设置

	uint32_t BusTimeout_ms;							  // 传输超时时间

	RTA_TriggerSource_TypeDef TriggerSource;		   // 输入触发源
	TriggerEdge_TypeDef TriggerEdge;				   // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;				   // 输入触发模式
	double TriggerAcqTime;							   // 输入触发后的采样时间，仅在FixedPoints模式下生效，单位s

	double TriggerLevel_dBm;						   // 电平触发：门限
	double TriggerTimer_Period;						   // 定时触发：周期					

	PreamplifierState_TypeDef Preamplifier;			   // 前置放大器动作

	ReferenceClockSource_TypeDef ReferenceClockSource; // 参考时钟源
	double ReferenceClockFrequency;					   // 参考时钟频率

}RTA_EZProfile_TypeDef;

/*RTA的配置结构体(配置)*/
typedef struct
{
	double CenterFreq_Hz; 									 // 中心频率
	double RefLevel_dBm;									 // 参考电平
	double RBW_Hz;											 // 分辨率带宽
	double VBW_Hz;											 // 视频带宽
	RBWMode_TypeDef RBWMode; 							 	 // RBW更新方式。手动输入、根据Span自动设置
	VBWMode_TypeDef VBWMode;							 	 // VBW更新方式。手动输入、VBW = RBW、VBW = 0.1*RBW、 VBW = 0.01*RBW

	uint32_t DecimateFactor;								 // 时域数据的抽取倍数

	Window_TypeDef	Window;									 // 窗型

	SweepTimeMode_TypeDef SweepTimeMode;					 // 扫描时间模式
	double SweepTime;										 // 当扫描时间模式指定为Manual时，该参数为绝对时间；当指定为*N时，该参数为扫描时间倍率
	Detector_TypeDef Detector;								 // 检波器

	TraceDetectMode_TypeDef TraceDetectMode;				 // 迹线检波模式
	uint32_t TraceDetectRatio;  						     // 迹线检波检波比
	TraceDetector_TypeDef TraceDetector;  				     // 迹线检波检波器

	RxPort_TypeDef	RxPort;									 // 接收端口设置

	uint32_t BusTimeout_ms;									 // 传输超时时间

	RTA_TriggerSource_TypeDef TriggerSource;				 // 输入触发源
	TriggerEdge_TypeDef TriggerEdge;						 // 输入触发边沿

	TriggerMode_TypeDef	TriggerMode;						 // 输入触发模式
	double TriggerAcqTime;							     	 // 输入触发后的采样时间，仅在FixedPoints模式下生效，单位s

	TriggerOutMode_TypeDef TriggerOutMode;					 // 触发输出模式
	TriggerOutPulsePolarity_TypeDef	TriggerOutPulsePolarity; // 触发输出脉冲极性

	double TriggerLevel_dBm;								 // 电平触发：门限
	double TriggerLevel_SafeTime;							 // 电平触发：防抖安全时间，单位为s
	double TriggerDelay;									 // 电平触发：触发延迟，单位为s
	double PreTriggerTime;									 // 电平触发：预触发时间，单位为s

	TriggerTimerSync_TypeDef TriggerTimerSync;			     // 定时触发：与外触发边沿同步选项
	double TriggerTimer_Period;								 // 定时触发：周期					

	uint8_t EnableReTrigger;							     // 自动重触发：使能设备在捕获到一次触发后，进行多次响应，仅可用于FixedPoint模式下
	double ReTrigger_Period;								 // 自动重触发：多次响应的时间间隔，也作为Timer触发模式下的触发周期，单位为s
	uint16_t ReTrigger_Count;				 	    		 // 自动重触发：每次原触发动作之后，自动重触发的执行次数

	GainStrategy_TypeDef GainStrategy;						 // 增益策略
	PreamplifierState_TypeDef Preamplifier;					 // 前置放大器动作
	uint8_t AnalogIFBWGrade;								 //	中频带宽档位
	uint8_t	IFGainGrade;									 //	中频增益档位

	uint8_t	EnableDebugMode;								 //	调试模式，高级应用不推荐用户自行使用，默认值为 0

	ReferenceClockSource_TypeDef ReferenceClockSource;		 //	参考时钟源
	double ReferenceClockFrequency;							 //	参考时钟频率
	uint8_t EnableReferenceClockOut;						 // 使能参考时钟输出

	SystemClockSource_TypeDef SystemClockSource; 		     // 系统时钟源
	double ExternalSystemClockFrequency; 				   	 // 外部系统时钟频率，Hz

	int8_t Atten;                                            // 衰减

	uint8_t EnableIFAGC;							   		 // 特定设备适用。中频AGC控制，0：AGC关闭，使用MGC方式；1：AGC开启,当中频饱和时降低中频增益避免饱和。

	DCCancelerMode_TypeDef DCCancelerMode;					 // 特定设备适用。直流抑制。0: 关闭DCC；1：开启，高通滤波器模式（更好的抑制效果，但会损伤DC至100kHz范围内的信号）；2：开启，手动偏置模式（需要人工校准，但不低频损伤信号）

	QDCMode_TypeDef	QDCMode;								 // 特定设备适用。IQ幅相修正器。QDCOff: 关闭QDC功能；QDCManualMode：开启并使用手动模式；QDCAutoMode：开启并使用自动QDC模式

	float QDCIGain;											 // 特定设备适用。归一化线性增益 I路，1.0 表示无增益，设置范围 0.8~1.2
	float QDCQGain;											 // 特定设备适用。归一化线性增益 Q路，1.0 表示无增益 ，设置范围 0.8~1.2
	float QDCPhaseComp;										 // 特定设备适用。归一化相位补偿系数，设置范围 -0.2~+0.2

	int8_t DCCIOffset;										 // 特定设备适用。I通道直流偏置， LSB
	int8_t DCCQOffset;										 // 特定设备适用。Q通道直流偏置， LSB

	LOOptimization_TypeDef LOOptimization;					 // 本振优化

}RTA_Profile_TypeDef;

/*RTA配置后返回的包信息结构体(返回)*/
typedef struct
{
	double StartFrequency_Hz;	 // 频谱的起始频率	
	double StopFrequency_Hz;     // 频谱的终止频率
	double POI;				     // 100%截获概率下的信号最短持续时间,以s为单位。

	double TraceTimestampStep;   // 每包数据内各条Trace的时间戳步进。(包整体时间戳为TriggerInfo中的SysTimerCountOfFirstDataPoint)
	double TimeResolution;	 	 // 每个时域数据的采样时间，也是时间戳的分辨率
	double PacketAcqTime;	 	 // 每包数据对应的采集时间

	uint32_t PacketCount;        // 当前配置对应的总数据包数，仅在FixedPoints模式下生效
	uint32_t PacketFrame;        // 每个数据包中的有效帧数
	uint32_t FFTSize;            // 每帧FFT的点数
	uint32_t FrameWidth;		 // FFT帧截取后的点数，也是数据包中每条Trace的点数，可作为概率密度图的X轴点数(宽度)
	uint32_t FrameHeight;		 // FFT帧对应的频谱幅度范围，可作为概率密度图的Y轴点数(高度)

	uint32_t PacketSamplePoints; // 每包数据对应的采集点数
	uint32_t PacketValidPoints;	 // 每包数据中所含的频域有效数据点数

	uint32_t MaxDensityValue;	 // 概率密度位图的单个位点元素值上限
	uint32_t GainParameter;		 // 包括Space(31~24Bit)、PreAmplifierState(23~16Bit)、StartRFBand(15~8Bit)、StopRFBand(7~0Bit)
}RTA_FrameInfo_TypeDef;

/*RTA获取后返回的绘图信息结构体 */
typedef struct
{
	float ScaleTodBm;	          // 由线性功率转对数功率导致的压缩。Trace的绝对功率等于 Trace[] * ScaleTodBm + OffsetTodBm(Bitmap的绝对功率轴同下)
	float OffsetTodBm;            // 相对功率转换成绝对功率的偏移。bitmap的绝对功率轴范围(Y轴)等于 FrameHeigh * ScaleTodBm + OffsetTodBm(Trace物理功率同上)
	uint64_t SpectrumBitmapIndex; // 概率密度图的获取次数，可在绘图时当做索引使用
}RTA_PlotInfo_TypeDef;

/*RTA包含配置、返回信息和暂存数据的顶层结构体(配置、返回、暂存)*/
typedef struct
{
	uint8_t* SpectrumStream;                 // 暂存在Device指针中的RTA频谱数据的地址
	uint16_t* SpectrumBitmap;                // 暂存在Device指针中的RTA频谱位图数据的地址

	uint32_t MaxIndex;						 // 功率最大值在当前数据包中的索引
	float	 MaxPower_dBm;					 // 当前数据包中的功率最大值

	RTA_Profile_TypeDef RTA_Profile;         // 当前RTA流对应的RTA配置信息，一般通过RTA_Configuration函数更新（RTA_ProfileOut）
	RTA_FrameInfo_TypeDef RTA_FrameInfo;     // 当前RTA流对应的RTA包信息，一般通过RTA_Configuration函数更新

	RTA_PlotInfo_TypeDef RTA_PlotInfo;       // 当前RTA流对应的RTA绘图信息
	RTA_TriggerInfo_TypeDef RTA_TriggerInfo; // 当前RTA流对应的RTA触发信息
	DeviceInfo_TypeDef DeviceInfo;           // 当前RTA流对应的设备信息
	DeviceState_TypeDef DeviceState;         // 当前RTA流对应的设备状态

}RTAStream_TypeDef;


/*---------------------------------------------------
多Profile模式联合体(MPS)
-----------------------------------------------------*/
typedef union
{
	/*一次获取只会得到一种模式的数据，通过返回的Analysis表示当前获取的模式，通过返回的ProfileNum表示当前获取的配置号*/
	SWPTrace_TypeDef SWPSpectrum;
	IQStream_TypeDef IQStream;
	DETStream_TypeDef DETStream;
	RTAStream_TypeDef RTAStream;

}MPSData_TypeDef;

/*---------------------------------------------------
多Profile模式数据信息(MPS)
-----------------------------------------------------*/
typedef struct
{
	uint8_t Analysis;
	uint16_t ProfileIndex;
	float IQS_ScaleToV;
	float DET_ScaleToV;
	RTA_PlotInfo_TypeDef RTA_PlotInfo;

}MPSDataInfo_TypeDef;


/*---------------------------------------------------
校准相关(CAL)
-----------------------------------------------------*/

/*CAL的配置结构体(配置)*/
typedef struct
{
	double	RFCFreq_Hz;			   // 设备射频中心频率，Hz
	double	BBCFreq_Hz;			   // 所选取的校准信号频点，Hz
	float	Temperature;		   // 设备温度

	float	RefLevel_dBm;		   // 设备参考电平，dBm
	float	CalSignalLevel_dBm;	   // 校准信号功率，dBm

	float	QDCIGain;			   // 求取的IGain优化值
	float	QDCQGain;			   // 求取的QGain优化值
	float	QDCPhaseComp;		   // 求取的PhaseComp优化值
	float	EstimatedOptRejection; // 优化值带入后所得到的预期边带抑制值

}CAL_QDCOptParam_TypeDef;

/*---------------------------------------------------
信号源功能结构体(Signal Generator)
-----------------------------------------------------*/

/*发射模式下手动增益控制结构体，在发射源工作在SIG_ManualGainCtrl模式下，次参数生效(配置)*/
typedef struct
{
	uint8_t TxPreDSA;      // 前置衰减器值；输入范围：0-127; 步进1
	uint8_t TxPostDSA;     // 后置衰减器值；输入范围：0-127; 步进1
	uint8_t TxAuxDSA;      // 辅助衰减器值；输入范围：0-127; 步进1
	uint8_t PreAmplifier;  // 前置放大器状态：0：关闭； 1：开启
	uint8_t PostAmplifier; // 后置放大器状态：0：关闭； 1：开启
}TxManualGain_TypeDef;

/*信号源IQStream的播放模式*/
typedef enum
{
	SIG_IQStreamPlayMode_Null = 0x00,		   // 静音模式
	SIG_IQStreamPlayMode_RealTime = 0x01,	   // 实时传输播放模式
	SIG_IQStreamPlayMode_SinglePlay = 0x02,    // 单次播放
	SIG_IQStreamPlayMode_ContinousPlay = 0x04, // 连续播放
	SIG_IQStreamPlayMode_MultiPlay = 0x08,	   // 多次播放
	SIG_IQStreamPlayMode_Simulation = 0x10 	   // 连续波输出

}SIG_IQStreamPlayMode_TypeDef;

/*信号源IQStream的播放的触发源*/
typedef enum
{
	SIG_IQStreamPlayTrigger_Null = 0x00,	 // 无触发；等待重配成其他触发类型
	SIG_IQStreamPlayTrigger_Internal = 0x01, // 内部触发
	SIG_IQStreamPlayTrigger_External = 0x02, // 外部触发
	SIG_IQStreamPlayTrigger_Timer = 0x04, 	 // 定时触发
	SIG_IQStreamPlayTrigger_RFBoard = 0x08,  // 定时触发
	SIG_IQStreamPlayTrigger_Bus = 0x10		 // 总线触发

}SIG_IQStreamPlayTrigger_TypeDef;

/*信号源模式用户接口定义(配置)*/
typedef struct
{
	double	CenterFreq_Hz;                                   // 当前中心频率，单位为Hz，在信号源工作在SIG_Fixed模式下生效；输入范围1M-1GHz;步进1Hz
	double	StartFreq_Hz;                                    // 频率扫描模式下的起始频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz
	double	StopFreq_Hz;                                     // 频率扫描模式下的终止频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz
	double	StepFreq_Hz;                                     // 频率扫描模式下的步进频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz
	double	CurrentLevel_dBm;                                // 当前功率，单位为dBm，在信号源工作在SIG_Fixed模式下生效；输入范围-127--5dBm；步进0.25dB
	double	StartLevel_dBm;                                  // 功率扫描模式下的起始功率，单位为Hz，在信号源工作在SIG_PowerSweep_*模式下生效；输入范围-127--5dBm；步进0.25dB
	double	StopLevel_dBm;                                   // 功率扫描模式下的终止功率，单位为Hz，在信号源工作在SIG_PowerSweep_*模式下生效；输入范围-127--5dBm；步进0.25dB
	double	StepLevel_dBm;                                   // 功率扫描模式下的步进功率，单位为Hz，在信号源工作在SIG_PowerSweep_*模式下生效；输入范围-127--5dBm；步进0.25dB
	double	DwellTime_ms;                                    // 扫描驻留时间，在信号源工作在*Sweep*模式下生效；输入范围0-1000000；步进1
	double  DACSampleRate;						             // 指定DAC的采样率
	double	InterpolationFactor;                             // 信号源基带插值倍数，该参数决定了信号源的基带带宽，输入范围:1-1024；除1以外，输入为偶数
	double  ReferenceClockFrequency;                         // 信号源模式下参考输入频率；该参数目前仅支持10MHz的参考频率输入，微调该参数可以补偿内部或外部的参考频率的频偏
	ReferenceClockSource_TypeDef ReferenceClockSource;       // 参考频率输入源；0：内部 1：外部
	SIG_OperationMode_TypeDef OperationMode;                 // 信号源工作模式
	SIG_SweepSource_TypeDef SweepSource;                     // 信号源扫描源

	SIG_IQStreamPlayMode_TypeDef	SIG_IQStreamPlayMode;	 // 信号源IQStream的播放模式
	SIG_IQStreamPlayTrigger_TypeDef	SIG_IQStreamPlayTrigger; // 信号源IQStream的播放的触发源
	uint32_t	SIG_IQStreamPlayLength;						 // 信号源IQStream的播放长度
	uint32_t	SIG_IQStreamPlayCounts;						 // 信号源IQStream的播放次数
	uint32_t SIG_IQStreamPlayPrevDelay;						 // 信号源IQStream的播放的前延时，对每一次的播放均生效
	uint32_t SIG_IQStreamPlayPostDelay;						 // 信号源IQStream的播放的后延时，对每一次的播放均生效

	uint32_t SIG_IQStreamDownloadStartAddress;				 // 信号源IQStream下载至板载内存中的起始内存地址
	uint32_t SIG_IQStreamDownloadStopAddress;				 // 信号源IQStream下载至板载内存中的终止内存地址

	uint32_t SIG_IQStreamPlayStartAddress;					 // 信号源从板载内存中读取IQStream的起始内存地址
	uint32_t SIG_IQStreamPlayStopAddress;					 // 信号源从板载内存中读取IQStream的终止内存地址

	int16_t SIG_IQStreamIdle_DC_I;			 	             // I路信号非播放模式下的静默直流值
	int16_t SIG_IQStreamIdle_DC_Q;			 	             // Q路信号非播放模式下的的静默直流值

	int16_t SIG_IQStream_DC_Offset_I;			             // I路信号的直流偏移范围为-32768~+32767
	int16_t SIG_IQStream_DC_Offset_Q;			             // Q路信号的直流偏移范围为-32768~+32767

	double	SIG_IQStream_Gain_I;				             // I路信号的线性增益： 增益范围为-256~255
	double	SIG_IQStream_Gain_Q;				             // Q路信号的线性增益： 增益范围为-256~255

	double  SIG_IQStreamSimFrequency;			             // 当SIG_IQStreamPlayMode=Simualtion模式时，指定仿真的基带频率；

	TxPort_TypeDef TxPort;                                   // 信号源输出端口
	TxTriggerInSource_TypeDef TxTriggerInSource;             // 信号源触发输入源
	TxTriggerInMode_TypeDef TxTriggerInMode;                 // 信号源输出输入模式
	TxTriggerOutMode_TypeDef TxTriggerOutMode;               // 信号源触发输出模式
	TxAnalogIQSource_TypeDef TxAnalogIQSource;               // 信号源模拟IQ输入源
	TxDigitalIQSource_TypeDef TxDigitalIQSource;             // 信号源数字QI输入源
	TxTransferReset_TypeDef TransferResetCmd;                // 信号源基带传输复位状态
	TxPackingCmd_TypeDef	TxPackingCmd;		             // 信号源封包模式状态
	TxManualGain_TypeDef TxManualGain;                       // 信号源手动增益控制
}SIG_Profile_TypeDef;

/*信号源模式返回信息(待更新)(返回)*/
typedef struct
{
	uint32_t SweepPoints; // 扫描点数
}SIG_Info_TypeDef;

/*---------------------------------------------------
模拟信号源功能结构体(Analog Signal Generator)(为SIG的子功能)
-----------------------------------------------------*/

/*模拟信号源的工作模式*/
typedef enum
{
	ASG_Mute = 0x00,		   // 静音
	ASG_FixedPoint = 0x01, 	   // 定频定功率
	ASG_FrequencySweep = 0x02, // 频率扫描
	ASG_PowerSweep = 0x03,     // 功率扫描
	ASG_TrackGenerator = 0x04  // tracking generator 功能

}ASG_Mode_TypeDef;

/*模拟信号源的触发输入源*/
typedef enum
{
	ASG_TriggerIn_FreeRun = 0x00,  // 自由运行
	ASG_TriggerIn_External = 0x01, // 外触发
	ASG_TriggerIn_Bus = 0x02	   // 定时器触发

}ASG_TriggerSource_TypeDef;

/*模拟信号源的触发输入模式*/
typedef enum
{
	ASG_TriggerInMode_Null = 0x00,        // 自由运行
	ASG_TriggerInMode_SinglePoint = 0x01, // 单点触发（触发一次进行单次的频率或功率的配置）
	ASG_TriggerInMode_SingleSweep = 0x02, // 单次扫描触发（触发一次进行一个周期的扫描）
	ASG_TriggerInMode_Continous = 0x03    // 连续扫描触发（触发一次连续工作）
}ASG_TriggerInMode_TypeDef;

/*模拟信号源的触发输出端口*/
typedef enum
{
	ASG_TriggerOut_Null = 0x00, 	// 外部端口
	ASG_TriggerOut_External = 0x01, // 内部端口
	ASG_TriggerOut_Bus = 0x02 		// 内部端口
}ASG_TriggerOutPort_TypeDef;

/*模拟信号源的触发输出模式*/
typedef enum
{
	ASG_TriggerOutMode_Null = 0x00,        // 自由运行
	ASG_TriggerOutMode_SinglePoint = 0x01, // 单点触发（一次跳频输出一个脉冲）
	ASG_TriggerOutMode_SingleSweep = 0x02  // 单次扫描触发（一次扫描输出一个脉冲）
}ASG_TriggerOutMode_TypeDef;

/*模拟信号源的射频输出端口*/
typedef enum
{
	ASG_Port_External = 0x00, // 外部端口
	ASG_Port_Internal = 0x01, // 内部端口
	ASG_Port_ANT = 0x02,	  // ANT端口（仅适用于TRx 系列）
	ASG_Port_TR = 0x03,		  // TR端口（仅适用于TRx 系列）
	ASG_Port_SWR = 0x04,	  // SWR端口（仅适用于TRx 系列）
	ASG_Port_INT = 0x05		  // INT端口（仅适用于TRx 系列）

}ASG_Port_TypeDef;

/*模拟信号源配置结构体(配置)*/
typedef struct
{
	double   CenterFreq_Hz; 						   // 当前中心频率，单位为Hz，在信号源工作在SIG_Fixed模式下生效；输入范围1M-1GHz;步进1Hz
	double   Level_dBm; 						  	   // 当前功率，单位为dBm，在信号源工作在SIG_Fixed模式下生效；输入范围-127--5dBm；步进0.25dB

	double   StartFreq_Hz; 						  	   // 频率扫描模式下的起始频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz
	double   StopFreq_Hz; 							   // 频率扫描模式下的终止频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz
	double   StepFreq_Hz; 							   // 频率扫描模式下的步进频率，单位为Hz，在信号源工作在SIG_FreqSweep_*模式下生效；输入范围1M-1GHz;步进1Hz

	double   StartLevel_dBm; 					  	   // 功率扫描模式下的起始功率，单位为Hz
	double   StopLevel_dBm; 						   // 功率扫描模式下的终止功率，单位为Hz
	double   StepLevel_dBm; 						   // 功率扫描模式下的步进功率，单位为Hz
	
	double   DwellTime_s; 						  	   // 频率扫描模式 或 功率扫描模式 下，单位为s，当触发模式为BUS时，扫描驻留时间，单位为s，在信号源工作在*Sweep*模式下生效；输入范围0-1000000；步进1
	
	double ReferenceClockFrequency;					   // 指定参考频率：对内参考和外参考均生效;
	ReferenceClockSource_TypeDef ReferenceClockSource; // 选择参考时钟的输入源：内参考或外参考;

	ASG_Port_TypeDef Port; 							   // 信号源输出端口

	ASG_Mode_TypeDef	Mode; 						   // 关闭、点频、频率扫描（外触发，同步至接收）、功率扫描（外触发，同步至接收） 													  

	ASG_TriggerSource_TypeDef	TriggerSource; 		   // 信号源触发输入模式：
	ASG_TriggerInMode_TypeDef	TriggerInMode;		   // 信号源的触发模式;
	ASG_TriggerOutMode_TypeDef	TriggerOutMode;		   // 信号源的触发模式;
	
}ASG_Profile_TypeDef;

/*模拟信号源模式返回信息(待更新)(返回)*/
typedef struct
{
	uint32_t SweepPoints; // 扫描点数
}ASG_Info_TypeDef;



/*---------------------------------------------------
模拟调制解调结构体(Analog)
-----------------------------------------------------*/

/*信号源FM调制信号接口定义(配置)*/
typedef struct
{
	double SignalFrequency;                    // FM调制信号频率：输入范围：暂未确定
	double ModDeviation;                       // FM调制频偏：输入范围：暂未确定
	double SampleRate;                         // 采样率：该采样率= DAC原始采样率/插值倍数
	short Amplitude;                           // 信号幅度；输入范围：0-8191，步进1
	int resetflag;                             // 复位状态，重新配置后第一运行应设置为1，之后需要置0
	AnalogSignalType_TypeDef AnalogSignalType; // 模拟信号类型
}SIG_FM_Profile_TypeDef;

typedef struct
{
	float* DemodWaveform;       //解调波形 %
	float* AFSpectrum_ModDepth; //音频频谱的幅值，长度为DemodWaveformSize / 2，使用线性刻度，单位为%
	double* AFSpectrum_Freq;    //音频频谱的频率 Hz
	uint32_t DemodWaveformSize; //解调波形的点数

	float ModDepth;         // 调制深度 %
	float ModDepthPeakPos;  // 正峰值的调制深度, Peak+ %
	float ModDepthPeakNeg;  // 负峰值的调制深度平均值, Peak- %
	float ModDepthHalfPeak; // 半峰值的调制深度平均值, (Peak+ - Peak-)/2 %
	float ModDepthRMS;      // 均方根值的调制深度平均值 %

	float CarrierPower;     // 载波功率 dBm
	double ModRate;         // 调制率 Hz
	float SINAD;            // 信纳德 dB
	float RMSPower;         // 均方根功率 dBm
	double FreqError;       // 频率误差 Hz
	float SNR;              // 信噪比 dB
	float DistTotalVrms;    // 失真电压的占比(RMS) %
	float THD;              // 总谐波失真 %
	float PEP;              // 峰包络功率 dBm
}AMDemodParam_TypeDef;

typedef struct
{
	float* DemodWaveform;        //解调波形 Hz
	float* AFSpectrum_Deviation; //音频频谱的幅值，长度为DemodWaveformSize / 2，使用线性刻度，单位为Hz
	double* AFSpectrum_Freq;     //音频频谱的频率 Hz
	uint32_t DemodWaveformSize;  //解调波形的点数

	float Deviation;         // 调制频偏 Hz
	float DeviationPeakPos;  // 正峰值的调制频偏, Peak+ Hz
	float DeviationPeakNeg;  // 负峰值的调制频偏平均值, Peak- Hz
	float DeviationHalfPeak; // 半峰值的调制频偏平均值, (Peak+ - Peak-)/2 Hz
	float DeviationRMS;      // 均方根值的调制频偏平均值 Hz

	float CarrierPower;      // 载波功率 dBm
	double CarrierFreqErr;   // 载波频偏 Hz
	double ModRate;          // 调制率 Hz

	float SINAD;             // 信纳德 dB
	float SNR;               // 信噪比 dB
	float DistTotalVrms;     // 失真占总有效值比(RMS) %
	float THD;               // 总谐波失真 %
}FMDemodParam_TypeDef;

/*信号源AM调制信号接口定义(配置)*/
typedef struct
{
	double SignalFrequency;								// AM调制信号频率：输入范围：暂未确定
	double ModIndex;									// AM调制指数：输入范围：暂未确定
	double SampleRate;									// 采样率：该采样率= DAC原始采样率/插值倍数
	short Amplitude;									// 信号幅度；0-8191
	int resetflag;										// 复位状态，重新配置后第一运行应设置为1，之后需要置0
	AnalogSignalType_TypeDef AnalogSignalType;			// 模拟信号类型
	AMModType_TypeDef AMModType;						// AM调制类型
	AM_CarrierSuppression_Typedef AMCarrierSuppression; // AM调制载波抑制
}SIG_AM_Profile_TypeDef;

typedef struct
{
	double PulseRepetitionFrequency; // 脉冲重复频率（PRF）
	double SampleRate;				 // 采样率：该采样率= DAC原始采样率/插值倍数
	double PulseDepth;				 // 脉冲的调制深度，即通断下的功率比,单位为dB;且必须为正数
	double PulseDuty;				 // 脉冲的占空比：0-1;
	short Amplitude;				 // 信号幅度；0-8191
	int resetflag;					 // 复位状态，重新配置后第一运行应设置为1，之后需要置0
}SIG_Pulse_Profile_TypeDef;

/*---------------------------------------------------
DSP辅助函数结构体(DSP)
-----------------------------------------------------*/

/*内部时钟校准源的配置结构体*/
typedef enum
{
	CalibrateByExternal = 0x00, // 通过Ext触发进行Clock校准
	CalibrateByGNSS1PPS = 0x01  // 通过GNSS-1PPS进行Clock校准
}ClkCalibrationSource_TypeDef;

/*快速傅里叶变换模式的配置结构体(配置)*/
typedef struct
{
	uint32_t FFTSize;				     // FFT分析点数
	uint32_t SamplePts;				     // 有效采样点数
	Window_TypeDef WindowType;		     // 窗型

	TraceDetector_TypeDef TraceDetector; // 视频检波方式
	uint32_t DetectionRatio;		     // 迹线检波比
	float Intercept;				     // 输出频谱截取，例如 Intercept = 0.8 则表示输出 80%的频谱结果

	bool Calibration;				     // 是否进行校准
}DSP_FFT_TypeDef;

/*需要生成滤波器系数的各项参数(配置)*/
typedef struct
{
	int n;            // 滤波器抽头数（ n > 0 ）
	float fc;         // 截止频率 ( 截止频率/采样率  0 < fc < 0.5 )
	float As;         // 阻带衰减（ As > 0 , [dB]）
	float mu;         // 分数采样偏移量（ -0.5 < mu < 0.5 ）
	uint32_t Samples; // 采样点数（Samples > 0）

}Filter_TypeDef;

/*需要生成正弦波的各项参数(配置)*/
typedef struct
{
	double Frequency;  // 正弦波的频率
	float Amplitude;   // 正弦波的幅度
	float Phase;       // 正弦波的相位
	double SampleRate; // 正弦波的采样率
	uint32_t Samples;  // 正弦波的采样点数
}Sin_TypeDef;

/*数字下变频模式的配置结构体(配置)*/
typedef struct
{
	double DDCOffsetFrequency; // 复混频的频率偏移值
	double SampleRate;         // 复混频的采样率
	float DecimateFactor;      // 重采样抽取倍数,范围:1 ~ 2^16
	uint64_t SamplePoints;     // 采样点数
}DSP_DDC_TypeDef;

/*IP3测试结构体*/
typedef struct
{
	double	LowToneFreq;       // 低音信号频率，单位随数据源
	double	HighToneFreq;      // 高音信号频率，单位随数据源
	double	LowIM3PFreq;       // 低频交调频率，单位随数据源
	double	HighIM3PFreq;      // 高频交调频率，单位随数据源

	float	LowTonePower_dBm;  // 低音功率, dBm
	float	HighTonePower_dBm; // 高音功率, dBm
	float	TonePowerDiff_dB;  // 低音功率 - 高音功率
	float	LowIM3P_dBc;	   // LowIM3P_dBc = max(LowTonePower_dBm, HighTonePower_dBm) - LowTonePower_dBm, 低频交调产物相对于最强主信号的强度
	float	HighIM3P_dBc;	   // HighIM3P_dBc = max(LowTonePower_dBm, HighTonePower_dBm) - HighTonePower_dBm, 高频交调强产物相对于最强主信号的度

	float	IP3_dBm;		   // 第三阶互调点，dBm

}TraceAnalysisResult_IP3_TypeDef;

/*IP2测试结构体*/
typedef struct
{
	double	LowToneFreq;	   // 低音信号频率，单位随数据源
	double	HighToneFreq;	   // 高音信号频率，单位随数据源
	double	IM2PFreq;	       // 低频交调频率，单位随数据源

	float	LowTonePower_dBm;  // 低音功率, dBm
	float	HighTonePower_dBm; // 高音功率, dBm
	float	TonePowerDiff_dB;  // 低音功率 - 高音功率
	float	IM2P_dBc;		   // IM2P_dBc = max(LowTonePower_dBm, HighTonePower_dBm) - IM2P_dBm, 低频交调产物相对于最强主信号的强度

	float	IP2_dBm;		   // 第二阶互调点，dBm

}TraceAnalysisResult_IP2_TypeDef;

/*AudioAnalysis结构体*/
typedef struct
{
	double AudioVoltage;   // 音频电压(V)
	double AudioFrequency; // 音频频率(Hz)
	double SINDA;          // 信纳德(dB)
	double THD;            // 总谐波失真(%)

}DSP_AudioAnalysis_TypeDef;

/*XdB带宽信息结构体(返回)*/
typedef struct
{
	double XdBBandWidth_Hz; // XdB带宽(Hz)
	double CenterFreq_Hz;   // XdB带宽的中心频率(Hz)
	double StartFreq_Hz;    // XdB带宽的起始频率(Hz)
	double StopFreq_Hz;     // XdB带宽的终止频率(Hz)
	float StartPower_dBm;   // XdB带宽的起始频率对应的功率(dBm)
	float StopPower_dBm;    // XdB带宽的终止频率对应的功率(dBm)
	uint32_t PeakIndex;     // XdB带宽内的峰值索引
	double PeakFreq_Hz;     // XdB带宽内的峰值频率(Hz）
	float PeakPower_dBm;    // XdB带宽内的峰值功率(dBm)

}TraceAnalysisResult_XdB_TypeDef;

/*占用带宽信息结构体(返回)*/
typedef struct
{
	double OccupiedBandWidth; // 占用带宽(Hz)
	double CenterFreq_Hz;     // 占用带宽的中心频率(Hz)
	double StartFreq_Hz;      // 占用带宽的起始频率(Hz)
	double StopFreq_Hz;       // 占用带宽的终止频率(Hz)
	float StartPower_dBm;     // 占用带宽的起始频率对应的功率(dBm)
	float StopPower_dBm;      // 占用带宽的终止频率对应的功率(dBm)
	float StartRatio;         // 占用带宽的起始频率对应的功率占比
	float StopRatio;          // 占用带宽的终止频率对应的功率占比
	uint32_t PeakIndex;       // 占用带宽内的峰值索引
	double PeakFreq_Hz;       // 占用带宽内的峰值频率(Hz）
	float PeakPower_dBm;      // 占用带宽内的峰值功率(dBm)

}TraceAnalysisResult_OBW_TypeDef;

/*邻道功率比频率信息结构体(输入)*/
typedef struct
{
	double RBW;                 // 分辨率带宽(Hz)
	double MainChCenterFreq_Hz; // 主信道中心频率(Hz)
	double MainChBW_Hz;         // 主信道带宽(Hz)
	double AdjChSpace_Hz;       // 邻道间隔，主信道中心频率与邻道中心频率的差值(Hz)
	uint32_t AdjChPair;         // 邻道对。1代表左右2个邻道，2代表左右4个邻道。

}DSP_ACPRFreqInfo_TypeDef;

/*邻道功率比信息结构体(返回)*/
typedef struct
{
	float MainChPower_dBm;       // 主信道功率(dBm)
	uint32_t MainChPeakIndex;    // 主信道的峰值索引
	double MainChPeakFreq_Hz;    // 主信道的峰值频率(Hz）
	float MainChPeakPower_dBm;   // 主信道峰值功率(dBm)

	double L_AdjChCenterFreq_Hz; // 左邻道中心频率(Hz)
	double L_AdjChBW_Hz;         // 左邻道带宽(Hz)
	float L_AdjChPower_dBm;      // 左邻道功率(dBm)
	float L_AdjChPowerRatio;     // 左邻道功率比（左邻道功率/主信道功率）
	float L_AdjChPowerDiff_dBc;  // 左邻道功率差（左邻道功率-主信道功率 dBc）
	float L_AdjChPeakIndex;      // 左邻道的峰值索引
	double L_AdjChPeakFreq_Hz;   // 左信道的峰值频率(Hz）
	float L_AdjChPeakPower_dBm;  // 左邻道的值功率(dBm)

	double R_AdjChCenterFreq_Hz; // 右邻道中心频率(Hz)
	double R_AdjChBW_Hz;         // 右邻道带宽(Hz)
	float R_AdjChPower_dBm;      // 右邻道功率(dBm)
	float R_AdjChPowerRatio;     // 右邻道功率比（右邻道功率/主信道功率）
	float R_AdjChPowerDiff_dBc;  // 右邻道功率差（右邻道功率-主信道功率 dBc）
	float R_AdjChPeakIndex;      // 右邻道的峰值索引
	double R_AdjChPeakFreq_Hz;   // 右信道的峰值频率(Hz）
	float R_AdjChPeakPower_dBm;  // 右邻道的值功率(dBm)

}TraceAnalysisResult_ACPR_TypeDef;

/*信道功率结构体(返回)*/
typedef struct
{
	float ChannelPower_dBm;     // 信道功率(dBm)
	float PowerDensity;         // 信道功率密度(dBm/Hz)
	float ChannelPeakIndex;     // 信道内的峰值索引
	double ChannelPeakFreq_Hz;  // 信道内的峰值频率(Hz）
	float ChannelPeakPower_dBm; // 信道内的峰值功率(dBm）

}DSP_ChannelPowerInfo_TypeDef;

/*迹线平滑模式结构体*/
typedef enum
{
	MovingAvrage = 0x00, // 滑动平均
	MedianFilter = 0x01, // 中值滤波
	PolynomialFit = 0x02 // 多项式拟合
}SmoothMethod_TypeDef;

typedef enum
{
	SWPPhaseNoiseMeas = 0x00,   //相位噪声测量
	SWPNoiseMeas = 0x01,		//显示平均噪声电平测量
	SWPChannelPowerMeas = 0x02, //信道功率测量
	SWPOBWMeas = 0x03,          //占用带宽测量
	SWPACPRMeas = 0x04,         //邻道功率比测量
	SWPIM3Meas = 0x05           //IP3/IM3测量
}SWPApplication_TypeDef;

// SEM模版中的一段线
typedef struct
{
	bool mState;        // 关闭=0； 使能 =1；
	double mStartFreq;  // 开始频率
	double mLimitStart; // 开始门限
	double mStopFreq;   // 截止频率
	double mLimitStop;  // 截止门限
	int mMode;          // 绝对 = 0; 相对 = 1
	int mPriority;      // 要求 = 0； 建议 = 1;
}DSP_SEMSegmentProfile_TypeDef;

typedef enum
{
	ProcType_MaxHold = 0x00,  //
	ProcType_MinHold = 0x01,  //
	ProcType_Average = 0x02   //
}ProcType_TypedDef;

typedef enum
{
	IFAGC_Off = 0x00,  //
	IFAGC_On = 0x01    //
}IFAGC_TypedDef;

typedef enum
{
	XPPSTrigger_Off = 0x00,  //
	XPPSTrigger_On = 0x01    //
}XPPSTrigger_TypedDef;

typedef enum
{
	IQPlayBack_Off = 0x00,  //
	IQPlayBack_On = 0x01    //
}IQPlayBack_TypedDef;

/*存储扫描的Profile*/
typedef struct
{
	double CenterFreq_Hz; 					// 中心频率
	double RefLevel_dBm;					// 参考电平
	double DwellTime;						// 驻留时间
	uint32_t DecimateFactor;				// 时域数据的抽取倍数
	uint32_t FFTSize;						// FFT点数
	uint32_t DetectCount;					// 检波次数
	Detector_TypeDef Detector;				// 检波类型
	IFAGC_TypedDef IFAGC;					// 是否使能IFAGC
	XPPSTrigger_TypedDef XPPSTrigger;		// 是否使能XPPSTrigger
	IQPlayBack_TypedDef IQPlayBack;			// 是否使能IQPlayBack
	Window_TypeDef	Window;					// 窗类型
}MSCAN_Profile_TypeDef;

typedef struct
{
	int32_t SpectrumFrames;
	int32_t SpectrumPoints;
	int32_t IQStreamPoints;
	double CenterFreq_Hz;
	double Span_Hz;
	double IQSampleRate;
}MSCAN_Info_Typedef;

typedef struct
{
	int64_t RepeatIndex;     //当前Element已重复到第几次
	int32_t ElementIndex;    //当前是哪一个Element
	int Status;              //返回值
	uint32_t SpectrumFrames; //频谱实际的帧数
	uint32_t SpectrumPoints; //每帧频谱的点数
	uint32_t IQStreamPoints; //实际IQ数据的点数
	float ScaleTodBm;        //由线性功率转对数功率导致的压缩。绝对功率等于 SpectrumStream[] * ScaleTodBm + OffsetTodBm
	float OffsetTodBm;       //相对功率转换成绝对功率的偏移。
	float ScaleToV;          //int16类型IQ至电压绝对值（V）的系数
	uint8_t* SpectrumStream; //频谱数据
	int16_t* IQStream;       //IQ数据

	/*below is the state of the mscan*/
	double Temperature;       //设备温度，摄氏度 = 0.01 * Temperature
	double SysTimeStamp;      //当前数据包所对应的系统时间戳，单位s
	double AbsoluteTimeStamp; //当前数据包对应的绝对时间戳
	double Latitude;          //当前数据包对应的纬度坐标,北纬为正数，南纬为负数，以此区分南北纬
	double Longitude;         //当前数据包对应的经度坐标,东经为正数，西经为负数，以此区分东西经
	double Altitude;          //当前数据包对应的海拔
	double SATHealth;         //当前GNSS定位卫星的健康度（SNR）
	double RefClkFreqOffset;  //单位ppm, 表示当前设备参考时钟频率的偏移，该值以GNSS频率为参考
    uint64_t nsSinceEpoch;	  // 当前数据包所对应的ns级系统时间戳
}MSCAN_Data_Typedef;



/* -------------------------------------------以下为设备控制(dev相关接口)------------------------------------------------------ */

HTRA_API int Get_APIVersion(void);

/* 获取当前API支持的固件版本 */
HTRA_API int APISupportFirmwareVersions(DeviceFirmwareVersion_TypeDef** Versions, uint32_t* Count);

/* 获取要打开的设备DevNum值和DeviceInfo，便于后续调用Device_Open来打开设备 */
HTRA_API int Device_Interest(DeviceClass_TypeDef DeviceClass,int DevNum, uint8_t DevNumList[MAX_DEVICE], DeviceInfo_TypeDef DeviceInfoList[MAX_DEVICE],uint8_t Devicecount, int *DevMum_O, DeviceInfo_TypeDef *DeviceInfo_O);

/* 获取当前挂载在主机上的列表*/
HTRA_API int Device_List(const BootProfile_TypeDef* BootProfile, uint8_t* Devicecount, uint8_t DevNum[MAX_DEVICE], DeviceInfo_TypeDef DeviceInfo_O[MAX_DEVICE]);

/* dev接口，打开设备，在对设备操作前必须调用此函数以获取设备资源 */
HTRA_API int Device_Open(void** Device, int DeviceNum, const BootProfile_TypeDef* BootProfile, BootInfo_TypeDef* BootInfo);

HTRA_API int Device_Open_WithClass(void **Device, DeviceClass_TypeDef DeviceClass,int DeviceNum, const BootProfile_TypeDef *BootProfile, BootInfo_TypeDef* BootInfo);

/* dev接口，关闭设备，在对设备操作完成后必须调用此函数以释放设备资源 */
HTRA_API int Device_Close(void** Device);

/* dev接口，使数据接口（如USB等）重新进行枚举过程。本函数成功后，需要调用 Device_Close() 函数，然后再调用 Device_Open（），以恢复和设备的连接。*/
HTRA_API int Device_ReEnumerate(void **Device);

/* dev接口，设置系统电源状态*/
HTRA_API int Device_SetSysPowerState(void **Device, SysPowerState_TypeDef SysPowerState);

/* dev接口，设置MCU低功耗电源状态*/
HTRA_API int Device_SetMcuSysPowerState(void **Device, SysPowerMode_TypeDef SysPowerState);

/* dev接口，获取设备信息，包括设备序列号及软硬件版本等相关信息，非实时方式，不打断数据获取，但信息只在获取数据包后更新 */
HTRA_API int Device_QueryDeviceInfo(void** Device, DeviceInfo_TypeDef* DeviceInfo);

/* dev接口，获取设备信息，包括设备序列号及软硬件版本号等相关信息，实时获取，短时间内会占用数据通道 */
HTRA_API int Device_QueryDeviceInfo_Realtime(void** Device, DeviceInfo_TypeDef* DeviceInfo);

/* dev接口，获取设备状态，包括设备温度、硬件工作状态、地理时间信息（需要选件支持）等，非实时方式，不打断数据获取，但信息只在获取数据包后更新 */
HTRA_API int Device_QueryDeviceState(void** Device, DeviceState_TypeDef* DeviceState);

/* dev接口，获取设备状态，包括设备温度、硬件工作状态、地理时间信息（需要选件支持）等，实时获取，短时间内会占用数据通道 */
HTRA_API int Device_QueryDeviceState_Realtime(void** Device, DeviceState_TypeDef* DeviceState);

/* dev接口，获取设备供电状态 */
HTRA_API int Device_QueryPowerSupplyState(void** Device, PowerSupplyState_TypeDef* PowerSupplyState);

/* dev接口，通过已知时钟周期的外触发信号校准参考时钟频率(高级应用) ExtTriggerPeriod_s：表示触发信号周期，ExtTriggerCount：表示触发次数，RewriteRFCal：表示是否将校准的参考时钟频率重写入校准文件以作为后续启动的默认值（不可逆），RefCLKFreq_Hz：表示校准后的参考时钟频率*/
HTRA_API int Device_CalibrateRefClock(void** Device, ClkCalibrationSource_TypeDef ClkCalibrationSource, const double TriggerPeriod_s, const uint64_t TriggerCount, const bool RewriteRFCal, double* RefCLKFreq_Hz);

/* dev接口，更新设备固件(高级应用)*/
HTRA_API int Device_UpdateFirmware(int DeviceNum, const Firmware_TypeDef Firmware, const char* path);

/* dev接口，控制设备风扇工作模式*/
HTRA_API int Device_SetFanState(void** Device, const FanState_TypeDef FanState, const float ThreshouldTemperature);

/* dev接口，设置频率响应补偿*/
HTRA_API int Devcie_SetFreqResponseCompensation(void** Device, uint8_t State, const double *Frequency_Hz, const float *CorrectVal_dB, uint8_t Points);
HTRA_API int Devcie_SetFreqResponseCompensation_PM1(void** Device, uint8_t State, const double *Frequency_Hz, const float *CorrectVal_dB, uint32_t Points);

/* dev接口，设置GNSS数据源（需要选件支持）*/
HTRA_API int Device_SetGNSSDataSource(void** Device, GNSSDataSource_TypeDef *GNSSDataSourceIn, GNSSDataSource_TypeDef *GNSSDataSourceOut);

/* dev接口，设置GNSS天线状态（需要选件支持）*/
HTRA_API int Device_SetGNSSAntennaState(void** Device, const GNSSAntennaState_TypeDef GNSSAntennaState);

/* dev接口，设定GNSS的秒脉冲 */
HTRA_API int Device_SetGNSSxpps(void** device, uint8_t enableout, double xpps, double delay);

/* dev接口，获取GNSS的秒脉冲参数 */
HTRA_API int Device_GetGNSSxpps(void** device, uint8_t *enableout, double *xpps, double *delay);

/*dev接口，设置GNSS中DOCXO工作状态（需要选件支持） */
HTRA_API int Device_SetDOCXOWorkMode(void** Device, const DOCXOWorkMode_TypeDef DOCXOWorkMode);

/* dev接口，设置GNSS中Constellation工作状态*/
HTRA_API int Device_SetGNSSConstellation(void** Device, const GNSSConstellation_TypeDef GNSSConstellation);

/* dev接口，获取GNSS设备状态（需要选件支持），非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetGNSSInfo(void** Device, GNSSInfo_TypeDef* GNSSInfo);

/* dev接口，获取GNSS信噪比（需要选件支持），非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetGNSS_SatDate(void** Device, GNSS_SatDate_TypeDef * GNSS_SatDate);

/* dev接口，获取网络中所有网络设备的IP地址和子网掩码等信息*/
HTRA_API int Device_GetNetworkDeviceList(uint8_t* DeviceCount, NetworkDeviceInfo_TypeDef DeviceInfo[64], uint8_t LocalIP[4], uint8_t LocalMask[4]);

/* dev接口，通过设备UID，配置网络设备的IP地址和子网掩码*/
HTRA_API int Device_SetNetworkDeviceIP(const uint64_t DeviceUID, const uint8_t IPAddress[4], const uint8_t SubnetMask[4]);

/* dev接口，通过设备IP地址，配置网络设备的IP地址和子网掩码*/
HTRA_API int Device_SetNetworkDeviceIP_PM1(const uint8_t DeviceIP[4], const uint8_t IPAddress[4], const uint8_t SubnetMask[4]);

/* dev接口，获取完整UID信息，非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetFullUID(void** Device, uint64_t* UID_L64, uint32_t* UID_H32);

/* dev接口，获取GNSS中Constellation工作状态（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetGNSSConstellation_Realtime(void** Device, GNSSConstellation_TypeDef* GNSSConstellation);

/* dev接口，获取GNSS信噪比（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetGNSS_SatDate_Realtime(void** Device, GNSS_SatDate_TypeDef * GNSS_SatDate);

/* dev接口，获取硬件状态信息*/
HTRA_API int Device_GetHardwareState(void** Device, HardWareState_TypeDef* HardWareState);

/* dev接口，通过*/
HTRA_API int Device_QueryDeviceInfoWithBus(int DeviceNum, const BootProfile_TypeDef* BootProfile, BootInfo_TypeDef* BootInfo);

/* dev接口，配置频率扫描参数*/
HTRA_API int Device_SetFreqScan(void** Device, double StartFreq_Hz, double StopFreq_Hz, uint16_t SweepPts);

/* dev接口，根据射频频率查询频率规划*/
HTRA_API void Device_GetFreqPlanning(void** Device, double rf, uint8_t* rfb, uint8_t* convert, double* if1, double* im, double* rflo, double* iflo, double* if2);

/* dev接口，中频输出控制，state 0：中频输出关闭；1：中频输出开启*/
HTRA_API int Device_SetIFOutput(void** Device, uint8_t state);

/* dev接口，查询PMU的版本号*/
HTRA_API int Device_QueryVersion_PMU(void **Device, uint32_t* Version);

/* dev接口，查询AGU的版本号*/
HTRA_API int Device_QueryVersion_AGU(void** Device, uint32_t* version);

/* dev接口，初始化IFAGC，将AGC初始化为默认值*/
HTRA_API int Device_InitIFAGC(void** Device);

/* dev接口，设置IFAGC的目标功率： 范围为 0~-30dBFs; Target为距离ADC饱和的dBFs值*/
HTRA_API int Device_SetIFAGCTarget(void** Device, double* Target);

/* dev接口，设置IFAGC的执行周期*/
HTRA_API int Device_SetIFAGCPeriod(void** Device, double *Period);

/* dev接口，将ns级纪元 nsSinceEpoch 转为 物理时间 */
HTRA_API void Device_ConvertEpochToReadable(uint64_t nsSinceEpoch, int16_t* year, int16_t* mon, int16_t* day, int16_t* hour, int16_t* min, int16_t* sec, int16_t* ms, int16_t* us, int16_t* ns);

/* dev接口，支持脱离射频部分,使基带单独工作 */
HTRA_API int Device_SetBBCtrlSource(int BBCtrlSource);
/* dev接口，查询增益映射参数*/
HTRA_API void Device_GetAmpAttenState(void** Device, PreamplifierState_TypeDef* amp, int8_t* att, uint8_t* sp);

/* dev接口，获取EIO选件固件版本和UID*/
HTRA_API int Device_QueryEIO_Version_UID(void** Device, uint16_t* EIOVersion, uint64_t* EIOUID);

/* dev接口，EIO选件GPIO引脚拉高*/
HTRA_API int Device_GPIOSetBits(void** Device, uint16_t Bits);

/* dev接口，EIO选件GPIO引脚拉低*/
HTRA_API int Device_GPIOResetBits(void** Device, uint16_t Bits);

/* dev接口，EIO选件GPIO引脚跟随频率分段变化*/
HTRA_API int Device_GPIOBandSwitch(void** Device, uint16_t Bands, double StartFreq[], double StopFreq[], uint16_t SetBits[], uint16_t ResetBits[], uint32_t delay_us[]);


/* -------------------------------------------以下为扫描模式(SWEEP相关接口)------------------------------------------------------ */

/* SWP模式，配置SWP_Profile 为默认值 */
HTRA_API int SWP_ProfileDeInit(void** Device, SWP_Profile_TypeDef* UserProfile_O);
HTRA_API int SWP_EZProfileDeInit(void** Device, SWP_EZProfile_TypeDef* UserProfile_O);

/* SWP模式，配置SWP模式相关参数 */
HTRA_API int SWP_Configuration(void** Device, const SWP_Profile_TypeDef* ProfileIn, SWP_Profile_TypeDef* ProfileOut, SWP_TraceInfo_TypeDef* TraceInfo);
HTRA_API int SWP_EZConfiguration(void** Device, const SWP_EZProfile_TypeDef* ProfileIn, SWP_EZProfile_TypeDef* ProfileOut, SWP_TraceInfo_TypeDef* TraceInfo);

/* SWP模式，获取SWP模式下部分扫描的频谱数据 */
HTRA_API int SWP_GetPartialSweep(void** Device, double Freq_Hz[], float PowerSpec_dBm[], int* HopIndex, int* FrameIndex, MeasAuxInfo_TypeDef* MeasAuxInfo);
HTRA_API int SWP_GetPartialSweep_PM1(void** Device, SWPTrace_TypeDef* PartialTrace);

/* SWP模式，获取SWP模式下完整刷新的频谱数据 */
HTRA_API int SWP_GetFullSweep(void** Device, double Freq_Hz[], float PowerSpec_dBm[], MeasAuxInfo_TypeDef* MeasAuxInfo);
//HTRA_API int SWP_GetFullSweep_PM1(void** Device, SWPTrace_TypeDef* PartialTrace); （暂不提供）

/* SWP模式，获取SWP模式下部分刷新但包含非刷新部分数据的频谱数据(高级应用) */
HTRA_API int SWP_GetPartialUpdatedFullSweep(void** Device, double Freq_Hz[], float PowerSpec_dBm[], int* HopIndex, int* FrameIndex, MeasAuxInfo_TypeDef* MeasAuxInfo);
//HTRA_API int SWP_GetPartialUpdatedFullSweep_RM1(void** Device, SWPTrace_TypeDef* PartialTrace);（暂不提供）

/* SWP模式，获取SWP模式下校准数据曲线(高级应用) */
HTRA_API int SWP_GetAmplitudeCalibrationTrace(void** Device, double Frequency_Hz[], float Compensate_dB[], float* CalTemperature_C);

/* SWP模式，重置SWP模式下MaxHold和MinHold的频谱数据(高级应用) */
HTRA_API void SWP_ResetTraceHold(void** Device);

/* SWP模式，根据应用目标给出推荐设备配置 */
HTRA_API int SWP_AutoSet(void** Device, SWPApplication_TypeDef Application, const SWP_Profile_TypeDef* ProfileIn, SWP_Profile_TypeDef* ProfileOut, SWP_TraceInfo_TypeDef* TraceInfo, uint8_t ifDoConfig);

/* -------------------------------------------以下为时域流模式(IQS相关接口)------------------------------------------------------ */

/* IQS模式，配置IQS_Profile 为默认值 */
HTRA_API int IQS_ProfileDeInit(void** Device, IQS_Profile_TypeDef* UserProfile_O);
HTRA_API int IQS_EZProfileDeInit(void** Device, IQS_EZProfile_TypeDef* UserProfile_O);

/* IQS模式，配置IQS模式相关参数 */
HTRA_API int IQS_Configuration(void** Device, const IQS_Profile_TypeDef* ProfileIn, IQS_Profile_TypeDef* ProfileOut, IQS_StreamInfo_TypeDef* StreamInfo);
HTRA_API int IQS_EZConfiguration(void** Device, const IQS_EZProfile_TypeDef* ProfileIn, IQS_EZProfile_TypeDef* ProfileOut, IQS_StreamInfo_TypeDef* StreamInfo);

/* IQS模式，发起总线触发 */
HTRA_API int IQS_BusTriggerStart(void** Device);

/* IQS模式，终止总线触发 */
HTRA_API int IQS_BusTriggerStop(void** Device);

/* IQS模式，等待多机同步触发信号*/
HTRA_API int IQS_MultiDevice_WaitExternalSync(void** Device, const IQS_Profile_TypeDef* ProfileIn);

/* IQS模式，使能多机同步运行*/
HTRA_API int IQS_MultiDevice_Run(void **Device);

/* IQS模式，获取IQS模式下交织的IQ数据流，并得到整型至绝对幅度（V单位）的比例因子 及 触发相关的信息 */
HTRA_API int IQS_GetIQStream(void** Device, void** AlternIQStream, float* ScaleToV, IQS_TriggerInfo_TypeDef* TriggerInfo, MeasAuxInfo_TypeDef* MeasAuxInfo);	// 函数多态-形态0：非封装数据输出
HTRA_API int IQS_GetIQStream_PM1(void **Device, IQStream_TypeDef* IQStream); // 函数多态-形态1：封装数据输出
HTRA_API int IQS_GetIQStream_PM2(void **Device, IQStream_TypeDef* IQStream, MeasAuxInfo_TypeDef* MeasAuxInfo); // 函数多态-形态2：封装数据输出
HTRA_API int IQS_GetIQStream_Data(void** Device, int16_t IQ_data[]);

/* IQS模式，发起定时器-外触发单次同步*/
HTRA_API int IQS_SyncTimer(void** Device);

/* -------------------------------------------以下为检波模式(DET相关接口)------------------------------------------------------ */

/* DET模式，配置DET_Profile 为默认值 */
HTRA_API int DET_ProfileDeInit(void** Device, DET_Profile_TypeDef* UserProfile_O);
HTRA_API int DET_EZProfileDeInit(void** Device, DET_EZProfile_TypeDef* UserProfile_O);

/* DET模式，配置DET模式相关参数 */
HTRA_API int DET_Configuration(void** Device, const DET_Profile_TypeDef* ProfileIn, DET_Profile_TypeDef* ProfileOut, DET_StreamInfo_TypeDef* StreamInfo);
HTRA_API int DET_EZConfiguration(void** Device, const DET_EZProfile_TypeDef* ProfileIn, DET_EZProfile_TypeDef* ProfileOut, DET_StreamInfo_TypeDef* StreamInfo);

/* ZeroSpan模式，配置ZeroSpan模式相关参数 */
HTRA_API int ZSP_ProfileDeInit(void** Device, ZSP_Profile_TypeDef* UserProfile_O);
HTRA_API int ZSP_Configuration(void** Device, const ZSP_Profile_TypeDef* ProfileIn, ZSP_Profile_TypeDef* ProfileOut, DET_StreamInfo_TypeDef* StreamInfo);

/* DET模式，发起总线触发 */
HTRA_API int DET_BusTriggerStart(void** Device);

/* DET模式，终止总线触发 */
HTRA_API int DET_BusTriggerStop(void** Device);

/* DET模式，获取DET模式下的检波数据，并得到整型至绝对幅度（V单位）的比例因子 及 触发相关的信息，NormalizedPowerStream为 I方+Q方开根号 */
HTRA_API int DET_GetPowerStream(void** Device, float NormalizedPowerStream[], float* ScaleToV, DET_TriggerInfo_TypeDef* TriggerInfo, MeasAuxInfo_TypeDef* MeasAuxInfo);
//HTRA_API int DET_GetPowerStream_PM1(void** Device, DETStream_TypeDef* DETStream);（暂不实现）

/* DET模式，发起定时器-外触发单次同步*/
HTRA_API int DET_SyncTimer(void** Device);

/* -------------------------------------------以下为实时频谱分析模式(RTA相关接口)------------------------------------------------------ */

/* RTA模式，配置RTA_Profile 为默认值 */
HTRA_API int RTA_ProfileDeInit(void** Device, RTA_Profile_TypeDef* UserProfile_O);
HTRA_API int RTA_EZProfileDeInit(void** Device, RTA_EZProfile_TypeDef* UserProfile_O);

/* RTA模式，配置RTA模式相关参数 */
HTRA_API int RTA_Configuration(void** Device, const RTA_Profile_TypeDef* ProfileIn, RTA_Profile_TypeDef* ProfileOut, RTA_FrameInfo_TypeDef* FrameInfo);
HTRA_API int RTA_EZConfiguration(void** Device, const RTA_EZProfile_TypeDef* ProfileIn, RTA_EZProfile_TypeDef* ProfileOut, RTA_FrameInfo_TypeDef* FrameInfo);

/* RTA模式，发起总线触发 */
HTRA_API int RTA_BusTriggerStart(void **Device);

/* RTA模式，终止总线触发 */
HTRA_API int RTA_BusTriggerStop(void **Device);

/* RTA模式，设置实时频谱的数据类型 */
HTRA_API int RTA_SetDataFormat(void** Device, DataFormat_TypeDef *DataFormat);
/* RTA模式，设置实时频谱LookBack状态，使能LookBack后，设备会缓存频谱对应的IQ数据，供用户在需要的情况下读取，若不回读，则需调用RTA_ForceClear清空IQ数据 */
HTRA_API int RTA_SetLookBackCmd(void** Device,LookBack_TypeDef *LookBackCmd);
/*RTA模式，触发开始:当触发为总线触发时，调用该函数会立刻进行触发，当触发为非总线触发时，该函数会使能触发，并等待触发到来后触发设备采集*/
HTRA_API int RTA_TriggerStart(void** Device);
/* RTA模式，获取RTA模式下的实时频谱数据 及 触发相关的信息 */
HTRA_API int RTA_GetRealTimeSpectrum(void** Device, uint8_t SpectrumStream[], uint16_t SpectrumBitmap[], RTA_PlotInfo_TypeDef* PlotInfo, RTA_TriggerInfo_TypeDef* TriggerInfo, MeasAuxInfo_TypeDef* MeasAuxInfo);

/* RTA模式，获取RTA模式下的实时IQStream 及 触发相关的信息 */
HTRA_API int RTA_GetIQStream(void **Device, void *AlternIQStream, float *ScaleToV, IQS_TriggerInfo_TypeDef *TriggerInfo, MeasAuxInfo_TypeDef* MeasAuxInfo);
/*RTA模式，获取RTA模式下的实时频谱（无概率密度图）及触发相关信息*/
HTRA_API int RTA_GetRealTimeSpectrum_Raw(void **Device, uint8_t SpectrumStream[], RTA_PlotInfo_TypeDef* PlotInfo, RTA_TriggerInfo_TypeDef* TriggerInfo, MeasAuxInfo_TypeDef* MeasAuxInfo);
//HTRA_API int RTA_GetRealTimeSpectrum_PM1(void** Device, RTAStream_TypeDef* RTAStream);（暂不实现）

/*RTA模式，采用频谱模板触发时下发触发门限。输入关注点个数，Freq数组和Power数组一一对应，输入关注点即可，点与点间的功率将自动补全*/
HTRA_API int RTA_SpectrumMaskTrigger_SetMask(void** Device, uint32_t NodeNum, double FreqHz_In[], float PowerdBm_In[], double FreqHz_Out[], float PowerdBm_Out[]);

/*RTA模式，发起频谱模板触发*/
HTRA_API int RTA_SpectrumMaskTrigger_Run(void **Device);

/*RTA模式，停止频谱模板触发*/
HTRA_API int RTA_SpectrumMaskTrigger_Stop(void **Device);

/* RTA模式，发起定时器-外触发单次同步*/
HTRA_API int RTA_SyncTimer(void** Device);

/* -------------------------------------------以下为存储扫描模式(MSCAN相关接口)------------------------------------------------------ */
/* MSCAN模式，初始化MSCAN_Profile*/
HTRA_API int MSCAN_ProfileDeinit(void** Device, MSCAN_Profile_TypeDef* MSCAN_Profiles, int32_t* Elements);

/* MSCAN模式，配置MSCAN的扫描列表和扫描次数等*/
HTRA_API int MSCAN_Configuration(void** Device, MSCAN_Profile_TypeDef* ProfilesIn, MSCAN_Profile_TypeDef* ProfilesOut, MSCAN_Info_Typedef *MSCAN_Info, int32_t *Elements, int64_t *Repeatitions, PreamplifierState_TypeDef* Preamplifier);

/* MSCAN模式，启动列表扫描，按照用户指定的扫描次数(Repeatitions)扫描，扫描完成后自动停止*/
HTRA_API int MSCAN_Start(void** Device);

/* MSCAN模式，终止列表扫描 */
HTRA_API int MSCAN_Stop(void** Device);

/* MSCAN模式，获取扫描的结果*/
HTRA_API int MSCAN_GetData(void** Device,MSCAN_Data_Typedef* MSCAN_Data);

/* -------------------------------------------以下为辅助信号源控制(ASG相关接口)------------------------------------------------------ */

/* 模拟信号源，配置Profile 为默认值 */
HTRA_API int ASG_ProfileDeInit(void** Device, ASG_Profile_TypeDef* Profile);

/* 模拟信号源，工作状态配置 */
HTRA_API int ASG_Configuration(void **Device, ASG_Profile_TypeDef *ProfileIn, ASG_Profile_TypeDef *ProfileOut,ASG_Info_TypeDef *ASG_Info);
/* 模拟信号源，总线触发开始 */
HTRA_API int ASG_BusTriggerStart(void **Device);
/* 模拟信号源，总线触发终止 */
HTRA_API int ASG_BusTriggerStop(void **Device);

/* -------------------------------------------以下为模拟解调(Analog相关接口)------------------------------------------------------ */

/* 模拟调制，创建 */
HTRA_API void ADM_Open(void **ADM);

/* 模拟调制，释放 */
HTRA_API void ADM_Close(void** ADM);

/* 模拟解调Analog Demod，FM解调，仅返回解调后的波形 */
HTRA_API int ADM_FMDemod(void** ADM, const void* AlternIQStream, DataFormat_TypeDef DataFormat, uint64_t SamplePoints, double IQSampleRate, bool reset, float DemodWaveform[]);

/* 模拟解调Analog Demod，AM解调，仅返回解调后的波形 */
HTRA_API int ADM_AMDemod(void** ADM, const void* AlternIQStream, DataFormat_TypeDef DataFormat, uint64_t SamplePoints, double IQSampleRate, float DemodWaveform[]);

/* 模拟解调Analog Demod，FM解调，返回解调后的波形和调制参数 */
HTRA_API int ADM_FMDemod_PM1(void** ADM, const void* AlternIQStream, DataFormat_TypeDef DataFormat, uint64_t SamplePoints, double IQSampleRate, float IQS_ScaleToV, bool reset, FMDemodParam_TypeDef* FMDemodParam);

/* 模拟解调Analog Demod，AM解调，返回解调后的波形和调制参数 */
HTRA_API int ADM_AMDemod_PM1(void** ADM, const void* AlternIQStream, DataFormat_TypeDef DataFormat, uint64_t SamplePoints, double IQSampleRate, float IQS_ScaleToV, AMDemodParam_TypeDef* AMDemodParam);

/* -------------------------------------------以下为数字信号处理辅助函数(DSP相关辅助函数)------------------------------------------------------ */

/* DSP辅助函数，启动DSP功能 */
HTRA_API int DSP_Open(void** DSP);

/* DSP辅助函数，初始化FFT参数 */
HTRA_API int DSP_FFT_DeInit(DSP_FFT_TypeDef* IQToSpectrum);

/* DSP辅助函数，配置FFT参数 */
HTRA_API int DSP_FFT_Configuration(void** DSP, const DSP_FFT_TypeDef* ProfileIn, DSP_FFT_TypeDef* ProfileOut, uint32_t* TracePoints, double* RBWRatio);

/* DSP辅助函数，将IQ数据转换成频谱数据 */
HTRA_API int DSP_FFT_IQSToSpectrum(void** DSP, const IQStream_TypeDef* IQStream, double Freq_Hz[], float PowerSpec_dBm[]);

/* DSP辅助函数，初始化LPF参数 */
HTRA_API void DSP_LPF_DeInit(Filter_TypeDef* LPF_ProfileIn);

/* DSP辅助函数，配置低通滤波器 */
HTRA_API void DSP_LPF_Configuration(void** DSP, const Filter_TypeDef* LPF_ProfileIn, Filter_TypeDef* LPF_ProfileOut);

/* DSP辅助函数，重置LPF中的缓存 */
HTRA_API void DSP_LPF_Reset(void** DSP);

/* DSP辅助函数，低通滤波_实信号 */
HTRA_API void DSP_LPF_Execute_Real(void** DSP, float Signal[], float LPF_Signal[]);

/* DSP辅助函数，低通滤波_复信号 */
HTRA_API void DSP_LPF_Execute_Complex(void** DSP, const IQStream_TypeDef* IQStreamIn, IQStream_TypeDef* IQStreamOut);

/* DSP辅助函数，初始化DDC配置参数 */
HTRA_API int DSP_DDC_DeInit(DSP_DDC_TypeDef* DDC_Profile);

/* DSP辅助函数，配置DDC */
HTRA_API int DSP_DDC_Configuration(void** DSP, const DSP_DDC_TypeDef* DDC_ProfileIn, DSP_DDC_TypeDef* DDC_ProfileOut);

/* DSP辅助函数，重置DDC中的缓存 */
HTRA_API void DSP_DDC_Reset(void** DSP);

/* DSP辅助函数，获取DDC的延时 */
HTRA_API void DSP_DDC_GetDelay(void** DSP, uint32_t* delay);

/* DSP辅助函数，执行DDC */
HTRA_API int DSP_DDC_Execute(void** DSP, const IQStream_TypeDef* IQStreamIn, IQStream_TypeDef* IQStreamOut);

/* DSP辅助函数，配置重采样 */
HTRA_API int DSP_Resample_Arb_Configuration(void** DSP, const uint64_t SamplePointsIn, const double SampleRateIn, const double SampleRateOut, uint64_t* SamplePointsOut);

/* DSP辅助函数，重置重采样 */
HTRA_API void DSP_Resample_Arb_Reset(void** DSP);

/* DSP辅助函数，执行重采样 */
HTRA_API int DSP_Resample_Arb_Execute(void** DSP, const float* Data_In_I, const float* Data_In_Q, const uint64_t SamplePointsIn, float* Data_Out_I, float* Data_Out_Q, uint64_t* SamplePointsOut);

/* DSP辅助函数，分析迹线的 IM3 参数 */
HTRA_API int DSP_TraceAnalysis_IM3(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, TraceAnalysisResult_IP3_TypeDef* IM3Result);

/* DSP辅助函数，分析迹线的 IM2 参数 */
HTRA_API int DSP_TraceAnalysis_IM2(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, TraceAnalysisResult_IP2_TypeDef* IM2Result);

/* DSP辅助函数，分析迹线的 相位噪声 参数 */
HTRA_API int DSP_TraceAnalysis_PhaseNoise(const double Freq_Hz[], const float PowerSpec_dBm[], const double OffsetFreqs[], const uint32_t TracePoints, const uint32_t OffsetFreqsToAnalysis, double CarrierFreqOut[], float PhaseNoiseOut_dBc[]);

/* DSP辅助函数，分析迹线的 信道功率*/
HTRA_API int DSP_TraceAnalysis_ChannelPower(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, const double CenterFrequency, const double AnalysisSpan, const double RBW, DSP_ChannelPowerInfo_TypeDef* ChannelPowerResult);

/* DSP辅助函数，分析迹线的 XdB带宽*/
HTRA_API int DSP_TraceAnalysis_XdBBW(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, const float XdB, TraceAnalysisResult_XdB_TypeDef* XdBResult);

/* DSP辅助函数，分析迹线的 占用带宽*/
HTRA_API int DSP_TraceAnalysis_OBW(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, const float OccupiedRatio, TraceAnalysisResult_OBW_TypeDef* OBWResult);

/* DSP辅助函数，分析迹线的 邻道功率比*/
HTRA_API int DSP_TraceAnalysis_ACPR(const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t TracePoints, const DSP_ACPRFreqInfo_TypeDef ACPRFreqInfo, TraceAnalysisResult_ACPR_TypeDef* ACPRResult);

/* 音频分析函数，分析音频的 音频电压(V)、音频频率(Hz)、信纳德(dB)和总谐波失真(%) 参数 */
HTRA_API void DSP_AudioAnalysis(const double Audio[], const uint64_t SamplePoints, const double SampleRate, DSP_AudioAnalysis_TypeDef* AudioAnalysis);

/* DSP辅助函数，频谱截取 */
HTRA_API void DSP_InterceptSpectrum(const double StartFreq_Hz, const double StopFreq_Hz, const double Freq_Hz[], const float PowerSpec_dBm[], const uint32_t FullsweepTracePoints, double FrequencyOut[], float PowerSpecOut_dBm[], uint32_t* InterceptPoints);

/* DSP辅助函数，迹线平滑 */
HTRA_API int DSP_TraceSmooth(float* Trace, unsigned int TracePoints, SmoothMethod_TypeDef SmoothMethod, unsigned int IndexOffset, unsigned int WindowLength, unsigned int PolynomialOrder);

/* DSP辅助函数，关闭DSP功能 */
HTRA_API int  DSP_Close(void** DSP);

/*  计算频谱占用度 */
HTRA_API int DSP_SpecOccuAnalysis(const double freq[],  const float spectrum[],  uint32_t tracePts,  double intervalTime,  double startFreq,  double ChBW,  uint32_t ChNum,  float threshold,  float occupancy[],  double* totaltime);



/* -------------------------------------------以下函数为弃用、暂未开放和非必要调用函数------------------------------------------------------ */

/* -------------------------------------------以下为多Profile模式(MPS相关接口，暂未开放)------------------------------------------------------ */

/* MPS模式，配置SWP模式相关参数 */
HTRA_API int MPS_SWP_Configuration(void** Device, uint16_t ProfileNum, const SWP_Profile_TypeDef* ProfileIn, SWP_Profile_TypeDef* ProfileOut, SWP_TraceInfo_TypeDef* TraceInfo);

/* MPS模式，配置RTA模式相关参数 */
HTRA_API int MPS_RTA_Configuration(void** Device, uint16_t ProfileNum, const RTA_Profile_TypeDef* ProfileIn, RTA_Profile_TypeDef* ProfileOut, RTA_FrameInfo_TypeDef* FrameInfo);

/* MPS模式，配置IQS模式相关参数 */
HTRA_API int MPS_IQS_Configuration(void** Device, uint16_t ProfileNum, const IQS_Profile_TypeDef* ProfileIn, IQS_Profile_TypeDef* ProfileOut, IQS_StreamInfo_TypeDef* StreamInfo);

/* MPS模式，配置DET模式相关参数 */
HTRA_API int MPS_DET_Configuration(void** Device, uint16_t ProfileNum, const DET_Profile_TypeDef* ProfileIn, DET_Profile_TypeDef* ProfileOut, DET_StreamInfo_TypeDef* StreamInfo);

/* ListMode接口，开启ListMode*/
HTRA_API int List_Enable(void **Device, int ResetListCmd);

/* ListMode接口，关闭ListMode*/
HTRA_API int List_Disable(void **Device);

/* ListMode接口，开始ListMode */
HTRA_API int List_Start(void** Device, uint16_t StartIndex, uint16_t StopIndex);

/* MPS模式，获取数据，并且标识是哪种模式和第几个Profile */
HTRA_API int MPS_GetData(void** Device, MPSData_TypeDef* MPSData, uint8_t* Analysis, uint16_t* ProfileNum);

/* MPS模式，简易版获取数据 */
HTRA_API int MPS_GetData_Simple(void** Device, MPSDataInfo_TypeDef* MPSDataInfo, double* Frequency, float* PowerSpec_dBm, int16_t* AlternIQStream, float* DETTrace, uint8_t* SpectrumTrace, uint16_t* SpectrumBitmap);

/* MPS模式，开辟内存 */
HTRA_API int MPS_DataBuffer_New(void** Device);

/* MPS模式，释放内存 */
HTRA_API int MPS_DataBuffer_Free(void** Device);


/* -------------------------------------------以下为弃用函数，不建议继续使用------------------------------------------------------ */

/* dev接口，控制NX系列设备修改IP地址(高级应用)*/
HTRA_API int Device_ChangeIPAddr(void** Device, const IPVersion_TypeDef ETH_IPVersion, const uint8_t ETH_IPAddress[], const uint8_t SubnetMask[]);

HTRA_API int Device_GetIPAddr(uint8_t ETH_IPAddress[10][4], uint8_t SubnetMask[10][4], uint8_t* IPAddressNum);

/* dev接口，控制NX系列设备修改IP地址(高级应用)*/
HTRA_API int Device_SetIPAddr(void** Device, const IPVersion_TypeDef ETH_IPVersion, const uint8_t ETH_IPAddress[], const uint8_t SubnetMask[]);

/* dev接口，控制NX系列设备重启网络，使修改的IP地址生效(高级应用)*/
HTRA_API int Device_RestartNetwork(void** Device);

/* dev接口，控制NX系列设备重启(高级应用)*/
HTRA_API int Device_Reboot(void** Device);

/* dev接口，更新设备MCU固件(高级应用)*/
HTRA_API int Device_MCUFirmwareUpdate(int DeviceNum, const char* path);

/* dev接口，更新设备FPGA固件(高级应用)*/
HTRA_API int Device_FPGAFirmwareUpdate(int DeviceNum, const char* path);

/* dev接口，更新GNSS固件(高级应用)*/
HTRA_API int Device_GNSSFirmwareUpdate(int DeviceNum, const char* path);

/* SWP模式，重置SWP模式下MaxHold频谱数据(高级应用) */
HTRA_API void SWP_MaxHoldReset(void** Device);

/* IQS模式，发起定时器-外触发单次同步*/
HTRA_API int IQS_SyncTimerByExtTrigger_Single(void** Device);

/* DET模式，发起定时器-外触发单次同步*/
HTRA_API int DET_SyncTimerByExtTrigger_Single(void** Device);

/* RTA模式，发起定时器-外触发单次同步*/
HTRA_API int RTA_SyncTimerByExtTrigger_Single(void** Device);

/* 模拟调制，创建 */
HTRA_API void ASD_Open(void** AnalogMod);

/* 模拟调制，释放 */
HTRA_API void ASD_Close(void** AnalogMod);

/*模拟解调模式，FM解调，仅返回解调后的音频波形和在波偏移*/
HTRA_API int ASD_Demodulate_FM(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], double* carrierOffsetHz);

/*模拟解调模式，AM解调，仅返回解调后的音频波形*/
HTRA_API int ASD_Demodulate_AM(const IQStream_TypeDef* IQStreamIn, float result[]);

typedef struct
{
	double ModRate;                      	// AM调制速率
	double ModDepth;                       	// AM调制深度 或调制指数
	double ModRate_Avg;                   	// 多次平均后的AM调制速率
	double ModDepth_Avg;                   	// 多次平均后的AM调制深度 或调制指数
}AM_DemodParam_TypeDef;

typedef struct
{
	double ModRate;                       // FM调制信号频率
	double ModDeviation;                  // FM调制频偏
	double CarrierFreqOffset;			  // 载波偏移
	double ModRate_Avg;                   // 多次平均后的FM调制信号频率
	double ModDeviation_Avg;              // 多次平均后的FM调制频偏
	double CarrierFreqOffset_Avg;		  // 多次平均后的载波偏移	
}FM_DemodParam_TypeDef;

/* 调制解调模式，FM解调，同时返回解调后的音频模型和调制参数*/
HTRA_API int ASD_FMDemodulation(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], FM_DemodParam_TypeDef* FM_DemodParam);

/* 调制解调模式，AM解调，同时返回解调后的音频模型和调制参数*/
HTRA_API int ASD_AMDemodulation(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], AM_DemodParam_TypeDef* AM_DemodParam);


/* -------------------------------------------以下为非必要调用函数------------------------------------------------------ */

/* dev接口，打印启动信息（BootInfo），包括UID、Model、HardwareVersion等 */
HTRA_API int Device_PrintBootInformation(BootInfo_TypeDef BootInfo);
/*  获取物理总线的数据传输速率 */
HTRA_API double Device_GetphyInterfaceXferRate(void** Device,double Period);

/* dev接口，获取当前时间-h-m-s，并可选择是否打印 */
HTRA_API void Device_GetLocalTime(int* hour, int* min, int* sec, int ifprint);

/* SWP模式，获取SWP模式下指定频率处的调试信息(高级应用) */
HTRA_API int SWP_GetDebugInfo(void** Device, double Freq, SWP_DebugInfo_TypeDef* DebugInfo);

/* Cal模式，校准功能(CAL相关接口) */
HTRA_API int CAL_QDC_GetOptParam(const IQStream_TypeDef* IQStream, CAL_QDCOptParam_TypeDef* OptParam_O);

/* dev接口，查询设备启动信息 */
HTRA_API int Device_QueryBootInfo(int DeviceNum, const BootProfile_TypeDef* BootProfile, BootInfo_TypeDef* BootInfo, uint32_t* UID_H32);

/* dev接口，查询设备启动信息，额外返回EIO版本 */
HTRA_API int Device_QueryBootInfos(int DeviceNum, const BootProfile_TypeDef* BootProfile, BootInfo_TypeDef* BootInfo, uint32_t* UID_H32, uint16_t* EIO_Version);

/* dev接口， 检查设备可用性 */
HTRA_API int Device_CheckDeviceAvailability(int DeviceNum, const BootProfile_TypeDef* BootProfile);

/* dev接口，获取GNSS海拔（需要选件支持），非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetGNSSAltitude(void** Device, int16_t* Altitude);

/* dev接口，获取GNSS天线状态（需要选件支持），非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetGNSSAntennaState(void** Device, GNSSAntennaState_TypeDef* GNSSAntennaState);

/* dev接口，获取GNSS天线状态（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetGNSSAntennaState_Realtime(void** Device, GNSSAntennaState_TypeDef* GNSSAntennaState);

/* dev接口，解析GNSS时间日期信息（需要选件支持）*/
HTRA_API int Device_AnysisGNSSTime(double ABSTimestamp, int16_t* hour, int16_t* minute, int16_t* second, int16_t* Year, int16_t* month, int16_t* day);

/* dev接口，获取GNSS海拔（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetGNSSAltitude_Realtime(void** Device, int16_t* Altitude);

/* dev接口，获取GNSS中DOCXO工作状态（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetDOCXOWorkMode_Realtime(void** Device, DOCXOWorkMode_TypeDef* DOCXOWorkMode);

/* dev接口，获取GNSS中DOCXO工作状态（需要选件支持），非实时方式，不打断数据获取，但信息只在获取数据包后更新*/
HTRA_API int Device_GetDOCXOWorkMode(void** Device, DOCXOWorkMode_TypeDef* DOCXOWorkMode);

/* dev接口，获取GNSS设备状态（需要选件支持），实时获取，短时间内会占用数据通道*/
HTRA_API int Device_GetGNSSInfo_Realtime(void** Device, GNSSInfo_TypeDef* GNSSInfo);

/* 模拟调制，创建 */
HTRA_API void ASD_Open(void** AnalogMod);

/* 模拟调制，释放 */
HTRA_API void ASD_Close(void** AnalogMod);

/*模拟解调模式，FM解调，仅返回解调后的音频波形和在波偏移*/
HTRA_API int ASD_Demodulate_FM(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], double* carrierOffsetHz);

/*模拟解调模式，AM解调，仅返回解调后的音频波形*/
HTRA_API int ASD_Demodulate_AM(const IQStream_TypeDef* IQStreamIn, float result[]);

/* 调制解调模式，FM解调，同时返回解调后的音频模型和调制参数*/
HTRA_API int ASD_FMDemodulation(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], FM_DemodParam_TypeDef* FM_DemodParam);

/* 调制解调模式，AM解调，同时返回解调后的音频模型和调制参数*/
HTRA_API int ASD_AMDemodulation(void** AnalogMod, const IQStream_TypeDef* IQStreamIn, bool reset, float result[], AM_DemodParam_TypeDef* AM_DemodParam);

/* -------------------------------------------以下为信号源控制(SIG和VSG相关接口)------------------------------------------------------ */

/* 信号源参数初始化 */
HTRA_API int SIG_ProfileDeInit(void** Device, SIG_Profile_TypeDef* Profile);
/* 信号源工作状态配置 */
HTRA_API int SIG_Configuration(void** Device, SIG_Profile_TypeDef* ProfileIn, SIG_Profile_TypeDef* ProfileOut, SIG_Info_TypeDef* SIG_Info);
/* 信号源更新包头包尾大小 */
HTRA_API int SIG_UpdateHeaderTailSize(void** Device, uint32_t* HeaderSize, uint32_t* TailSize);
/* 信号源发送数据 */
HTRA_API int SIG_SendIQStream(void** Device, unsigned char* DataBuffer, int DataSize);
/* 信号源总线触发开始 */
HTRA_API int SIG_BusTriggerStart(void** Device);
/* 信号源总线触发停止 */
HTRA_API int SIG_BusTriggerStop(void** Device);


/* 模拟调制，产生待调制信号波形 */
HTRA_API int ASD_GenerateSignalWaveform(void** AnalogMod, AnalogSignalType_TypeDef AnalogSignalType, double SignalFrequency, double  SampleRate, int resetflag, float* m, int* SamplePoints);

/* 模拟调制，产生最终的FM调制波形 */
HTRA_API int ASD_GenerateFMWaveform(void** AnalogMod, SIG_FM_Profile_TypeDef* SIG_FM_Profile, float* m, short* I, short* Q, int* SamplePoints);
HTRA_API int ASD_GeneratePulseWaveform(void** AnalogMod, SIG_Pulse_Profile_TypeDef* SIG_Pulse_Profile, short* I, short* Q, int* SamplePoints);

/* 模拟调制，产生最终的AM调制波形 */
HTRA_API int ASD_GenerateAMWaveform(void** AnalogMod, SIG_AM_Profile_TypeDef* SIG_AM_Profile, float* m, short* I, short* Q, int* SamplePoints);

/* DSP辅助函数，执行中频校准 */
HTRA_API int DSP_IFCalibration(void** Device, double* Frequency, float* Spectrum, unsigned int SpectrumPoints);

/* DSP辅助函数，获取指定窗型的窗型因子 */
HTRA_API void DSP_GetWindowCoefficient(Window_TypeDef Window, int n, double Coefficient[]);

/* DSP辅助函数，执行加窗*/
HTRA_API void DSP_Windowing(DataFormat_TypeDef DataFormat, void* Data_I, const double* Window, uint32_t Samples, double* Data_O);

/* DSP辅助函数，获取白噪声 */
HTRA_API void DSP_GetWhiteGaussianNoise(uint32_t n, float* noise);

/* DSP辅助函数，卷积 */
HTRA_API void DSP_Convolution(float x[], float y[], int x_size, int y_size, float Output[]);

/* DSP辅助函数，抽取 */
HTRA_API void DSP_Decimate(float xn[], float yn[], uint64_t size, uint32_t DecimateFactor);

/* DSP辅助函数，生成正弦波 */
HTRA_API void DSP_GenerateSineWaveform(float yn[], const Sin_TypeDef* Sin_Profile);

/* DSP辅助函数，执行NCO生成正弦、余弦信号 */
HTRA_API void DSP_NCO_Execute(const Sin_TypeDef* NCO_Profile, float* sin, float* cos);

#ifdef __cplusplus
}
#endif

#endif //HTRA_API_H