# Terra SDK 接口文档 ## Terra SDK Terra 是设备的名称,包含了光谱仪、激光器、拉曼相关接口。 ## 接口列表 | 类名称 | 描述 | |--------|------| | DeviceWrapper | 设备管理器 | | Device | 设备 | ## 调用示例 **step1: 获取 USB 设备** ```java List allDevices = DeviceWrapper.openAllDevices(mContext); ``` **step2: 设备初始化**,初始化完成后通过回调方式通知客户端 ```java device.setCallBack(new Device.CallBack() { @Override public void onDeviceStatue(boolean state) { Log.d(TAG, "state = " + state ); String sn = ""; if(state){ sn = device.getSerialNumber(); } //... } }); ``` **step3: 调用设备** ```java double[] spectrum = device.getSpectrum(); ``` ## DeviceWrapper 获取或关闭所有设备 ### Methods #### openAllDevices ```java /** * 打开所有设备 * * @param context Application context * @return 挂在的所有设备 */ public static List openAllDevices(Context context); ``` #### closeAllDevices ```java /** * 关闭所有设备 */ public static void closeAllDevices(); ``` #### openDebug ```java /** * 开启日志输出 */ public static void openDebug(); ``` #### checkUsbPermission ```java /** * 检测是否有 USB 权限 */ public static void checkUsbPermission(Context context, PermissionCallBack permissionCallBack) { UsbConnect.checkUsbPermission(context,permissionCallBack); } ``` #### PermissionCallBack ```java /** * USB 权限状态回调 */ public interface PermissionCallBack{ /** * USB 权限状态 * @param deviceIndex 设备索引 * @param state true:有权限 */ public void onPermissionStatue(int deviceIndex, boolean state); } ``` ## Device Device 是封装了设备提供的接口 ### Methods `CallBack` `setCallBack` `close` `getIndex` `isConnect` `getSerialNumber` `setIntegrationTime` `setAverageTimes` `setTriggerMode` `getSpectrum` `getResetSpectrum` `getWavelength` `getWaveNumber` `setCCDTECOn` `setCCDTECOff` `setCCDTECTemperature` `setLampEnable` `setLampDelayTime` `setLampWidth` `setLampInterval` `getLampDelayTime` `getLampWidth` `getLampInterval` `setExcitedWaveLength` `setLaserPower` `setLaserOn` `setLaserOff` `setLaserPowerOn` `setLaserPowerOff` `setTECOn` `setTECOff` `setMainBoardOn` `setMainBoardOff` `isMainBoardOpen` `isTECOpen` `waveletSmooth` `removeFluorescence` `lineInterpolation` `findPeaks` `getSlit` `getBadPoints` `getYJCorrectCoefficient` `getYAxisCorrectCoefficient` `getCorrectForDetectorNonlinear` `getWavelengthCalibrationCoefficients` `getLaserPowerCorrectCoefficient` `getFpgaVersion` `setYJCorrectCoefficient` `setLaserPowerCorrectCoefficient` #### CallBack ```java /** * 设备状态回调接口 */ public interface CallBack{ /** * 设备状态回调 * @param state 设备状态 * true:连接成功 * false:连接失败 */ void onDeviceStatue(boolean state); } ``` #### setCallBack ```java /** * 设置回调函数 * @param callBack 回调 */ public void setCallBack(CallBack callBack); ``` #### close ```java /** * 关闭设备 */ public void close(); ``` #### getIndex ```java /** * 设备编号 * @return 编号 */ public int getIndex(); ``` #### isConnect ```java /** * 设备是否连接成功 */ public boolean isConnect(); ``` #### getSerialNumber ```java /** * 获取设备序列号 * @return 设备序列号 */ public String getSerialNumber(); ``` #### setIntegrationTime ```java /** * 设置设备积分时间 * @param integrationTime 积分时间 * @return 是否设置成功 */ public boolean setIntegrationTime(double integrationTime); ``` #### setAverageTimes ```java /** * 设置平均次数 * @param averageTimes 平均次数 */ public void setAverageTimes(int averageTimes); ``` #### setTriggerMode ```java /** * 设置触发模式 * @param triggerMode 触发模式 * 0: Free Running * 1: Hardware Level * 2: Synchronous * 3: Hardware Edge * 4: Edge And Free * @return 是否设置成功 */ public boolean setTriggerMode(int triggerMode); ``` #### getSpectrum ```java /** * 获取光谱(读取当前光谱,非平均过后的光谱) * @return 光谱数据 */ public double[] getSpectrum(); ``` #### getResetSpectrum ```java /** * 获取光谱(读取当前光谱,受用户积分时间) * @return 光谱数据 */ public double[] getResetSpectrum(); ``` #### getWavelength ```java /** * 获取波长 * @return 波长数据 */ public double[] getWavelength(); ``` #### getWaveNumber ```java /** * 获取波数 * @return 波数数据 */ public double[] getWaveNumber(); ``` #### setCCDTECOn ```java /** * 开 CCD 制冷 * @return 是否关闭成功 */ public boolean setCCDTECOn(); ``` #### setCCDTECOff ```java /** * 关 CCD 制冷 * @return 是否关闭成功 */ public boolean setCCDTECOff(); ``` #### setCCDTECTemperature ```java /** * 设置制冷的目标温度 (-20~40) * @return 是否设置成功 */ public boolean setCCDTECTemperature(int temperature); ``` #### getCCDTECState ```java /** * 获取探测器制冷状态,返回 16 个字节: * 第一个字节是 TEC 当前温度符号位(0:零上,1:零下),单位 * 第二个字节是 TEC 当前温度整数位 * 第三个字节是 TEC 当前温度小数位 * 第四个字节是 PID 参数 P 高八位 * 第五个字节是 PID 参数 P 低八位 * 第六个字节是 PID 参数 I * 第七个字节是 PID 参数 D * 第八个字节是 TEC 电流符号位(0:正电流,1:负电流),单位 mA * 第九个字节是 TEC 电流高八位 * 第十个字节是 TEC 电流低八位 * 第十一个字节是报警是否位(0 表示没有,1 表示报警,2 表示 TEC 没有) * 第十二个字节 TEC 目标温度符号位(0:零上,1:零下),单位 * 第十三个字节 TEC 目标温度整数位 * 第十四个字节 LD 电流高八位(目前是 PD 管放大器的电压) * 第十五个字节 LD 电流低八位 * 第十六个字节上电状态(0 表示没上电,1 表示上电) * @return 当前状态信息 */ public byte[] getCCDTECState(); ``` #### setLampEnable ```java /** * Lamp 控制 * @param enable 控制 true:开,false * @return 是否设置成功 */ public boolean setLampEnable(boolean enable); ``` #### setLampDelayTime ```java /** * 设置灯泡的延迟时间(微秒) * @param delayTime 延迟时间 * @return 是否设置成功 */ public boolean setLampDelayTime(double delayTime); ``` #### setLampWidth ```java /** * 设置灯泡脉宽(微秒) * @param width 脉宽 * @return 是否设置成功 */ public boolean setLampWidth(double width); ``` #### setLampInterval ```java /** * 设置灯泡的周期(微秒) * @param interval 周期 * @return 是否设置成功 */ public boolean setLampInterval(double interval); ``` #### getLampDelayTime ```java /** * 获取延迟时间(微秒) * @return 延迟时间 */ public double getLampDelayTime(); ``` #### getLampWidth ```java /** * 获取灯泡脉宽(微秒) * @return 灯泡脉宽 */ public double getLampWidth(); ``` #### getLampInterval ```java /** * 获取灯泡的周期(微秒) * @return 灯泡周期 */ public double getLampInterval(); ``` #### setExcitedWaveLength ```java /** * 设置激发波长 * @param excitedWaveLength 激发波长 * @return 是否设置成功 */ public boolean setExcitedWaveLength(int excitedWaveLength); ``` #### setLaserPower ```java /** * 设置激光功率 * @param power 激光功率 * @return 是否设置成功 */ public boolean setLaserPower(int power); ``` #### setLaserOn ```java /** * 开激光 * @return 是否设置成功 */ public boolean setLaserOn(); ``` #### setLaserOff ```java /** * 关激光 * @return 是否设置成功 */ public boolean setLaserOff(); ``` #### setLaserPowerOn ```java /** * 开激光器电源 * @return 是否设置成功 */ public boolean setLaserPowerOn(); ``` #### setLaserPowerOff ```java /** * 关激光器电源 * @return 是否设置成功 */ public boolean setLaserPowerOff(); ``` #### setTECOn ```java /** * 开 TEC * @return 是否设置成功 */ public boolean setTECOn(); ``` #### setTECOff ```java /** * 关 TEC * @return 是否设置成功 */ public boolean setTECOff(); ``` #### setMainBoardOn ```java /** * 开主板 * @return 是否设置成功 */ public double setMainBoardOn(); ``` #### setMainBoardOff ```java /** * 关主板 * @return 是否设置成功 */ public double setMainBoardOff(); ``` #### isMainBoardOpen ```java /** * 主板是否开成功,在最后一次操作时判断 * @return 是否开成功 */ public boolean isMainBoardOpen(); ``` #### isTECOpen ```java /** * 获取 TEC 状态,true:已开 * @return TEC 状态 */ public boolean isTECOpen(); ``` #### waveletSmooth ```java /** * 小波平滑 * @param spectrum 光谱 * @return 平滑后的光谱 */ public double[] waveletSmooth(double[] spectrum); ``` #### removeFluorescence ```java /** * 去荧光 * @param spectrum 光谱 * @return 去荧光后的光谱 */ public double[] removeFluorescence(double[] spectrum, int side); ``` #### lineInterpolation ```java /** * 线性插值 * @param xDataRaw 原 X 轴数据 * @param yDataRaw 原 Y 轴数据 * @param xData 插值后的 X 轴数据 * @return yData 插值后的 Y 轴数据 */ public double[] lineInterpolation(double[] xDataRaw, double[] yDataRaw, double[] xData); ``` #### findPeaks ```java /** * 寻峰 * @param spectrum 光谱 * @param minIndicesBetweenPeaks 最小峰间距(值为 2,实际可能需要 5) * @param baseline 基线 * @return 返回找到的峰的位置 */ public static int[] findPeaks(double[] spectrum, int minIndicesBetweenPeaks, double baseline); ``` #### getSlit ```java /** * 获取狭缝 * @return 狭缝大小 */ public String getSlit(); ``` #### getBadPoints ```java /** * 获取坏点 * @return 坏点 */ public int[] getBadPoints(); ``` #### getYJCorrectCoefficient ```java /** * 获取波长校准系数 * @return 波长校准系数 */ public double[] getYJCorrectCoefficient(); ``` #### getYAxisCorrectCoefficient ```java /** * 获取 Y 轴校准系数 * @return Y 轴系数 */ public double[] getYAxisCorrectCoefficient(); ``` #### getCorrectForDetectorNonlinear ```java /** * 获取探测器非线性校正系数 * @return 探测器非线性校正系数 */ public double[] getCorrectForDetectorNonlinear(); ``` #### getWavelengthCalibrationCoefficients ```java /** * 获取波长校准系数 * @return 波长校准系数 */ public double[] getWavelengthCalibrationCoefficients(); ``` #### getLaserPowerCorrectCoefficient ```java /** * 获取功率校准系数 * @return 功率校准系数 */ public double[] getLaserPowerCorrectCoefficient(); ``` #### getFpgaVersion ```java /** * 获取 FPGA 版本 * @return FPGA 版本 */ public double[] getFpgaVersion(); ``` #### setYJCorrectCoefficient ```java /** * 设置波长校准系数 * @param coffes 波长校准系数 * @return 是否设置成功 */ public boolean setYJCorrectCoefficient(double[] coffes); ``` #### setLaserPowerCorrectCoefficient ```java /** * 设置功率校准系数 * @param calibrationCoefficient 功率校准系数(格式:16 位字符串,4 个数据,每个数据 4 位,如 0070030008001400) */ public void setLaserPowerCorrectCoefficient(String calibrationCoefficient); ```